Skip to content

컴포넌트 원칙

Jaeyong edited this page May 19, 2022 · 2 revisions

어떤 클래스를 어느 컴포넌트에 포함시켜야 할까?

  • 임시방편적으로 결정을 내리기보다 원칙을 따라보자.
  • 컴포넌트 응집도와 관련하여 3가지 원칙이 있다.

REP: 재사용/릴리스 등가 원칙

재사용 단위는 릴리스 단위와 같다.

  • 배경 : 재사용 가능한 컴포넌트나 컴포넌트 라이브러리가 많이 만들어지면서 모듈 관리 도구가 등장한다. 컴포넌트들을 관리하기 위해 번호를 붙이기 시작한다.
  • 릴리스 번호를 이용하여 서로 호환되는 지 보증이 가능하다.
  • 소프트웨어 개발자들이 변화를 인지하고 기존 버전을 계속 쓸지 여부를 결정하게 한다.
  • (소프트웨어 설게, 아키텍처 관점) 단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성되어야 한다.
  • 하지만 이 원칙 하나만으로 단일 컴포넌트를 묶는 방법을 제대로 설명하기 힘들다. 그리고 이 원칙은 너무 당연해보인다.

CCP : 공통 폐쇄 원칙

동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트로 묶어라. 서로 다른 시점에 다른 이유로 변경되는 클래스를 다른 컴포넌트로 분리하라.

  • SRP원칙과 비슷하게 단일 컴포넌트는 변경의 이유가 여러개 있어서는 안된다.
  • 유지보수성은 재사용성보다 훨씬 중요하다.
  • 그러므로, 변경이 여러 컴포넌트에 분산되어 발생하기보다는, 차라리 변경 모두가 단일 컴포넌트에서 발생하는 편이 낫다.
  • 변경될 가능성이 있는 클래스는 모두 한 곳으로 묶는다.
  • OCP원칙의 '폐쇄'와 같은 의미로 동일한 유형의 변경에 대해 닫혀 있는 클래스들을 하나의 컴포넌트로 묶는다는 뜻

CRP : 공통 재사용 원칙

컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 마라.

  • 재사용되는 클래스와 모듈은 같은 컴포넌트에 위치시켜야한다.
  • 하지만, 어떤 컴포넌트가 다른 컴포넌트를 사용한다면, 두 컴포넌트 사이에는 의존성이 생긴다. 단 하나의 클래스만 사용해도 의존성은 그대로다.
  • 강하게 결합되지 않은 클래스들을 동일한 컴포넌트에 위치시켜서는 안 된다고 한다...
  • 이게 무슨 뜻일까?
  • 그니까 컴포넌트끼리 의존하지 않도록 계속 분리하라는 뜻.
  • 책에서 한마디로 정리해준다.

필요하지 않은 것에 의존하지마라.

컴포넌트 응집도에 대한 균형 다이어그램

  • REP와 CCP는 포함 원칙으로 컴포넌트를 크게 만들고, CRP는 배제 원칙으로 컴포넌트를 더욱 작게 만든다. 이들의 균형을 찾아야 한다.
  • CRP에 집중하면 사소한 변경이 생겼을 떄 너무 많은 컴포넌트에 영향을 미친다.
  • CCP에 집중하면 불필요한 릴리스가 너무 빈번해진다.