-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
74 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: | ||
## 결론 | ||
|
||
* 엉켜있는 것을 풀어 각 함수가 하나의 일만 하도록 하면, 개념을 중심으로 쉽게 구성할 수 있음 |