자바 배열에 대해서 공부를 하는데 프로그래머스에 주어진 정수 배열의 원소 순서를 거꾸로 뒤집은 배열을 반환해라고 나왔다.
나는
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 배열과 동일한 크기로 초기화했기 때문에 배열 요소에 접근할 수 있는 것이다.
따라서, 배열의 크기를 초기화할때는 적절한 크기를 할당하여 배열을 생성해야 한다.
'Language > Java' 카테고리의 다른 글
[Java] 제곱근 구하기 / Math.sqrt() (0) | 2023.10.20 |
---|---|
[Java] 배열 복사 메서드 / Arrays.copyof(), Arrays.copyofRange(), System.arrayCopy() (0) | 2023.10.17 |
[Java] 범위 출력함수 / IntStream.range, rangeClosed (1) | 2023.10.12 |
[Java] 분수 합 구하기 / 유클리드 호제법 (1) | 2023.10.10 |
[Java] 제곱 반환하기 / pow() (2) | 2023.10.10 |