diff --git "a/5\354\236\245/\354\235\264\354\203\201\354\241\260.md" "b/5\354\236\245/\354\235\264\354\203\201\354\241\260.md" new file mode 100644 index 0000000..cb98442 --- /dev/null +++ "b/5\354\236\245/\354\235\264\354\203\201\354\241\260.md" @@ -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로 만들어라~!