2022. 7. 15. 16:21
반응형

java 개발을 하다 보면 NPE(Null Point Exception)은 흔하게 볼 수 있는 예외사항입니다.

그래서 NPE가 발생되지 않도록 미리 Null 체크를 해야합니다.

타입마다 체크하는 방식이 조금씩 다르기 때문에 List를 기준으로 차이점을 비교해 봅니다.

 

1. 보통의 방식

List<String> testList = getTestList();  // 어딘가에서 가져온 list
if(testList != null) {
    for(String test : testList) {
        ........
    }
}

 

2. Optional을 이용한 방식 (for문 내용에 따라 다르겠지만 특수한 경우를 제외하고는 비효율적)

 

3. 개인적으로 선호하는 방식

List<String> testList         = getTestList();  // 어딘가에서 가져온 list
if(testList == null) testList = Collections.emptyList();
for(String test : testList) {
    ........
}

 

 

3번 방식을 선호하는 이유는 다음과 같습니다.

  • 코딩의 depth를 줄일 수 있다. (괄호 안에 괄호식으로 계속 들어가면 가독성이 떨어짐)
  • 비어있는 list라고 명시적으로 표현이 됐다.
  • 추가로 사용되는 비용이 거의 없다. (메모리, cpu 사용량)

 

Collections.emptyList();의 경우 새로운 List를 생성하는 것이 아니라 이미 가지고 있는 불변 객체 (Immutable Object)를 대입하기 때문에 추가로 생성되는 객체는 없지만, 불변 객체이므로 수정은 불가능 합니다.

 

Collection 종류에 따라서 Collections.emptyMap(), Collections.emptySet() 처럼 다른 Collection도 사용 가능합니다.

 

Map에 대한 null 처리는 아래와 같이 코딩합니다. (JAVA 8 이상)

Map<String, String> testMap = getTestMap();  // 어딘가에서 가져온 map
if(testMap == null) testMap = Collections.emptyMap();
String testStr = testMap.getOrDefault("test", "");  // null이면 ""

 

 

반응형

'Java' 카테고리의 다른 글

java rmi sample (간단한 예제)  (0) 2024.04.29
룬 알고리즘 체크용 java 소스  (0) 2023.09.05
java Object deep clone 비교  (0) 2022.06.29
tomcat localhost ssl 적용을 위한 키 생성  (0) 2021.02.05
RSA 암호화 java 구현 class  (0) 2018.02.23
Posted by seongsland