Skip to content

Commit

Permalink
챕터 5 (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyesungoh authored May 8, 2024
1 parent b445850 commit acd4888
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions 챕터_5/오혜성.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# 더 좋은 액션 만들기

## 요구 사항에 맞춰 더 나은 추상화 단계 선택하기

* 액션에서 계산으로 리팩터링하는 과정은 단순하고 기계적일 수 있음
+ 기계적인 리팩터링이 항상 최선의 구조를 만들어 주는 것은 아님
+ 좋은 구조를 만들기 위해서는 어느 정도 사람의 손길이 필요

* 요구 사항과 함수의 시그니처를 맞추어 추상화 단계를 선택할 수 있음

* 함수를 부를 때마다 배열을 복사하는데, 비용이 너무 많이 들지는 않나?
+ 그렇기도 하지만, 그렇지 않기도 하다
- 배열을 바꾸는 것보다는 비용이 더 드나, 언어의 런타임과 가비지 컬렉터는 불필요 메모리를 효율적으로 관리함
- 복사본을 사용할 때 잃는 것보다 얻는 것이 더 많음

> 약 2년전에 정리한 내용이긴 한데 ..
> V8 동작은 크게 변하지 않았을 거 같아서 공유 드립니다..
> https://www.hyesungoh.xyz/how-to-collect-garbage-in-js
## 암묵적 입력과 출력은 적을수록 좋다

> 책에서는 과한 코드는 분리된 함수에서 한 함수로 넣기도 하는데, 어차피 액션이라 그런가?
## 계산 분류하기

* 어떤 함수가 엔티티와 비즈니스 규칙에 대해 알아야 하는지를 기준으로 분류할 수 있음
+ ex. cart, item, 비즈니스 규칙

* 계층은 엉켜있는 코드를 풀면 자연스럽게 만들어짐

## 설계는 엉켜있는 코드를 푸는 것이다

* 크고 복잡한 것이 더 잘 만들어진 것 같다고 느낄 수 있지만,

분리된 것은 언제든 쉽게 조합할 수 있다. 오히려 잘 분리하는 방법을 찾기 더 어렵다.

* 분리된 것은
+ 재사용하기 쉽고
- 하는 일이 적고 가정을 하지 않아도 되기 때문에
+ 유지보수하기 쉽고
- 쉽게 이해할 수 있기 때문에
+ 테스트하기 쉽다
- 한 가지 일만 하기 때문에, 한 가지만 테스트하면 된다

## 카피-온-라이트 패턴을 빼내기

* 재사용에 용의한 유틸리티 함수를 만들어 사용할 수 있음

```ts
// before
function add_item(cart, item) {
const new_cart = cart.slice();
new_cart.push(item);
return new_cart;
}

// after
function add_element_last(array, elem) {
const new_array = array.slice();
new_array.push(elem);
return new_array;
}

function add_item(cart, item) {
return add_element_last(cart, item);
}
```

> 이런 유틸 함수? 좋다 이거야...
> 근데 이런 함수를 만들어서 어디에 두며, 같이 일하는 사람들이 어떻게 쉽게 인지하고 사용할 수 있게 할 수 있을까나요 ... :thinking_face:
## 결론

* 엉켜있는 것을 풀어 각 함수가 하나의 일만 하도록 하면, 개념을 중심으로 쉽게 구성할 수 있음

0 comments on commit acd4888

Please sign in to comment.