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인 상태로 바뀌지 않은 채 존재할 것이다.
'Development > Java' 카테고리의 다른 글
코드에서 Exception을 catch하지 못할 때: 상위 예외 클래스에 주의 (1) | 2016.07.31 |
---|---|
적합한 데이터 구조 선택: 요구사항 분석의 영향 (0) | 2016.05.01 |
UDP(Datagram) 소켓에 특정 네트워크 인터페이스로 전송되도록 하기 (0) | 2016.03.23 |
Eclipse에서 만든 jar 파일이 java.lang.UnsupportedClassVersionError와 함께 실행되지 않는 경우 (0) | 2015.10.21 |
Java / Object의 equals와 hashCode 메쏘드 (2) | 2011.08.24 |