• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Optional 쓰이는 곳 (확인 질문.)

21.12.26 16:22 작성 조회수 206

0

Optional은 DB테이블 데이터가 null일 때를 대비해,

컨트롤러나 서비스 계층에서 꺼내 쓸 경우 null예외를 피하기 위해 감싸서 사용하는 게 맞나요 ?

엔티티 필드명에 감싸서 사용하는 건 아니죠 ? :[

 

되게 바보같은 생각이었을 수도 있는데

null값이 그대로 들어갈 경우, 업데이트할 때 까다롭다는 강의내용을 들어서 

처음에는 아무생각 없이 null이 들어가는 곳에는 다 Optional.empty로 바꿔 들어가야겠구나 했는데 

엔티티 필드명에 null이 안들어가게

Address는 Optinoal로 감싸야되나 했다가 고민하다가 뒤늦게 내린 결론인데

확실한건가 싶어서 질문합니다 ;;

@Entity
@Getter
@NoArgsConstructor
public class Member {
@Id @GeneratedValue
private Long id;

private String username;
private int password;

@Embedded
private Address address;

public Member(String username, int password) {
this(username, password, null);
}

public Member(String username, int password, Address address) {
this.username = username;
this.password = password;
this.address = address;
}
}

 

 

 

 

답변 1

답변을 작성해보세요.

1

OMG님의 프로필

OMG

2021.12.26

안녕하세요. relate16님, 공식 서포터즈 OMG입니다.

Optional을 쓰는 이유는 말씀하신대로 NPE 발생을 방지하기 위해 사용합니다.

 

public class MemberRepository {

   Member findByName(String name);

}

 

다음과 같은 코드에서 findByName()을 호출하는데, Repository(DB)에 인자로 넘긴 이름(홍길동)의 회원 객체가 없을 경우(NULL)

Member member1 = memberRepository.findByName("홍길동");

member1.getAge(); <<-- NPE 발생

NPE가 발생합니다.4

 

이러한 문제를 해결하기 위해 반환타입을 옵셔널을 적용하여 사용합니다.

 

public class MemberRepository {

  Optional <Member> findByName(String name);

 

}

 

감사합니다.

relate16님의 프로필

relate16

질문자

2021.12.26

주말에 답변해주시다니 ㅠㅠ

답변해주신 것을 토대로 이것저것 더 찾아볼 수 있었습니다 :]

정말 감사합니다 !