메서드- 규칙 43 null 대신 빈 배열이나 컬렉션을 반환하라.
JAVA/Effective Java

메서드- 규칙 43 null 대신 빈 배열이나 컬렉션을 반환하라.

반응형

다음과 같은 상황을 보자.

getData()를 통해 Babo 클래스를 담고 있는 List를 반환받고 그 반환된 List를 통해서 어떤 행위를 Main 메서드에서 실행한다고 가정해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package effective42;
 
import java.util.List;
 
public class Main {
    public static void main(String args[]) {
        System.out.println(getData().contains(new Babo()));
    }
    
    public static List<Babo> getData() {
        return null;
    }
    
    static class Babo {
        int a;
        
        int getA() {
            return a;
        }
    }
}
cs




이때 만약 getData()메서드에서 null값이 반환되었을 때, 다음과 같이 오류가 발생할 수 있는것을 확인할 수 있다.




이를 해결하기 위해서는 애초에 getData() 메서드에서 반환할 List값이 없더라도 빈 Collection 객체를 반환해주는 것이 좋다.



1
2
3
public static List<Babo> getData() {
    return Collections.emptyList();
}
cs



그러면 다음과 같이 null point 에러를 방지할 수있다.





하지만 이에 대해서 컬렉션 할당에 대한 비용을 피할 수 있으니 null을 반환해야 바람직하다는 주장이 있다.

하지만 이에 대해서 다음과 같이 반박한다.
1. 프로파일링 결과로 해당 메서드가 성능 저하의 주범이라고 밝혀지지 않았다.
2. 불변하게 생성된 Collection은 변경이 불가능하기 때문에 어디에서나 재사용 가능해서 큰 문제가 없다.

요약하면, null 대신 빈 배열이나 빈 컬렉션을 반환하는 것이 훨씬 더 안전한 코딩방식이다.
빈 컬렉션이나 빈 배열을 반환한다고 해서 걱정하는 리소스 문제는 없다.


출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙43인용.

반응형