(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
동일한 자료형의 변수를 여러 개 선언하여 사용해야 되는 경우가 있다. 예를 들어 학생의 수학 점수를 관리해야 되는 상황이라면 학생의 수만큼 정수형 변수를 선언해야 하는데, 배열을 통해 변수의 묶음으로 한 번에 선언하여 관리할 수 있다. 연속된 자료형이므로 반복문을 통해 각각의 변수에 접근이 가능하여 코드의 중복을 최소화 할 수 있다.
(자바(Java) 다차원 배열 : https://devmoomin.tistory.com/82)
■ 배열의 선언과 초기화
1) 배열의 선언
- 자료형[] 배열명 = new 자료형[개수]; 또는 자료형 배열명[] = new 자료형[개수]; 와 같은 형식으로 선언이 가능하다.
- 배열을 선언하면 자료형에 해당하는 변수가 지정한 개수만큼 생성되는데, int형 배열 5개를 선언하면 int형 4바이트 * 5가 되어 총 20바이트가 메모리에 할당된다.
- 자료형에는 int, char와 같은 기본 자료형 뿐만 아니라 사용자가 직접 정의한 참조 자료형도 사용할 수 있다.
1
2
3
4
5
6
|
public class Main {
public static void main(String[] args) {
int[] arr1 = new int[5];
String[] arr2 = new String[5];
}
}
|
cs |
Line 3 : 크기가 5인 int형 배열 선언
Line 4 : 크기가 5인 String형 배열 선언
2) 배열의 초기화
- int[] arr = new int[] {1, 2, 3, 4, 5}; 또는 int[] arr = {1, 2, 3, 4, 5}; 와 같은 형식으로 초기화가 가능하다.
- 중괄호 안의 개수만큼 자동으로 배열이 선언되며, 선언과 동시에 초기화 할 때에는 []안에 개수를 생략해 주어야 한다.
1
2
3
4
5
6
|
public class Main {
public static void main(String[] args) {
int[] arr1 = new int[] {1, 2, 3, 4, 5};
int[] arr2 = {1, 2, 3, 4, 5};
}
}
|
cs |
Line 3 : 크기가 5인 int형 배열 선언 후 초기화
Line 4 : 크기가 5인 int형 배열 선언 후 초기화
- 선언과 초기화를 따로 할 때에는 new 자료형[]을 생략할 수 없다.
1
2
3
4
5
6
|
public class Main {
public static void main(String[] args) {
int[] arr;
arr = new int[] {1, 2, 3, 4, 5};
}
}
|
cs |
Line 3 : 정수형 배열 arr 선언
Line 4 : 정수형 배열 arr 초기화
■ 배열의 접근
- 배열은 인덱스라는 고유의 번호를 통해 접근이 가능한데, 인덱스는 0부터 시작한다. 따라서 크기가 5인 배열을 선언한 경우 0 ~ 4의 인덱스를 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class Main {
public static void main(String[] args) {
String[] arr = new String[5];
for(int i = 0; i < 5; ++i) {
arr[i] = new String("arr" + (i + 1));
}
for(int i = 0; i < 5; ++i) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
// arr[0] = arr1
// arr[1] = arr2
// arr[2] = arr3
// arr[3] = arr4
// arr[4] = arr5
}
}
|
cs |
Line 3 : 크기가 5인 String형 배열 arr 선언
Line 5 ~ Line 7 : [0] ~ [4] 인덱스의 배열에 각각 값을 대입
Line 9 ~ Line 11 : 배열에 들어있는 값 출력
■ 배열의 복사
- 배열을 사용하다보면 배열의 값을 다른 배열의 값으로 복사해야하는 경우가 종종 있다. 값을 복사하는 방식에 따라 크게 얕은 복사와 깊은 복사로 나누어 진다.
1) 얕은 복사
- 값을 복사하는 것이 아니라 인스턴스의 주소 자체를 복사하는 경우를 말한다.
- 두 개의 배열이 하나의 인스턴스를 참조하고 있으므로, 해당 인스턴스의 값이 바뀌면 해당 인스턴스를 바라보는 배열 모두 영향을 받는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class Main {
public static void main(String[] args) {
String[] arr1 = new String[5];
arr1[0] = "apple";
arr1[1] = "book";
arr1[2] = "coffee";
arr1[3] = "dog";
arr1[4] = "easy";
String[] arr2 = arr1;
for(int i = 0; i < 5; ++i) {
System.out.println("[" + i + "] = " + arr1[i]);
}
// [0] = apple
// [1] = book
// [2] = coffee
// [3] = dog
// [4] = easy
arr1[0] = "airport";
for(int i = 0; i < 5; ++i) {
System.out.println("[" + i + "] = " + arr2[i]);
}
// [0] = airport
// [1] = book
// [2] = coffee
// [3] = dog
// [4] = easy
}
}
|
cs |
Line 3 ~ Line 8 : 크기가 5인 String형 배열 arr1 선언 후 초기화
Line 10 : arr2 배열 선언 후 arr1의 인스턴스 주소를 대입하여 초기화
Line 12 ~ Line 14 : arr1 배열의 값 출력
Line 22 : arr1 배열의 [0]번 인덱스의 값을 airport로 변경
Line 24 ~ Line 26 : arr2 배열의 값 출력 (arr2[0]의 값이 airport로 바뀐 것 확인)
2) 깊은 복사
- 인스턴스의 주소가 아닌 값을 직접 복사하여 서로 영향을 받지 않도록 복사하는 경우를 말한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
public class Main {
public static void main(String[] args) {
String[] arr1 = new String[5];
arr1[0] = "apple";
arr1[1] = "book";
arr1[2] = "coffee";
arr1[3] = "dog";
arr1[4] = "easy";
String[] arr2 = new String[5];
for(int i = 0; i < 5; ++i) {
arr2[i] = arr1[i];
}
for(int i = 0; i < 5; ++i) {
System.out.println("[" + i + "] = " + arr1[i]);
}
// [0] = apple
// [1] = book
// [2] = coffee
// [3] = dog
// [4] = easy
arr1[0] = "airport";
for(int i = 0; i < 5; ++i) {
System.out.println("[" + i + "] = " + arr2[i]);
}
// [0] = apple
// [1] = book
// [2] = coffee
// [3] = dog
// [4] = easy
}
}
|
cs |
Line 3 ~ Line 8 : 크기가 5인 String형 배열 arr1 선언 후 초기화
Line 10 : 크기가 5인 String형 배열 arr2 선언
Line 11 ~ Line 13 : arr1 배열의 값을 각각 arr2 배열에 복사
Line 15 ~ Line 17 : arr1 배열의 값 출력
Line 25 : arr1의 [0]번 인덱스의 값을 airport로 변경
Line 27 ~ Line 29 : arr2 배열의 값 출력 (arr2[0]의 값에 영향 없는 것 확인)
'Java' 카테고리의 다른 글
자바(Java) 다차원 배열 (0) | 2020.07.04 |
---|---|
자바(Java) static 변수(클래스 변수), static 메소드(클래스 메소드) (0) | 2020.07.03 |
자바(Java) this 예약어 (0) | 2020.07.03 |
자바(Java) 접근 제어자 (0) | 2020.06.30 |
자바(Java) 생성자(Constructor) (0) | 2020.06.30 |