컴포넌트
✅ 정의
인터페이스를 통해 캡슐화된, 독립적으로 배포될 수 있는, 재사용 가능한 소프트웨어의 단위
- 독립적으로 배포되고, 실행될 수 있는 소프트웨어의 단위
- 명확한 인터페이스를 통해 접근할 수 있는 기능을 제공해야 함.
- 특정한 곳에서만 사용 가능한 게 아닌, 다른 위치에서도 재사용이 가능해야 함
- 소프트웨어 구현에 있어서 가장 중요한 단위라고 볼 수 있다!
✅ 특징
- 내부 구현은 캡슐화되어있음.
- 모듈에 비해 배포나 교체 단위로 강조되는 용어
- 독립적이어야 하므로, 다른 컴포넌트에 의존하면 안된다.
- 인터페이스를 통해 컴포넌트 간 통신을 수행한다.
- 서브시스템이 존재한다면, 컴포넌트는 서브시스템을 구성하는 단위다.
- 혹은 서브시스템으로 여길 수도 있다. 따라서
<<subsystem>>
스테레오타입을 사용하기도 함. - 독립적으로 배포할 수 있는 가장 작은 단위
✅ 예시
- 장바구니 컴포넌트 : 상품 추가/삭제, 수량 조절 기능
- 추천 상품 컴포넌트 : 사용자 구매 이력 기반 추천 기능
- 로그인 컴포넌트 : 사용자 인증 처리 기능
- 상품 검색 컴포넌트 : 키워드 검색, 필터링 기능 등
- Java 의 경우 jar 파일이 컴포넌트이다.
컴포넌트 설계의 원칙
- (1) REP : 재사용/릴리스 등가 원칙 Reuse/Release Equivalence Principle
- (2) CCP : 공통 폐쇄 원칙 Common Closure Principle
- (3) CRP : 공통 재사용 원칙 Common Reuse Principle
- 컴포넌트 간 의존성과 결합도는 약하게 -> 인터페이스를 활용
- 컴포넌트 내 응집도는 강하게
REP : 재사용 / 릴리즈 등가 원칙
재사용 단위는 릴리즈 단위와 같다.
- 하나의 컴포넌트로 묶인 클래스와 모듈은 함께 릴리스 할 수 있어야 한다.
- 따라서 컴포넌트 내의 클래스와 모듈은 동일 릴리스 버전 번호를 가지고, 이를 통해 추적 관리할 수 있어야 한다.
- 따라서 단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성되어야 한다.
CCP 공통 폐쇄 원칙
동일한 이유로 동일한 시점에 변경되는 같은 클래스로 묶어라.
서로 다른 시점에 다른 이유로 변경되는 클래스는 서로 다른 컴포넌트로 분리하라.
- SRP (단일 책임 원칙) 을 컴포넌트 관점에서 다시 정의한 것
- 단일 컴포넌트는 변경 이유가 여러 개 있어서는 안된다.
- “변경” 작업을 단일 컴포넌트로 제한할 수 있다면, 해당 컴포넌트만 재배포 하면 된다.
- 이를 통해 릴리즈, 재검증, 배포의 작업량을 최소화할 수 있음
CRP 공통 재사용 원칙
컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라.
- 클래스와 모듈을 어느 컴포넌트에 위치시킬지 결정할 때 도움이 되는 원칙
- 재사용되는 경향이 있는 클래스와 모듈들은 같은 컴포넌트에 포함시켜야 한다.
- 재사용 가능한 클래스는 재사용 모듈의 일부로써 해당 모듈의 다른 클래스와 상호작용 하는 경우가 많은데, CRP 에서는 이런 클래스들을 동일한 컴포넌트에 넣어야 한다고 말한다.
- 즉, 어느 컴포넌트 안의 클래스나 모듈이 다른 컴포넌트를 호출해 사용하지 않도록(의존하지 않도록) 설계해야 한다.
컴포넌트의 구성과 표현
컴포넌트
인터페이스를 통해 캡슐화된, 독립적으로 배포될 수 있는, 재사용 가능한 소프트웨어의 단위
제공 인터페이스 provided interface
컴포넌트가 기능 혹은 서비스를 제공하기 위해 구현하는 인터페이스
- 내부의 구현된 서비스를 외부에 제공하기 위해 제공 인터페이스 로 노출시킨다.
- 서비스 이용 컴포넌트는 서비스 제공 컴포넌트의 내부 동작을 몰라도 제공 인터페이스를 통해 필요 기능을 사용할 수 있다.
서비스 이용 컴포넌트 : 상호작용에서 자신과 다른 컴포넌트의 서비스를 이용하는 컴포넌트
서비스 제공 컴포넌트 : 상호작용에서 기능이나 서비스를 제공하는 컴포넌트
요구 인터페이스 required interface
컴포넌트가 정상적으로 동작하기 위해 필요로 하는 인터페이스
- 자신의 기능과 서비스를 작동시키기 위해
- 다른 클래스나 컴포넌트로부터 제공받아야 하는 서비스나 기능
컴포넌트의 연결 및 내부 구조 명세
컴포넌트의 연결
Reference
클린 아키텍처 - 소프트웨어 구조와 설계 원칙
소프트웨어공학 - 김희천 저
https://hwannny.tistory.com/32
Comments