(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

동일한 자료형의 변수를 여러 개 선언하여 사용해야 되는 경우가 있다. 예를 들어 학생의 수학 점수를 관리해야 되는 상황이라면 학생의 수만큼 정수형 변수를 선언해야 하는데, 배열을 통해 변수의 묶음으로 한 번에 선언하여 관리할 수 있다. 연속된 자료형이므로 반복문을 통해 각각의 변수에 접근이 가능하여 코드의 중복을 최소화 할 수 있다.

(자바(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[] {12345};
        int[] arr2 = {12345};
    }
}
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[] {12345};
    }
}
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]의 값에 영향 없는 것 확인)

+ Recent posts