SSAFY-Book-Study / modern-java-in-action

모던 자바 인 액션 북스터디입니다.
1 stars 10 forks source link

2 Weeks - [Optional을 사용하는 이유] #27

Open barded1998 opened 1 year ago

barded1998 commented 1 year ago

문제

Optional을 사용하는 이유에 대해서 궁금합니다.

contents - 세부 내용

프로젝트를 진행하는경우 Optional을 활용하여 예외발생 혹은 디폴트 값 설정들을 하지만 이런 이유들을 제외하고는 정확한 이해없이 Optional사용하므로 추후 Optional에 대해 자세히 나오기전에 한번더 생각하고 넘어가고 싶었습니다. Optional은 왜 쓰는것이고 언제 어떻게 사용해야 좋은 패턴일까요?

참고

Hot-ttu commented 1 year ago

Optional is primarily intended for use as a method return type where there is a clear need to represent "no result," and where using null is likely to cause errors. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.

출처 : https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html

위 내용은 공식 api 문서에 작성되어 있는 Optional을 만든 목적입니다.

“결과 없음”이라는 명백한 표현이 필요하고, null을 사용하면 에러가 예상되는 상황에서 메소드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 목적이라고 합니다.

예시 코드

public String findPostCode() {
    UserV0 userV0 = getUser();
    if (userV0 != null) {
        Address address = user.getAddress();
        if (address != null) {
            String postCode = address.getPostCode();
            if (postCode != null) {
                return postCode;
            }
        }
    }
    return "우편 번호 없음";
}

Optional을 사용하면 이런 null 검사때문에 복잡한 코드를 아래와 같이 표현 가능하다.

public String findPostCode() {
    Optional<UserV0> userV0 = Optional.ofNullable(getUser());
    Optional<Address> address = userV0.map(UserV0::getAddress);
    Optional<String> postCode = address.map(Address::getPostCode);
    String result = postCode.orElse("우편번호 없음");
}

< 올바른 Optional 사용법 가이드>

더 자세한 Optional을 잘 사용하는 방법은 잘 정리된 블로그가 있어서 링크 남깁니다. https://dev-coco.tistory.com/178 https://mangkyu.tistory.com/203