5.1.3 1차원 배열을 생성하는 다양한 방법

jh·2022년 1월 23일
0

Do it! 자바 완전 정복

목록 보기
34/70

지금까지 1차원 배열을 생성하고 값을 대입하는 방법을 알아봤다. 그런데 자바는 앞에서 알아본 방법 외에도 배열을 생성하고 값을 대입하는 다양한 방법을 지원한다. 여기서는 앞의 방법을 포함해 1차원 배열을 생성하거나 값을 대입하는 3가지 방법을 알아본다.

방법 ① 배열 객체를 생성하고 값 대입하기

첫 번째 방법은 앞서 알아본 것처럼 배열의 객체를 먼저 선언하고 이후 각 인덱스 위치마다 값을 대입하는 것이다. 객체를 생성할 때는 배열의 길이가 명확히 기술돼야 하고 값을 입력할 때는 가용한 인덱스 (0~ 배열의 길이 -1)만을 사용해야 한다.

📖배열 객체를 생성하고 값 대입하기

자료형[] 참조 변수명 = new 자료형[배열의 길이];
참조 변수명[0] = 값;
참조 변수명[1] = 값;
...
참조 변수명[배열의 길이-1] = 값;

예시 
int[] a = new int[3];
a[0] = 3;
a[1] = 4;
a[2] = 5;

방법 ② 배열 객체 생성과 함께 값 대입하기

두 번째 방법은 배열 객체를 생성함과 동시에 값을 대입하는 것이다. 이때 초깃값을 직접 넣어 주므로 컴파일러에 따른 강제 초기화 과정은 생략된다. 두 번째 방법에서는 객체를 생성할 때 오른쪽 항의 대괄호 안에 배열의 길이를 지정하지 않는다. 배열을 생성할 때 배열의 길이를 반드시 지정해야 하는 배열의 두 번째 특징을 만족하지 못하는 것처럼 보일 수도 있다. 하지만 배열의 길이는 다음에 나오는 중괄호 안의 초기화 데이터 개수로 결정되므로 배열의 특징을 모두 만족한다.

📖 배열 객체 생성과 함께 값 대입하기

자료형[] 참조 변수명 = new 자료형[]{값, 값, 값};
-> 배열의 길이를 지정하지 않음, 배열의 길이는 값 개수로 결정

int[] a = new int[]{3, 4, 5};

방법 ③ 대입할 값만 입력하기
마지막 방법은 new 키워드 없이 초기화할 값만 중괄호에 넣어 대입하는 것이다. 초기화 데이터의 개수가 배열의 길이를 결정한다.

자료형[] 참조 변수명 = {값, 값, ..., 값};

int[] a = {3, 4, 5};

변수 선언과 값 대입의 분리 가능 여부
방법 ③은 방법 ②에서 new int[]를 생략한 형태다. 만일 방법 ②와 방법 ③이 완벽히 동일하다면 굳이 상대적으로 복잡한 방법 ②을 쓸 필요는 없을 것이다. 하지만 방법 ③에는 변수 선언과 값의 대입을 분리할 수 없다는 제약 조건이 따른다. 즉, 선언과 동시에 값을 대입할 때만 사용할 수 있다. 이 정도가 뭔 대수냐 할지 모르지만 방법 ③은 선언과 대입을 분리할 수 없다는 특징 때문에 메서드의 입력매개변숫값으로는 사용할 수 없게 된다.

📖 방법 ② 선언과 객체 대입 분리 가능

int[]a = new int[]{3,4,5}; // 0
int[]a;
a = new int[]{3,4,5}; // 0

📖 방법 ③ 선언과 객체 대입 분리 불가능

int[] a = {3, 4, 5}; // 0
int[]a;
a = {3, 4, 5}; // X

실습

        // 배열의 값 대입 방법 1
        int[] array1 = new int[3]; // 배열의 원소 값 강제 초기화
        array1[0] = 3;
        array1[1] = 4;
        array1[2] = 5;
        System.out.println(array1[0] + " " + array1[1] + " " + array1[2]);

        int[] array2;
        array2 = new int[3]; // 배열의 선언과 객체 대입을 분리 가능
        array2[0] = 3;
        array2[1] = 4;
        array2[2] = 5;
        System.out.println(array2[0] + " " + array2[1] + " " + array2[2]);

        // 배열의 값 대입 방법 2
        int[] array3 = new int[]{3, 4, 5}; // 강제 초기화 생략
        System.out.println(array3[0] + " " + array3[1] + " " + array3[2]);

        int[] array4;
        array4 = new int[]{3, 4, 5}; // 배열의 선언과 객체 대입을 분리 가능
        System.out.println(array4[0] + " " + array4[1] + " " + array4[2]);

        // int[] array6;
        // array 6 = {3, 4, 5}; // 불가능 배열의 선언과 객체 대입을 분리 불가능
        // System.out.println(array6[0] + " " + array6[1] + " " + array6[2]);

결과

profile
코딩 공부 중...

0개의 댓글