인프런 커뮤니티 질문&답변

relate16님의 프로필 이미지
relate16

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

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

해결된 질문

작성

·

302

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

안녕하세요. 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
질문자

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

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

정말 감사합니다 ! 

relate16님의 프로필 이미지
relate16

작성한 질문수

질문하기