Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[오혜성] 챕터 5: 더 좋은 액션 만들기 #20

Merged
merged 1 commit into from
May 8, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

와우.. 엄청 자세하게 정리해두셨네요 👍


## 암묵적 입력과 출력은 적을수록 좋다

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앞장인지는 모르겠지만 서브루틴 추출하기 라는 개념으로 계속 분리 하더라고요.. 분리해서 계산으로 만들고 액션을 최대한 줄이는게 포인트지 않을까... 라는 개인적인 생각입니다.


## 계산 분류하기

* 어떤 함수가 엔티티와 비즈니스 규칙에 대해 알아야 하는지를 기준으로 분류할 수 있음
+ 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:

Comment on lines +68 to +71
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

재사용도 고려한 유틸 함수는 저도 감이 잘 안오네요!
객체지향에서는 일급컬렉션에 적용하기 좋겠다 생각했습니다

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

개인적으로는 과한 분리가 아닐까 라는 생각도 많이 들었어요 ㅋㅋㅋㅋ 재사용이 많지 않은 이상 굳이 저런 함수를 따로 만들어야 하나? 라는 생각이 많이 들었습니다.

## 결론

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