on
[실용주의 프로그래머] - 5장. 구부러지거나 부러지거나를 읽으며
[실용주의 프로그래머] - 5장. 구부러지거나 부러지거나를 읽으며
개요
요구사항은 빠르고 지속적으로 바뀌기 때문에 이러한 변화에 맞추기 위해서는 가능한 느슨하고 유연한 코드를 작성해야합니다.
5장에서는 되돌릴 수 있는 의사 결정을 내릴 수 있는 구체적인 방법에 대해 설명하고 다룹니다.
5장에서 다루는 챕터는 다음과 같습니다.
결합도 줄이기와 디미터 법칙
메타프로그래밍
시간적 결합
단지 뷰일 뿐이야
칠판
느낀점
결합도 줄이기와 디미터 법칙
결합도는 모듈간의 의존 정도를 의미합니다. 해당 챕터에서는 서로 다른 개념들을 분리하여 결합도를 줄이는 방법을 다룹니다.
코드는 되도록 모듈로 구성하고 이들 간의 상호작용을 제한해야 합니다. 한 모듈이 변경되거나 교체된다 하더라도 다른 모듈들은 변경 없이 수행될 수 있기 때문입니다.
만약 결합도가 높아져 의존 관계가 복잡해진다면 다음과 같은 징후를 보게 될 것입니다.
단위 테스트를 링크하기 위한 명령어가 테스트 프로그램 자체보다 김 한 모듈의 간단한 수정이 이와 관계없는 모듈을 통해 시스템 전역에 전파 개발자가 수정한 부분이 시스템에 어떤 영향을 미칠지 몰라 코드의 수정을 두려워함
불필요한 의존이 많은 시스템은 유지보구하기 어렵고 시스템 자체가 매우 불안전한 경향이 있습니다. 그렇기 때문에 우리는 의존도를 최소화하기 위해 디미터 법칙을 사용하여 메서드, 함수를 설계할 수 있습니다.
디미터 법칙을 간단하게 정리하면 다음과 같습니다.
한 객체가 제공하는 메서드에 접근하기 위해 또 다른 객체들을 통하는 것을 허용하지 않음
객체의 모든 메서드는 다음에 해당하는 메서드만을 호출해야함 자신 메서드로 넘어온 인자 자신이 생성한 객체 직접 포함하고 있는 객체
다만 디미터 법칙을 무조건적으로 사용해야 하는 것만은 아닙니다. 예를 들어서 데이터베이스 스키마를 설계할 때 성능상 이점을 얻기 위해 반정규화를 하는 것처럼. 모듈간의 결합도를 높임으로써 명백한 성능상 이점을 얻을 수 있다면 아직 괜찮은 설계라고 볼 수 있습니다.
단, 그렇지 않은 경우에는 유연하지 않은 미래를 향해 가는 중이니 주의하도록 합시다~
디미터 법칙에 대해서는 더 자세히 공부해보면 좋을 것 같습니다.
메타프로그래밍
메타데이터는 데이터의 관한 데이터를 말합니다. 예를 들어서 데이터베이스 스키마, 데이터 디렉토리 등을 대표적인 예로 들 수 있습니다.
이러한 메타데이터를 설정 가능한 옵션으로 제공한다면 우리가 작성하는 프로그램은 매우 유연해집니다.
예를 들어서 자바에서 환경별로 접근해야하는 리소스 디렉토리가 다를 때, 리소스 디렉토리를 프로퍼티로 제공한다면 환경이 추가된다고 하더라도 수정할 곳은 프로퍼티 뿐일 것입니다. 또한 스프링 부트 프로젝트에서는 데이터베이스 설정과 같은 다양한 설정을 프로퍼티로 관리 할 수 있습니다.
코드에는 추상화를 적용하여 유연한 코드를 만든다면, 메타테이터에는 세부 내용을 관리함으로써 코드를 유연하게 만드는 것입니다.
시간적 결합
단지 뷰일 뿐이야
칠판
728x90
from http://primayy.tistory.com/77 by ccl(A) rewrite - 2021-12-05 16:27:54