Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- UICollectionView
- swift documentation
- 클린 코드
- swiftUI
- Clean Code
- 리펙터링
- UITextView
- combine
- 리팩토링
- rxswift
- Xcode
- ribs
- uitableview
- 리펙토링
- tableView
- ios
- MVVM
- HIG
- Observable
- Human interface guide
- map
- 스위프트
- uiscrollview
- collectionview
- SWIFT
- clean architecture
- Refactoring
- 애니메이션
- Protocol
- RxCocoa
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Clean Architecture] 13. Component (컴포넌트) 본문
Clean Architecture/Clean Architecture 기초
[Clean Architecture] 13. Component (컴포넌트)
jake-kim 2021. 7. 5. 22:35Component (컴포넌트)
- 컴포넌트의 개념: 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위
- iOS에서는 .ipa 파일
- 컴파일형 언어에서 컴포넌트는 '바이너리 파일'의 결합체
- 인터프리터형 언어에서 컴포넌트는 '소스 파일'의 결합체
- cf) 인터프리터형 언어: 컴파일러를 거쳐서 기계어로 변환되지 않고 바로 실행되는 프로그래밍 언어
- 스위프트는 '컴파일형'언어
Component Cohesion (컴포넌트 응집도)
- REP(Reuse/Release Equivalence Principle): 재사용/릴리즈 등가 원칙
- CCP(Common Closure Printciple): 공통 폐쇄 원칙
- CRP(Common Reuse Principle): 공통 재사용 원칙
REP
- 재사용을 위하여 컴포넌트를 구성하는 모든 모듈은 서로 공유하는 중요한 테마나 목적이 있어야 가능
- 릴리즈 문서 작성과 릴리즈 번호를 주는 이유
- 릴리즈 번호가 없다면 재사용 컴포넌트들이 서로 호환되는지 보증할 방법이 없는 것
- 새로운 버전이 언제 출시되고 무엇이 변했는지 소프트퉤어 개발자들이 알아야 하기때문
CCP
- 유지보수를 위해 동일한 이유로 동일한 시점에 변경되는 클래스를 같은 클래스로 묶고, 서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트로 묶는 것
- CCP는 컴포넌트 수준의 SRP(Single Responsibility Principle)
- SRP(Single Responsibility)을 컴포넌트 관점에서 다시 사용된 개념: 단일 클래스는 변경의 이유가 여러개가 있어서는 안되듯, CCP에서도 단일 컴포넌트는 변경의 이유가 여러 개 있어서는 안된다는 의미
- 대부분의 애플리케이션에서 유지보수성은 재사용성보다 훨씬 중요
- 애플리케이션에서 코드가 반드시 변경되어야 한다면, 여러 컴포넌트 도처에 분산되어 발생하기보다는 변경 모두가 단일 컴포넌트에서 발생하는 편이 낫다는 의미
- 변경된 컴포넌트에 의존하지 않는 컴포넌트는 다시 검증하거나 배포 불필요
- 소프트웨어를 릴리즈, 재검증, 배포하는 일과 관련된 작업량을 최소화
- OCP(Open Close Principle)원칙과 유사: Closure(폐쇄)의 의미가 Close의 의미와 동일
CRP
- 불필요한 릴리즈를 피하기 위해 사용하지 않는 클래스를 가진 컴포넌트에 의존하지 않는 것
- 재사용되는 경향이 있는 클래스와 모듈들은 같은 컴포넌트에 포함해야 하는 의미
- 컴포넌트 내부에서는 클래스들 사이에 수많은 의존성이 존재
- Container 클래스와 해당 클래스의 Iterator클래스가 있을 때, 이들 클래스는 서로 강하게 결합되어 있기 때문에 함께 재사용 > 동일한 컴포넌트에 위치
- ISP(Interface Segregation Principle)와의 관계
- CRP는 ISP의 포괄적인 버전: ISP는 사용하지 않는 메서드가 있는 클래스에 의존하지 않는 것이고 CRP는 사용하지 않는 클래스를 가진 컴포넌트에 의존하지 않는 것
컴포넌트 응집도에 대한 균형 다이어그램
- 포함 원칙: REP, CCP
- 두 원칙은 컴포넌트를 더욱 크게 만드는 원칙
- 배제 원칙: CRP
- 컴포넌트를 작게 만드는 원칙
- 세 가지 원칙은 상충되므로 균형을 이루게끔 하는게 이상적
- REP와 CRP에만 중점을 두면, 사소한 변경이 생겼을 때 너무 많은 컴포넌트에 영향을 미치는 상황이 발생
- CCP와 REP에만 중점을 두면, 불필요한 릴리스가 빈번해지는 상황
- 프로젝트의 컴포넌트 구조는 시간과 성숙도에 따라 변하는 것
- 일반적으로 프로젝트는 삼각형의 오른쪽에서 시작: 재사용성만 희생
- 프로젝트 성숙하고 그 프로젝트로부터 파생된 또 다른 프로젝트가 시작되면, 프로젝트는 삼각형에서 점차 왼쪽으로 이동
* 참고
Clean Architecture
'Clean Architecture > Clean Architecture 기초' 카테고리의 다른 글
Comments