여기서 companyNamemap에 들어 있지 않거나 manager가 없거나 manager는 있지만 그 안에 address가 없거나 city가 없을 수 있다. if ... else 구조를 내포하면서 사용하면 널 안전성을 확보할 수도 있지만 코틀린 구문이 훨씬 더 편리하다. 같은 일을 하는 자바 코드와 비교해도 코틀린 코드가 더 간결하다.

    City city = Optional.ofNullable(map.get(companyName))
                        .flatMap(Company::getManager) 
                        .flatMap(Employee::getAddress)
                        .flatMap(Address::getCity)
                        .getOrElse(null);

    앞에서 말한 것처럼 코틀린은 NPE에 대한 모든 책임을 프로그래머가 지게 한다.

    val city: City? = map[companyName]!!.manager!!.address!!.city

    이 구문을 사용할 때 중간에 null이 있으면(city는 제외) NPE가 발생한다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.