본문 바로가기
Language/Java

[Java] 배열 초기화와 배열 크기 할당

by 키튼햄 2023. 10. 15.

자바 배열에 대해서 공부를 하는데 프로그래머스에 주어진 정수 배열의 원소 순서를 거꾸로 뒤집은 배열을 반환해라고 나왔다.

나는

class Solution {
    public int[] solution(int[] num_list) {
        int [] answer = {};
        for(int i=0; i<num_list.length; i++){
            answer[i] = num_list[num_list.length-1-i];
        }
        return answer;
    }
}

이렇게 코드를 만들었지만 실행할 수 없다는 오류가 떴다.

 

한참 생각해보고 찾아보다가 chat-gpt를 사용해서 틀린곳을 찾아달라고 하니

class Solution {
    public int[] solution(int[] num_list) {
        int [] answer = new int[num_list.length];
        for(int i=0; i<num_list.length; i++){
            answer[i] = num_list[num_list.length-1-i];
        }
        return answer;
    }
}

이렇게 코드를 만들어 주었다. 

바뀐것은 아래 코드 한 줄 뿐이었다.

int [] answer = {};  ⇒   int [] answer = new int[num_list.length];

 

한마디로 두 코드의 차이점은 배열 answer를 초기화하는 방법이 달랐고 그것에 따라서 실행 오류의 유무가 갈렸던 것이다.

 

 

따라서 두 코드의 차이점에 대해 분석해보고자 한다.

 

 

 

 

분석 결과

 

#내가 작성한 코드 answer 배열을 빈 배열로 초기화 했다. ( ⇒ 오류 발생)

int[] answer = {};

 

#수정된 코드 answer 배열을 배열의 크기를 지정하여 초기화 했다. ( ⇒ 정상 작동)

int[] answer = new int[num_list.length];

 

 

내가 작성한 코드는 answer 배열을 빈 배열로 초기화 했기 때문에 배열의 크기가 0인 배열을 생성한다.

이 때문에 오류가 발생하는 것인데, 자세한 이유는 다음과 같다.

 

> 배열의 크기를 미리 지정하지 않고 빈 배열로 초기화 하면, 해당 배열은 크기가 0이므로 배열의 길이를 변경하거나 배열의 각 요소에 값을 할당할 수 없다.

따라서 배열을 초기화한 후에 answer[i]와 같은 방식으로 배열요소에 접근하려고 하면 오류가 발생한다.

만약 크기를 동적으로 변경하거나 배열 요소에 값을 할당하고 싶다면 크기가 0인 배열을 다른 크기로 다시 재할당 해야 한다.

 

하지만 수정된 코드에서는 new int[num_list.length] 를 사용하여 배열을 num_list 배열과 동일한 크기로 초기화했기 때문에 배열 요소에 접근할 수 있는 것이다.

 

 

따라서, 배열의 크기를 초기화할때는 적절한 크기를 할당하여 배열을 생성해야 한다.