반응형

Java 버전이 올라가면서 향상된 for 루프문(enhanced for loop) 문법이 나왔는데, 이것으로는 배열을 초기화할 수 없다는 사실을 발견했다.


예를 들어, 10개짜리 문자열 배열(String array)을 만들고 향상된 for 루프를 쓰게 되면 아래와 같이 코딩할 수는 있는데,

String[] strArray = new String[10];

for( String str : strArray ){

str = "test_string";

}


for( String str: strArray ){

System.out.println(str); // NullPointerException 발생

}


위와 같이 하면 배열의 각 문자열이 초기화되지 않고 여전히 null 상태로 존재하게 된다.

번거롭더라도 배열 초기화는 index number를 사용해서 아래와 같이 명시적으로 해 주는 것이 좋다.


for(int i=0; i<strArray.length; i++){

strArray[i] = "test_string";

}


이 문제는 String 뿐만 아니라 객체 배열(Object array), 기본 타입 배열(primitive type array; 예를 들어, int[], double[])에서도 마찬가지로 발생한다.

다만 기본 타입(primitive type) 배열의 경우에는 향상된 for 루프를 쓰더라도 NullPointerException은 발생하지 않지만, 값들이 0인 상태로 바뀌지 않은 채 존재할 것이다.



반응형
블로그 이미지

Bryan_

,