generated from muhandojeon/study-template
-
Notifications
You must be signed in to change notification settings - Fork 0
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
[우창완] 챕터 7: 자바스크립트 디자인 패턴 (3/3) #67
The head ref may contain hidden characters: "7-3/\uC6B0\uCC3D\uC644"
Merged
Changes from 2 commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 |
---|---|---|
|
@@ -292,3 +292,81 @@ const milkCoffee = new MilkDecorator(coffee); | |
### 7.14 의사 클래스 데코레이터 | ||
|
||
`Interface.ensureImplements`까지 하는 것은 투머치.. 타입스크립트를 사용하자 | ||
|
||
### 7.16 플라이웨이트 패턴 | ||
|
||
플라이웨이트 패턴은 반복되고 비효율적으로 데이터를 공유하는 코드를 최적화하는 구조적 해결 방법 | ||
|
||
OOP + Data Oriented Programming 과 비슷한 느낌, 데이터 응집성에 포커스를 맞춘다. | ||
|
||
`checkoutMember`, `dueReturnDate` 는 Book 의 속성? -> 아니다. | ||
|
||
OOP 의 메모리 과도한 점유를 `상태`와 `데이터`의 결합도를 낮춘 형태. 결국 중요한 것은 응집도 | ||
|
||
### 7.17 행위 패턴 | ||
|
||
행위패턴이란 `객체간의 의사소통` | ||
|
||
- 관찰자 패턴 | ||
- 중재자 패턴 | ||
- 커맨드 패턴 | ||
|
||
### 7.18 관찰자 패턴 | ||
|
||
관찰자 패턴은 update를 기반으로 상태를 관리 (Subject, Observer) | ||
|
||
주체를 업데이트 할때, 데이터 변경을 감지할 때 `update`를 기반으로 동작한다. | ||
|
||
Subject: Observer: 1: N, (N:M이 될수도 있음) | ||
|
||
> Subject.action -> Subject.nofity(Observer.update()) 형태로 Observer에게 Subject의 상태 변경을 알린다. | ||
|
||
``` | ||
Subject: 데이터의 주체 | ||
|
||
action: notify() 를 호출한다. | ||
addObserver, removeObserver: Observer => void | ||
notify: data => void // Observer.update() 자신을 구독하고 있는 Observer에게 상태변화를 알림. | ||
|
||
|
||
Observer: Subject의 관찰자. | ||
update: () => T // 상태변화에 따른 특정 액션 | ||
``` | ||
|
||
### 7.18.1 관찰자 패턴과 발행/구독 패턴의 차이점 | ||
|
||
Pub/sub 패턴과의 차이는 변경 전파 책임 | ||
|
||
관찰자 패턴의 변경 감지 전파의 책임은 Subject에게 있다. | ||
|
||
시그니처를 보았을 때는 Pub/sub 더 유연해보이고, 상태 변화/감지의 책임이 더 잘 나누어진 것으로 보였음 | ||
|
||
하지만, 대부분의 경우는 Subject -> Observer로 바로 상태변화를 알리는 것이 명료해보이지만, 응집도는 많이 떨어짐 | ||
|
||
아래 사고를 거쳐서 계층의 필요타당성을 생각해보기 | ||
|
||
- 두 객체간의 결합도를 낮추는 것이 꼭 필요할 때 (분리가 필요한 계층, 계층적으로 달라야 필요성이 있을 듯) | ||
- 발행/구독 계층이 어떤 문제를 해결해주는가? | ||
|
||
예시 중, 사용자와 리뷰의 관계가 결합도를 낮춰야할만큼의 다른 계층인가? -> 아니라고 생각함, 오히려 응집도가 낮아짐(161p) | ||
|
||
EventEmitter 도 떠오르는데, 어떤 Event가 emit되면 특정 함수를 호출하는 형태도 pub/sub의 일부와 비슷해보인다. | ||
|
||
RxJS 처음 본 인상은 Effect(state) => ui 형태로 사이드이펙트를 잘 제어할 수 있으면, 유지보수하기 좋은 형태를 만들 수 있을 것 같지만, | ||
|
||
사이드이펙트 관리에 대한 이해가 부족하면 오히려 독이 있을 것 같다 (debugging, 참조 투명성, descriptive name의 부재 등) | ||
|
||
### 7.19 중재자 패턴 | ||
|
||
중재자 패턴은 하나의 객체가 이벤트 발생 시, 다른 여러 객체들에게 알림을 보낼 수 있는 디자인 패턴 -> 관찰자 패턴가 뭐가 다르지? | ||
|
||
### 7.20 커맨드 패턴 | ||
|
||
명령을 trigger하는 객체와 명령을 execute 하는 객체가 분리되어 있는 패턴 | ||
|
||
책의 예시는 실질적으로 결합도를 낮추지 못한다. 불필요한 추상화 | ||
|
||
-> `buyVehicle` 이 `buyCar` 로 변경되면 execute('buyCar')도 함께 변경되어야 한다. | ||
|
||
결합도 관련해서 재밌게 읽은 글 남깁니다! | ||
https://maxkim-j.github.io/posts/coupling | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 좋은 아티클 공유 감삼다 👍🏻 |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
생각지도 못했던 포인트를 캐치하셨네요 👍🏻 예시가 적절하지 않았던거 같아요