null을 리턴한다는 것은 리턴 타입이 객체라는 의미이다. null은 객체가 아니다. null과 객체는 같지 않으므로 객체로 취급하면 에러가 발생한다. 그렇기 때문에 null은 "예외적인 처리"를 해 주어야 한다. 결국 null을 리턴할 수 있다는 것은 받는 쪽에서는 null인지 아닌지를 체크해야 한다는 것이다. 이것은 전형적인 상태의 모습이다.
자 취급하기 좋은 예를 들어 보자. 우리는 종종 List에서 특정 조건에 맞는 객체를 꺼내오고 싶을 때가 있다. 그래서 다음과 같이 프로그래밍을 한다.
List<Person> persons = new ArrayList<Person>();
public List<Person> getByName(String name){
if(persons.size() == 0) return null;
List<Person> result = new ArrayList<Person>();
for(Person each : persons){
if(each.getName().equals(name)) result.add(each);
}
return result;
}
여기서 눈여겨 볼 부분은 if(persons.size() == 0) return null 이다. 이 코드는 원하는 객체가 없을 경우 List 객체를 만들지 않고 바로 리턴하는 코드이다. 어떤 사람들은 최대한 연산량을 줄이고 List 객체를 새로 생성하는 것을 방지한다는 면에서 좋다고 생각할지도 모른다. 하지만 이 코드는 코드 자체로도 그다지 큰 효과를 내지 않을 뿐더러 null을 리턴함으로써 메소드를 사용하는 입장에서 null을 한번 더 체크하게 만든다는 문제가 있다. 만약 새로운 객체를 생성하지 않는 것이 그렇게 중요하다면 다음과 같이 하면 된다.
if(persons.size() == 0) return Collections.emptyList();
이미 Java에서는 위와 같이 빈 List를 가지고 있다. 저렇게 리턴하면 메소드를 사용하는 입장에서는 null 체크를 따로 하지 않아도 된다.
'8.무상태 프로그래밍' 카테고리의 다른 글
6. 무상태 프로그래밍 : 상태 매개 변수 (0) | 2016.08.27 |
---|---|
5. 무상태 프로그래밍 : 상태 확인 메소드 (0) | 2016.08.27 |
3. 무상태 프로그래밍 : 객체의 세계 외부와의 소통 (0) | 2016.08.27 |
2. 무상태 프로그래밍 : 상태 발생의 원인 (1) | 2016.08.27 |
1. 무상태 프로그래밍 개요 (1) | 2016.08.26 |