일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 유연한 설계
- 객체 생성 사용 분리
- 추상화
- 메서드를 통한 해결
- OOP
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 다형성
- iSP
- '기존 설계 재사용
- 책임주도설계
- 설계 재사용
- 하향식 접근
- 컴파일 타임 의존성
- 유여난 설계
- 명령-쿼리 분리
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 상속
- 서브 타이핑
- 합성
- 상속 조합 폭발적 증가
- 일관성 있는 협력
- 객체지향
- 알고리즘
- 믹스인
- 오브젝트
- 런타임 의존성
- dip
- OCP
- 의존성
- 행동 호환성
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트 2회독] 5장 - 책임 할당하기 본문
- 데이터 중심의 문제는 객체에 상태에 초점을 맞추기 때문에, 변경등에 취약함
- 따라서 책임에 초점을 맞추도록 해야하지만, 실제로 어떤 객체에 책임을 할당하지 정하는게 쉽지 않음
→ 올바른 책임 할당을 위해 Grasp 패턴을 적용
1. 책임 주도 설계를 향해
데이터 중심에서 책임 주도 설계로의 전환을 위한 두가지 원칙
- 데이터 보다 행동을 먼저 결정
- 협력이라는 문맥 안에서 책임을 결정
데이터 보단 행동을 먼저 결정
- 객체에서 중요한 건 데이터가 아닌, 외부에 제공하는 행동(이것이 곧 “책임”)
- 객체가 수행할 책임을 먼저 결정하고, 필요한 데이터가 무엇인지 결정
협력이라는 문맥 안에서 책임을 결정
- 책임의 품질은 협력에 적합한 정도로 결정
- 메세지 전송 클라이언트 의도에 적합한 책임을 할당
- 메세지 수신자에 대한 가정을 하지 않기 때문에, 수신자가 완벽하게 캡슐화 됨
2. 책임 할당을 위한 GRASP 패턴
정보 전문가에게 책임을 할당
- 책임 할당의 첫번째 원칙은 책임을 수행할 정보를 알고 있는 객체에게 책임 할당
- GRASP에서 INFORMATION EXPERT(정보 전문가) 패턴
- 정보와 데이터는 다르기 때문에, 그 정보를 반드시 “저장”하는 객체가 아님
높은 응집도와 낮은 결합도
- GRASP에서 LOW COUPLING, HIGH COHESION
- 높은 응집도
결국 변경의 책임이 한곳에 집중되는 것
- 낮은 응집도의 문제를 해결하기 위해서, 변경에 이유에 따라 클래스들을 분리하는게 좋음
A클래스 내에서 1,2,3 기능이 존재하고, 이들은 각각 독립적으로 사용된다면?
A클래스를 기반으로 한 1,2,3 타입의 분리를 생각해볼 수 있음! 반드시 그런건 X
- 응집도 판단 기준
- 클래스가 하나 이상의 이유로 변경되어야 할 때(이땐, 변경 기준으로 클래스 분리)
- 인스턴스 초기화 시점에 서로 다른 속성들을 초기화 할 때(초기화 속성들의 그룹을 기준으로 분리)
- 각 메서드가 instance 변수들을 사용하는 지 여부(이를 가시적으로 나타내기 위해 Swift에서는 self 키워드를 사용할 수 있음)
- 낮은 결합도
결국 최소한의 의존성을 갖고, 독립적으로 변경할 수 있는 것을 의미
다형성을 통해 분리
- GRASP에서는 POLYMORPHISM 이라고 함
- 기존 객체가 하나의 클래스를 통해 협력하다가, 다양한 타입이 나왔을 때?
- 다형성을 통해서 타입들과 협력이 가능함
- 기존 객체의 입장에서는 타입은 많아져도 같은 역할을 하는 집합들이기에 이전과 차이가 없음
변경으로부터 보호
- GRASP에서는 PROTECTED VARIATIONS(변경 보호) 라고 함
- 새로운 타입을 추가할 때마다, 기존 코드의 변경이 있어서는 안됨
- 이를 위해서, 타입을 캡슐화 하여 새로운 타입이 추가되더라도 기존 객체에 영향을 미치지 않음
결론
- GRASP 패턴이라고 하였지만 결국 SOLID 원칙이 떠오르는 순간(SRP, OCP)
- 객체 지향 프로그래밍에서 중요한 건 협력에 관점에서 책임을 명확히 규정하고, 가능한 높은 응집도와 낮은 결합도를 가진 코드를 만드는 것(”가능한” 이라는 키워드를 붙인 이유는 응집도와 결합도를 위한 복잡도가 너무 커진다면, 다른 사람이 이해하기 어렵기 때문)
- 높은 응집도를 위해 특정 객체에서 타입을 분리할 수 있으며, 다형성 을 활용
- 타입을 새롭게 추가한다고 해서, 기존 객체에 영향을 주어선 안된다(OCP)
'OOP' 카테고리의 다른 글
[오브젝트 2회독] 7장 - 객체 분해 (0) | 2024.11.19 |
---|---|
[오브젝트 2회독] 6장 - 메시지와 인터페이스 (0) | 2024.11.19 |
[오브젝트 2회독] 4장 - 설계 품질과 트레이드 오프 (0) | 2024.11.19 |
[오브젝트] 12장 - 다형성 (1) | 2024.10.09 |
[오브젝트] 11장 - 합성과 유연한 설계 (0) | 2024.10.09 |
Comments