5장. 구부러지거나 부러지거나
소제목
- 결합도 줄이기와 디미터 법칙
- 메타프로그래밍
- 시간적 결합
- 단지 뷰일 뿐이야
- 칠판
결합을 중이는 것의 중요성을 이전 장에서도 말하고 이 책의 전반적인 주제라는 생각이 든다. 왜 결합을 줄여아하는지와, 결합을 줄이는 방법에 대해서 이 책에서 알려주고 있다.
26. 결합도 줄이기와 디미터 법칙
결합도가 높은 프로그램은 유지보수하기 굉장히 힘들다. 한 부분을 수정했을 때, 해당 부분만 영향을 받아야하는데, 여러 부분에서 동시에 기존과 다른 동작을 한다면 유지보수 하는 것 보다 프로그램을 다시 만드는 것을 택하게 될 것이다.
디미터 함수 법칙은 프로그램에서 모듈간 결합도를 최소화하려 시도하는 것이다. 디미터 법칙에서 객체가 호출할 수 있는 메서드는 아래와 같다.
- 자신
- 메서드로 넘어온 인자
- 자신이 생성한 객체
- 직접 포함하고 있는 객체
27. 메타프로그래밍
최대한 추상적으로 코드를 작성하고, 세세한 부분은 메타 데이터로 만들어야 한다. 사용자가 최대한 모든 부분을 설정할 수 있게 하는 것이 이후 프로그램의 변동의 유연성을 줄 수 있다. 프로그래머가 사용자의 상태를 정하는 것이 강요되는 중요한 부분이 아니라면, 사용자가 모든 것을 설정할 수 있도록 만드는 것이 좋다.
28. 시간적 결합
동시성에 대한 이야기이다. 모든 절차에는 이전에 어떤 작업이 수행되어야 실행될 수 있는 작업이 있고, 아무때에 실행해도 상관없는 작업이 있다. 시간적 결합을 발견하는 좋은 방법은 다이어그램을 그려보는 것이다. 자신에게 들어오는 화살표가 있다면 해당 작업은 이전 작업이 선행되어야 하는 작업이고, 그렇지 않다면 언제든 실행되어도 문제가 없는 작업이다.
29. 단지 뷰일 뿐이야
MVC 모델은 Model(데이터), View(화면), Controller(제어) 세 부분으로 나눠 프로그램을 작성하는 것이다. 모델의 데이터가 바뀌어도 뷰는 변경될 필요 없이 특정 형식만 갖추고 있다면 화면에 보여줄 것이고, 실시간으로 변하는 것도 가능할 것이다. 컨트롤러가 모델과 뷰 사이의 데이터를 전송하고 처리하는 부분을 담당한다.
자신의 변경 상태를 다른 객체에게 알려야 할 때, 구독과 출판이 좋은 방법이다. 이는 리덕스에서도 사용하고 있는데, 컴포넌트가 리덕스의 특정 상태를 구독하게 되면, 리덕스는 해당 상태의 변화가 생기면 구독을 한 컴포넌트에게 상태 변화를 알리고, 컴포넌트는 해당 변화에 맞는 동작을 수행할 것이다.
30. 칠판
여러 개의 모듈화된 부분을 한 칠판에 올리고 지울 수 있도록 하는 것이 결합을 줄이는 좋은 방법이 될 수 있다.