비즈니스 요구사항 정리
데이터: 회원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로 접근이 가능하다.
도메인, 레포지토리 구현
domain and repository · Lemon-soju/springboot-newbie-project@9fe1604
Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files domain and repository Loading branch information Showing 3 changed files with 71 additions and 0 deletions. +23 −0 sr
github.com
Repositoory 테스트 코드
repository test · Lemon-soju/springboot-newbie-project@b257f6d
Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files repository test Loading branch information Showing 2 changed files with 60 additions and 0 deletions. +4 −0 src/main/
github.com
{
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);
}
}
회원 서비스 개발
Merge pull request #11 from Lemon-soju/slave-01 · Lemon-soju/springboot-newbie-project@a4b7086
user service
github.com
회원 서비스 테스트 -> 자바 람다식과 Dependency Injection, Given When Then 개념을 사용
Merge pull request #12 from Lemon-soju/slave-01 · Lemon-soju/springboot-newbie-project@f504a13
user service test
github.com
'웹 개발 > 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 |
댓글