diff --git "a/\354\261\225\355\204\260_5/\354\235\264\354\234\240\355\235\254.md" "b/\354\261\225\355\204\260_5/\354\235\264\354\234\240\355\235\254.md" new file mode 100644 index 0000000..b22b70f --- /dev/null +++ "b/\354\261\225\355\204\260_5/\354\235\264\354\234\240\355\235\254.md" @@ -0,0 +1,61 @@ + + +### 챕터 5. 더 좋은 액션 만들기 + + +#### 암묵적 입력과 출력 줄이기 + +- 어떤 함수에 암묵적 입려과 출력이 있다면 다른 컴포넌트와 강하게 연결된 컴포넌트다 +- 다른 곳에서 사용할 수 없으면 모듈이 아니다 +- 암묵적 입출력이 있는 함수는 아무 때나 실행할 수 없기에 테스트하기 어렵다 +- 액션을 계산으로 바꾸지 못하더라고 암묵적 입출력을 줄이면 테스트하기 쉽고 재사용하기 좋다 + + +#### 계산 분류하기 + +- 어떤 도메인 구조를 알아야 하는 경우 +- 비즈니스 규칙에 대한 함수 + +이렇게 구분하다보면 코드에서 의미있는 계층이 되기 때문에 기억해두면 좋다 +계층은 엉켜있는 코드를 풀면 자연스럽게 만들어진다. + +> 넥스트스텝 TDD 강의에서 포비님이 단위테스트를 작성하고 지우다 반복하다보면 리프 노드를 발견할 수 있고 그 지점이 단위테스트 시작점이 된다고 알려주셨다. 여기서 말하는 엉켜있는 코드를 푸는 방법과 같은 맥락인듯? + + +#### 엉켜있는 코드 풀기 + +- 함수를 사용하면 관심사를 분리할 수 있다 +- 함수는 인자로 넘기는 값과 그 값을 사용하는 방법을 분리한다 +- 분리된 것은 언제든 쉽게 조합할 수 있다 +- ***엉켜있는 것을 풀면 개념을 중심으로 쉽게 구성할 수 있다*** + +분리의 장점 +- 재사용하기 쉽다 +- 유지보수하기 쉽다 +- 테스트하기 쉽다 + + + +``` +function add_item(cart, name, price){ + var new_cart = cart.slice(); + new_cart.push({ + name: name, + price: price + }); + return new_cart; +} +``` +- 문제점 + - add_item()이 cart, item 구조를 모두 알고 있다 +- 개선 + - add_item() 을 cart, item을 각각 다루는 함수로 분리한다 + + +#### 비즈니스 규칙과 장바구니 기능 차이 + +- 일반적인 도메인과 핵심 도메인의 차이 + - 일반적인 장바구니 기능이 아닌 MegaMart의 장바구니에서 운영하는 특별한 규칙 +- 비즈니스 규칙에서 장바구니가 배열인지 알아야 한다면 문제가 된다. + +> 도메인 계층에서 일급 콜렉션을 자주 사용하는데 자료구조에 의존하는 일급콜렉션은 뭐지?!?! \ No newline at end of file