컨트롤러 : 웹 MVC의 컨트롤러 역할
서비스 : 핵심 비즈니스 로직 구현
리포지토리 : 데이터베이스 접근, 도메인 객체를 DB에 저장하고 관리
도메인 : 비즈니스 도메인 객체... ex) 회원, 주문, 쿠폰 등등.. 주로 DB에서 저장, 관리
Optional<generic> : 해당 타입의 객체를 포장해주는 래퍼 클래스. 조건문 업이 null값을 예외처리가능 .
java8에서 도입되었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Optional;
public class MemoryMemberRepositoryTest {
memoryMemberRepository repository = new memoryMemberRepository();
@AfterEach // 메서드가 실행이 끝날때마다 이걸 실행.. 콜백메서드 라고 보면 된다.
public void afterEach() {
repository.clearStore();
}
// @Test는 순서 보장이 안된다. 따라서 모든 테스트 메서드는 순서 의존성을 없애야 한다.
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
//Assertions.assertEquals(result, member);
org.assertj.core.api.Assertions.assertThat(member).isEqualTo(result);
//ㄴ assertThat 에서 member가 result랑 같으냐? 라는 뜻으로 검증한다.
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member(); // shift+f6 : 같은 변수명 일괄 수정
member2.setName("spring1");
repository.save(member2);
Member result = repository.findByName("spring1").get();
Assertions.assertThat(result).isEqualTo(member1);
}
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring1");
repository.save(member2);
List<Member> result = repository.findAll();
Assertions.assertThat(result.size()).isEqualTo(2);
}
}
|
cs |
@Test는 순서 보장이 안된다. 따라서 모든 테스트 메서드는 순서 의존성을 없애야 한다.
TDD (Test-Driven Development) : 테스트 주도 개발... 테스트 틀을 먼저 만들고 나중에 메인메서드에 넣는다.
DI (Dependency Injection) : 외부에서 의존 객체를 생성하여 넘겨주는 의존성 주입. IoC 컨테이너에서 객체를 생성한 후 생성된 객체를 다른 객체에 주입한다. IoC 컨테이너에서 생성된 객체들을 한번에 관리 할 수 있는 장점이 있음.
'Back-end > Spring' 카테고리의 다른 글
Spring 웹 개발 방식 3가지 (0) | 2021.03.13 |
---|---|
spring boot 프로젝트 생성 (0) | 2021.03.12 |
프로젝트 생성 (0) | 2021.03.11 |