generated from muhandojeon/study-template
-
Notifications
You must be signed in to change notification settings - Fork 1
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
73 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,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로 만들어라~! |