<aside>
1️⃣
TDD
</aside>
- 프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론이다.
- 즉, 테스트를 먼저 작성하고 기능을 만드는것이다.
- TDD의 기본과정 (Red, Green, Refactor)
- Red: 실패하는 코드를 작성하는 것이다.(기능구현이 안되었으니 당연히 처음에는 빨간불이다.)
- Green: 빠른 시간내에 테스트를 통과하도록 최소한의 코딩으로 기능을 구현(구현이 엉터리여도 된다.)
- Refactor : 구현 코드를 개선한다. 이때 테스트의 통과는 유지해야 한다.
<aside>
2️⃣ Red, Green, Refactor방식의 tdd구현방법
</aside>
- 지금부터 tdd방식의 one cycle을 보여주겠다.
- Red 구현
- 1단계 빨간불을 볼 수 있도록(테스트가 실패하도록) 코드를 작성한다.

- 일단 컴파일 에러는 통과해야하니 calculateTotalPrice()라는 메서드를 서비스 레이어 안에 만들어놓기만 한다. 내부 로직은 세팅이 안되어있다.

- Green 구현
- 2단계로 일단은 테스트가 가장 빠르게 통과하도록 만든다. 여기선 return에 8500을 하드코딩했다.

- 이제 테스트를 돌려보면 통과할 것이다. (초록불(green)이 나온다.)

- Refactor 구현
- 이제 로직 내부를 직접 구현한다. 이때 테스트는 계속 통과시키면서 로직을 구현해야 한다.

- 테스트 결과 로직을 다 넣었을때 통과했다.
- 이러면 이게 tdd방식으로 코드를 작성해낸 단편적인 예시이다.(좀 극단적이긴 하다.)

- 한사이클을 돈 후부터는 계속 refactoring을 하는것이다.
- 아래의 코드처럼 스트림으로 코드를 리펙토링시켰다.
