optional 객체에서 값을 꺼낼 땐 get() 메서드를 사용할 수 있다.
ex)
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
//optional 객체에서 꺼낼때 get() 사용
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
Optinal 객체의 값이 있다면(값이 null이 아니라면) 지정한 문장을 실행한다.
public Long join(Member member){
//같은 이름이 있는 중복 회원X
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m -> {//ifPresent는 optional 의 메서드
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
return member.getId();
}
아래와 같이 간결하게 만들 수 있다.
public Long join(Member member){
//같은 이름이 있는 중복 회원X
memberRepository.findByName(member.getName())
.ifPresent(m -> {//ifPresent는 optional 의 메서드
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
return member.getId();
}
두 값이 동일한지 비교한다. 같으면 정상 동작하지만 다르면 에러를 발생시킨다.
ex)
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
//result가 member와 같은지 검사. 다르면 오류 발생시킴
assertThat(member).isEqualTo(result);
}