π©νμ μλΉμ€
package inflearn.spring.service;
import inflearn.spring.domain.Member;
import inflearn.spring.repository.MemeberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemeberRepository memeberRepository;
public MemberService(MemeberRepository memeberRepository) {
this.memeberRepository = memeberRepository;
}
/* νμ κ°μ
*/
public Long join(Member member){
validateDuplicateMember(member); //μ€λ³΅ νμ κ²μ¦
memeberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memeberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
});
}
/* μ 체 νμ μ‘°ν */
public List<Member> findMember(){
return memeberRepository.findAll();
}
/* νμ μ‘°ν */
public Optional<Member> findOne(Long memberId){
return memeberRepository.findById(memberId);
}
}
ππμ€λ³΅κ²μ¦
0. κΈ°μ‘΄
Optional<Member> result = memeberRepository.findByName(member.getName());
result.ifPresent(m -> {
throw new IllegalStateException("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
});
1. λ³μ μμ΄ λ°λ‘ μ€νΈλ¦ΌμΌλ‘ μ½λ μμ
memeberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
});
2. λ©μλ μΆμΆ (Ctrl + Alt + M)
public Long join(Member member){
validateDuplicateMember(member); //μ€λ³΅ νμ κ²μ¦
memeberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memeberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
});
}
ππServiceμ memeberRepository λ©μλ λͺ λͺ
- Service : λΉμ§λμ€ λ‘μ§κ³Ό κ°μ λ©μλ μ΄λ¦ ex) Join
- memeberRepository : κΈ°κ³μ μΌλ‘ ex) save
π©ν μ€νΈμΌμ΄μ€
ν μ€νΈλ μ§κ΄μ μΌλ‘ μμλ³Ό μ μλλ‘ νκΈλ‘λ μ μ΄λ λλ€.
ππμ€λ³΅ νμ μμΈ
- try ~ catch문
@Test
public void μ€λ³΅_νμ_μμΈ(){
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//when
try {
memberService.join(member2);
fail();
} catch (IllegalStateException e){
assertThat(e.getMessage()).isEqualTo("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
}
//then
}
- assertThrows() : memberService.join(member2)λ₯Ό μ€νμμΌ°μ λ IllegalStateException μμΈκ° λ°μνλμ§ νμΈgetMessage()λ‘ μλ¬ λ©μμ§ νμΈλ κ°λ₯
@Test
public void μ€λ³΅_νμ_μμΈ(){
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
//then
}
ππDI
- κΈ°μ‘΄μλ νμ μλΉμ€κ° λ©λͺ¨λ¦¬ νμ 리ν¬μ§ν 리λ₯Ό μ§μ μμ±
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
}
- νμ 리ν¬μ§ν 리μ μ½λκ° νμ μλΉμ€ μ½λλ₯Ό DI κ°λ₯νκ² λ³κ²½
> κ°μ 리ν¬μ§ν λ¦¬λ‘ ν μ€νΈλ₯Ό ν΄μΌνλλ° κ°κ° κ°μ²΄ μμ±νλ―λ‘ λ€μκ³Ό κ°μ΄ μμ νμ
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
//...
}
@BeforeEach : κ° ν μ€νΈ μ€ν μ μ νΈμΆ. ν μ€νΈκ° μλ‘ μν₯μ΄ μλλ‘ νμ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ³ , μμ‘΄κ΄κ³λ μλ‘ λ§Ίμ΄μ€λ€.
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
//DI
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
//...
}
ππ μΈν 리μ μ΄ κΏν : Shift + F10 μ΄μ μ€ν
μΆμ² : μ€νλ§ μ λ¬Έ - μ½λλ‘ λ°°μ°λ μ€νλ§ λΆνΈ, μΉ MVC, DB μ κ·Ό κΈ°μ