해결된 질문
작성
·
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);
}
감사합니다.
주말에 답변해주시다니 ㅠㅠ
답변해주신 것을 토대로 이것저것 더 찾아볼 수 있었습니다 :]
정말 감사합니다 !