구분선은 자르고 싶은 곳 아무데나 붙이고 큰 의미 없음
데이터: 회원 ID, 이름
기능: 회원 등록, 조회
아직 데이터 저장소가 선정되지 않았다는 시나리오

아래 코드들은 제가 따라 쓰고 캡쳐해서 필기한 것입니다 ...

공부할 것


option + enter -> Add on-demand static import for (org. ...) 하면 Assertions 앞에 있는 구구절절이들이 import 된다. 이러고 나면 그냥 assertThat. ...로 쓸 수 있게 됨.

Assertion

Assert: 표명하다, 역설하다...
아무튼 뭔가 "강하게 말한다"는 의미가 있음.
Assertion은 프로그래머가 반드시 참 또는 거짓일 것이라고 가정하는 논리식이다. 해당 문장이 그 장소에서 항상 참 또는 거짓이라고 간주한다. 런타임 중에 이 논리식이 의도한 것과 다른 값 (참 -> 거짓/거짓 -> 참)으로 밝혀지면 assertion failure가 발생하고 일반적으로 실행이 중단된다. (참고)
TDD
test를 먼저 작성하고 (먼저 구성하고) 코드를 설계하는 방식을 TDD라고 한다.
test-driven development
package hello_spring.hello.service;
import hello_spring.hello.domain.Member;
import hello_spring.hello.repository.MemberRepository;
import hello_spring.hello.repository.MemoryMemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
public Long join(Member member) {
// 회원 가입
// 같은 이름이 있는 회원은 안 됨
validateDupliacateMember(member);
memberRepository.save(member);
return member.getId();
}
private void validateDupliacateMember(Member member) {
memberRepository.findByName(member.getName()).ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
} );
}
public List<Member> findMembers() {
// 전체 회원 조회
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
extract method
코드를 쓰는데 기능이 많고 로직이 길어지면 method로 추출할 수 있다.
Ctrl + Alt + M
memberRepository.findByName(member.getName()).ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
테스트 코드를 직접 적지 않아도 테스트를 할 수 있다.

![]() | ![]() |
|---|
package hello_spring.hello.service;
import hello_spring.hello.domain.Member;
import hello_spring.hello.repository.MemberRepository;
import hello_spring.hello.repository.MemoryMemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
public Long join(Member member) {
// 회원 가입
// 같은 이름이 있는 회원은 안 됨
validateDupliacateMember(member);
memberRepository.save(member);
return member.getId();
}
private void validateDupliacateMember(Member member) {
memberRepository.findByName(member.getName()).ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
} );
}
public List<Member> findMembers() {
// 전체 회원 조회
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}