Skip to content

Commit

Permalink
[이상조] 5장: �구부러지거나 부러지거나 (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
sjoleee authored Sep 8, 2024
1 parent bd1e0ff commit e00d87e
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions 5장/이상조.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# 구부러지거나 부러지거나

## 결합도 줄이기

느슨한 결합이 좋은 이유는 결국 특정 모듈만 손볼 수 있게 만든다는 것. 영향 범위의 최소화

`applyDiscount`는 객체에게서 어떤 데이터를 얻어내기 위해 `applyDiscount`가 해당 객체의 수많은 메서드를 다 알고 있어야 하는 것이 문제라는 얘기를 하고 싶은 것 같음..
영향 범위를 최소화한다면 필요한 것을 반환하는 메서드 `findOrder` 하나만을 알도록 설계한다.
극단적인 TDA로 고객 객체 메서드로 `applyDiscount` 역할을 하는 `applyDiscountToOrder`를 걍 집어넣는 것을 제안하는데
뭐... 자동완성처럼 장점도 있을 것 같고 불필요하게 객체를 참조하는 모든 곳에서 메서드의 존재를 알게 된다는 것은 단점이지 않을까 싶다.

메서드 호출을 엮지 말라는 이야기는 한 메서드가 수정되면 반환값이 수정 전에 사용하던 메서드 체이닝을 유지하지 못할 수도 있고... 그런 것으로 보인다.
그래서 아래에서 파이프라인을 얘기하는 듯. 필요하다면 파이프라인에다 하나를 끼워넣는 방식으로 각 함수간의 결합이 낮게 설계하면 된다는 의미로 보임

## 실세계를 갖고 저글링하기

이벤트에 잘 반응하는 앱이 진짜 세상에서 잘 동작하는 앱이다.

- 유한 상태 기계: 무슨 소리? 명령형 프로그래밍을 말하는 건가...?? 뭔가 스크립트 짜는 것 같은 느낌인데...
- 감시자 패턴: 얼마 전에 옵저버 패턴을 활용한 toast를 만든 적이 있음
(사실 활용했다가 굳이 싶어서 그냥 js 변수를 구독하는 방식으로 변경했음.)
https://patterns-dev-kr.github.io/design-patterns/observer-pattern/
여기 디자인패턴 많음 좋음

```ts
const subscribers = new Set();
const toasts = [];

const notify = () => {
subscribers.forEach(callback => callback());
}

const toast = (message) => {
const id = 뭔가 유니크한 값... date.now?
toasts.push({ id, message });
notify();

setTimeout(() => {
const index = toasts.findIndex(t => t.id === id);
if (index > -1) {
toasts.splice(index, 1);
notify();
}
}, 지속시간);
};

const useToast = () => {
return useSyncExternalStore(
(callback) => {
subscribers.add(callback);
return () => subscribers.delete(callback);
},
() => toasts
);
};

```
- 게시-구독: 이건 구체적으로 뭘 말하는건지 잘 모르겠음
- 반응형 프로그래밍: 지금 회사에서 api콜에 rxjs를 사용중인데, 마치 react-query와 비스무리...
## 변환 프로그래밍
그러니까 함수형 프로그래밍같은걸 말하는건가?
쏙쏙 함수형 탈주하지 말걸...;;
에러 처리 관련해서는 무슨 말인지 잘 모르겠다. js밖에 몰라서 그런가...
긍까 파이프라인을 만들어주는 녀석이 에러를 찾아내서 자동으로 실행을 멈추게 만들라는 이야기로 이해함. 파이프라인 내의 개별 함수가 처리하는 것이 아니라 파이프라인 자체가 처리하게?
## 상속세
이것도 잘 모르겠다. 객체지향을 공부해야 하는걸까?
아니 예시를 좀 js로 만들어라~!

0 comments on commit e00d87e

Please sign in to comment.