λ°˜μ‘ν˜•

πŸ‘©νšŒμ› μ„œλΉ„μŠ€

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 μ ‘κ·Ό 기술

λ°˜μ‘ν˜•