From 88fc069df387bc6e710b2fff94696793881aca42 Mon Sep 17 00:00:00 2001 From: hyesungoh Date: Sat, 20 Apr 2024 12:02:22 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B1=95=ED=84=B0=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\230\244\355\230\234\354\204\261.md" | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 "\354\261\225\355\204\260_5/\354\230\244\355\230\234\354\204\261.md" diff --git "a/\354\261\225\355\204\260_5/\354\230\244\355\230\234\354\204\261.md" "b/\354\261\225\355\204\260_5/\354\230\244\355\230\234\354\204\261.md" new file mode 100644 index 0000000..99325ad --- /dev/null +++ "b/\354\261\225\355\204\260_5/\354\230\244\355\230\234\354\204\261.md" @@ -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: + +## 결론 + +* 엉켜있는 것을 풀어 각 함수가 하나의 일만 하도록 하면, 개념을 중심으로 쉽게 구성할 수 있음