[실용주의 프로그래머] 단지 뷰일 뿐이야 |
-
우리는 전부터 프로그램을 커다란 덩어리 하나로 짜지 말고, “나눠서 정복하기(divide and conquer)” 방법을 써서 여러 모듈로 나누어 짜야 한다고 배웠다.
모듈마다 자기만의 책임이 있다.
사실, “잘 정의된 단 하나의 책임만 가지는 것”이라는 말이야말로 모듈(또는 클래스)에 대한 좋은 정의가 된다.
-
이벤트를 이용하면 어떤 객체의 상태 변화를 이에 관심을 가질 다른 객체들에게 알릴 수 있다.
이벤트를 이렇게 이용하면 객체들 사이의 결합을 최소화할 수 있다.
출판/구독
-
모든 이벤트를 루틴 하나에 몰아넣는 일은 나쁘다.
하나의 루틴이 여러 객체들 사이의 상호작용에 대한 상세한 지식을 지니게 된다.
그리고 결합도도 증가된다.
그외에도 DRY 원칙 어김, 직교성 어김 등의 여러 단점이 있다.
-
객체가 자기가 필요한 이벤트들만 구독해서 받아보고 필요하지 않은 이벤트들은 받아오지 않도록 해야 한다.
-
P2P(Peer to peer) 기반으로 출판/구독 방식이 있고,
중앙 객체가 수신자들의 DB 를 유지하면서 메시지들을 적절하게 전송해주는 소프트웨어 버스(software bus) 방식도 있다.
중요한 이벤트라면 등록을 했든 안했든 모든 수신자에게 전송하는 방식으로 운영할 수도 있다.
모델-뷰-컨트롤러
-
모델에서 뷰를 분리하라.
자바 트리 뷰
GUI 를 넘어서
-
MVC 는 보통 GUI 개발이라는 맥락에서 가르치지만 사실 일반적으로 쓸 수 있는 프로그래밍 기법이다.
뷰는 모델(또는 모델의 일부)을 해석하는 방식이다. 꼭 그래픽과 관련될 필요가 없다.
(그렇게 세월이 흘러도) 여전히 결합 중
-
청취자(listener)와 이벤트 생성자(구독자와 출판자)는 서로에 대한 약간의 지식이 남아있다.
예를 들어 자바에서는 두 쪽이 공통의 인터페이스 정의와 호출 방식에 대해 동의하고 있어야 한다.
'프로그래밍 놀이터 > Tips' 카테고리의 다른 글
[실용주의 프로그래머] 우연에 맡기는 프로그래밍 (0) | 2018.11.03 |
---|---|
[실용주의 프로그래머] 칠판 (0) | 2018.11.02 |
[실용주의 프로그래머] 시간적 결합 (0) | 2018.10.31 |
[실용주의 프로그래머] 메타 프로그래밍 (0) | 2018.10.30 |
[실용주의 프로그래머] 결합도 줄이기와 디미터 법칙 (0) | 2018.10.29 |
댓글