<λͺ©μ°¨>
01. λΉμ¦λμ€ μꡬμ¬ν μ 리
02. νμ λλ©μΈκ³Ό λ ν¬μ§ν 리 λ§λ€κΈ°
03. νμ λ ν¬μ§ν 리 ν
μ€νΈ μΌμ΄μ€ μμ±
04. νμ μλΉμ€ κ°λ°
05. νμ μλΉμ€ ν μ€νΈ
μ΄μ ν¬μ€ν μμ λ ν¬μ§ν 리 ν μ€νΈ μΌμ΄μ€ μμ±κΉμ§ μ§ννλ€. μ΄λ² ν¬μ€ν μμλ 4, 5λ²μ μμ보λλ‘ νλ€.
04. νμ μλΉμ€ κ°λ°
μλΉμ€λ λλ©μΈκ³Ό λ ν¬μ§ν 리λ₯Ό νμ©ν΄μ μ€μ λΉμ¦λμ€ λ‘μ§μ μμ±νλ λΆλΆμ΄λ€. λλ¬Έμ λ ν¬μ§ν λ¦¬λ³΄λ€ λμ± λΉμ¦λμ€ μμ‘΄μ μΌλ‘ μ€κ³ν΄μΌ νλ€.
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
// νμ κ°μ
public Long join(Member member) {
// μ€λ³΅ νμ κ²μ¦
validateDuplicateMember(member);
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
});
}
// μ 체 νμ μ‘°ν
public List<Member> findMembers() {
return memberRepository.findAll();
}
// idλ‘ νΉμ νμ μ‘°ν
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
μμΈ μΌμ΄μ€ μ²λ¦¬(μ€λ³΅ νμ κ²μ¦ ν μ€νΈ)
μ μμ μΈ μΌμ΄μ€λ μ€μνμ§λ§ μμΈ μΌμ΄μ€μ λν μ²λ¦¬κ° λ μ€μνλ€.
01. Try-catch μ¬μ©
memberService.join(member1);
try {
memberService.join(member2); //λλ²μ§Έ μ‘°μΈμμ μμΈκ° λ°μν΄μΌ
fail(); //μ μμ μΌλ‘ μμΈκ° λ°μνμ§ μμ κ²½μ°μ μ²λ¦¬
} catch (IllegalStateException e) {
//μμΈκ° μ μμ μΌλ‘ λ°μν κ²½μ°
Assertions.assertThat(e.getMessage()).isEqualTo("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
}
02. assertThrow() μ¬μ©
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
Assertions.assertThat(e.getMessage()).isEqualTo("μ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.");
05. νμ μλΉμ€ ν μ€νΈ
μμ μλΉμ€μλ λ¬Έμ μ μ΄ μλ€. Serviceμ ServiceTestμμ κ°κ° λ ν¬μ§ν 리λ₯Ό μμ±νκΈ° λλ¬Έμ μλ‘ λ€λ₯Έ λ κ°μ λ ν¬μ§ν λ¦¬κ° μμ±λλ€λ κ²μ΄λ€. λ¬Όλ‘ μ μ½λμμλ static μμ±μ μ¬μ©νμ§λ§, λ§μ½ static μμ±μ΄ λΉ μ‘λ€λ©΄, ν μ€νΈ μ½λμμ μλ‘ λ€λ₯Έ λκ°μ db μ μ κ·Όνλ λ¬Έμ κ° λ°μνλ€. λν νλμ ν μ€νΈμμ λκ°μ 리ν¬μ§ν 리λ₯Ό μ΄μ©ν μ μλ€.
νμ μλΉμ€ μ½λλ₯Ό DI κ°λ₯νκ² λ³κ²½
newλ‘ μλ‘ μμ±νλ κ²μ΄ μλ, μΈλΆμμ λ£μ΄μ€ μ μλλ‘(Dependency Injection) μμ νμ¬ κ°μ μΈμ€ν΄μ€λ₯Ό μ¬μ©κ°λ₯νλλ‘ ν΄μ£Όμλ€.
/* MemberService.java */
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
...
}
/* MemberServiceTest.java */
MemberService memberService;
MemoryMemberRepository memberRepository;
@BeforeEach
public void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@BeforeEachλ κ° ν
μ€νΈ μ€ν μ μ νΈμΆλμ΄ νμ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ³ , μμ‘΄κ΄κ³λ μλ‘ λ§Ίμ΄μ€λ€
-> ν
μ€νΈλΌλ¦¬μ λ
λ¦½μ± λ³΄μ₯!
- μμ±ν μλΉμ€ ν΄λμ€μ 컀μλ₯Ό λλ‘ ctrl+shift+Tλ₯Ό νλ©΄ ν μ€νΈ ν΄λμ€λ₯Ό λ¨μΆν€λ‘ μμ±ν μ μλ€.
- νλ‘μ νΈκ° λΉλλ λ ν μ€νΈ μ½λλ ν¬ν¨λμ§ μκΈ° λλ¬Έμ λ©μλλͺ μ νκΈλ‘ μ κΈ°λ νλ€.
λκΈ