비즈니스 요구사항 정리
데이터: 회원ID, 이름
기능: 회원 등록, 조회
아직 데이터 저장소가 선정되지 않음(가상의 시나리오)
일반적인 웹 에플리케이션 계층으로 개발한다.
1. 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계
2. 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정
3. 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용
MemberRepository에는 사용할 함수들을 선언하고 구현은 MemoryMemberRepository을 통해 구현한다. C언어를 비유하면 MemberRepository는 헤더파일이고 MemoryMemberRepository는 함수를 구현한 c 파일이라고 할 수 있겠다.
extends -> 부모에서 선언, 정의를 하면 자식은 해당 메소드, 변수를 그대로 사용할 수 있음 -> 상속의 개념
implements(interface 구현) -> 부모 객체는 선언만 하고 자식에서 Override해서 재정의한다. -> 구현의 개념
public class : 모든 package에서 해당 class로 접근이 가능하다.
private class : 자신을 포함한 package에서만 해당 class로 접근이 가능하다.
protected class : 상속받은 class 에서만 해당 class로 접근이 가능하다.
도메인, 레포지토리 구현
Repositoory 테스트 코드
{
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach() { // 메소드가 끝날 때 마다 실행
repository.clearStore();
}
@Test
public void save() {
//given
Member member = new Member();
member.setName("spring");
//when
repository.save(member);
//then
Member result = repository.findById(member.getId()).get(); // Optional에서 값을 꺼낼 때 get 사용
assertThat(result).isEqualTo(member); // result랑 member가 다르면 실행 시 빨간불
}
@Test
public void findByName() {
//given
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member(); // Shift + F6 -> 한꺼번에 rename 하기
member2.setName("spring2");
repository.save(member2);
//when
Member result = repository.findByName("spring1").get();
//then
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll() {
//given
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
//when
List<Member> result = repository.findAll();
//then
assertThat(result.size()).isEqualTo(2);
}
}
회원 서비스 개발
회원 서비스 테스트 -> 자바 람다식과 Dependency Injection, Given When Then 개념을 사용
'웹 개발 > Back End' 카테고리의 다른 글
스프링 입문 - 웹 MVC 개발 (0) | 2022.01.02 |
---|---|
스프링 입문 - 스프링 빈과 의존관계 (0) | 2022.01.02 |
스프링 입문 - 스프링 웹 개발 기초 (0) | 2021.12.31 |
스프링 입문 - 템플릿 엔진 개념 (0) | 2021.12.31 |
파이썬 Flask와 PostgreSQL를 이용한 쇼핑몰 구현 프로젝트 (0) | 2021.12.15 |
댓글