티스토리 뷰

language/JAVA

Optional<T>

북항 2020. 5. 7. 01:09
donaricano-btn
반응형

NullPointerException은 자바 개발자를 가장 많이 괴롭히는 예외 중 하나입니다. 컴파일 시에는 잠복해 있다가 런타임에 발생하는 NPE는 코드 곳곳에 묻혀있는 지뢰나 다름없습니다. 실제로 NULL 참조를 처음 고안한 영국의 컴퓨터 공학자 Tony Hoare 조차 NULL 참조를 만든 것은 10억불짜리 실수라고 이야기 했을 정도입니다.

 

이전까지 자바 개발자들은 NPE를 피하기 위해 다음과 같은 방어 코드를 만들어야 했습니다.

 

    public City getCity(InputInformation input) {
        if (input.getCity() == null) {
            return City.SEOUL;
        }
        return input.getCity();
    }

 

NPE를 방지하기 위해 분기문을 사용하게 되고 자연히 코드가 길어지고 가독성이 나빠집니다. JAVA8 부터는 자바 개발자들이 NULL 을 대하는 패러다임이 변화하기 시작합니다.

 

JAVA8의 설계자들은 아마도 함수형 언어에서 해답을 찾은 것 같습니다. 스칼라나 하스켈과 같은 소위 함수형 언어들에서는 존재할지 안 할지 모르는 값을 표현하는 별도의 타입을 가지고 있습니다. 자바8에는 존재할지 안할지 모르는 값을 위한 Optional<T> 라는 새로운 클래스를 도입하게 되었습니다.

 

Optional은 존재할 수도 있지만 없을 수도 있는, 다시말해 null 일 수도 있는 객체를 감싸는 일종의 래퍼 클래스라고 볼 수 있습니다. 혹은 원소가 없거나 하나 밖에 없는 Stream으로 생각해도 좋을 것 같습니다. 위의 코드를 Optional 클래스를 이용해서 표현하면 다음과 같습니다.

 

    public City getCity(InputInformation input) {
        return Optional.of(input)
                .map(InputInformation::getCity)
                .orElse(City.SEOUL);
    }
반응형
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함