일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 의존성
- 명령-쿼리 분리
- 일관성 있는 협력
- 유연한 설계
- 유여난 설계
- dip
- 오브젝트
- 알고리즘
- '기존 설계 재사용
- 객체 생성 사용 분리
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 컴파일 타임 의존성
- iSP
- 하향식 접근
- 믹스인
- 서브 타이핑
- 상속
- 런타임 의존성
- 객체지향
- 메서드를 통한 해결
- OCP
- 합성
- 설계 재사용
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트 2회독] 14장 - 일관성 있는 협력 본문
- 객체는 협력을 위해 존재하며, 협력 구조가 다를경우 코드 이해도가 낮아지고 버그의 위험성이 높아짐
- 설계 재사용을 위해서 객체들의 협력 방식을 일관성 있게 만들어야 함
1. 설계에 일관성 부여하기
- 변하는 개념을 변하지 않는 개념으로부터 분리
- 변하는 개념을 캡슐화
캡슐화 다시 살펴보기
- 캡슐화는 데이터의 은닉만을 의미하는 것이 아닌, 변할수 있는 모든 개념을 감추는 것
- 협력을 일관성 있게 만들기 위한 두가지 캡슐화의 방법
- 서브 타입 캡슐화와 객체 캡슐화
- 서브 타입 캡슐화:
- 컴파일 타임 때는 슈퍼 타입만 알고 있더라도, 실행 시점에 자식 클래스 인스턴스와 협력함. 서브
- 서브 타입의 종류를 캡슐화
- 객체 캡슐화
- 특정 클래스는 다른 클래스 타입을 private으로 인스턴스 변수로 갖고 있음
- 이로 인해 객체와 객체 사이에 관계가 캡슐화 되어 두 객체의 관계가 변하더라도 외부에 영향을 미치지 않음
- 객체 사이의 관계가 캡슐화 됨
- 서브 타입 캡슐화:
- 서브 타입 캡슐화
- 변하는 부분을 분리해서 타입 계층으로 만듦.
- 변하는 부분의 공통적인 행동을 인터페이스로 추상화 하고, 변하는 부분들이 상속 받게 만듦
- 객체 캡슐화
- 변하지 않는 부분에 합성하여 특정 객체가 추상화에 의존하도록 만듦
결론
- 객체 협력 방식을 일관성 있게 만들어서, 기존 설계를 재사용 할 수 있음
- 이는 버그의 위험성을 낮추고, 코드의 이해도를 높임
- 설계 일관성을 위해서 변하는 개념과 변하지 않는 개념을 분리하여, 변하는 개념을 캡슐화
- 캡슐화는 단순 데이터를 감추는 행위를 넘어, 변할수 있는 모든 개념을 감추는 행위
- 합성과 상속 모두 캡슐화의 일종이며, 객체 사이의 관계를 캡슐화 하는 것과 서브 타입을 캡슐화 하는것으로 나눠짐
- 약간의 부조화를 수용하더라도, 서비스 내에 일관성 있는 패턴을 지키는게 더 중요
- 서브 타입중 한곳에서 의도한 동작과 다르게 구현하더라도, 일관성 있는 협력 패턴을 통해 시스템의 이해도를 높이고, 수정에 필요한 노력을 낮출 수 있음
'OOP' 카테고리의 다른 글
[오브젝트 2회독] 15장 - 디자인 패턴과 프레임 워크 (1) | 2024.11.19 |
---|---|
[오브젝트 2회독] 13장 - 서브 클래싱과 서브 타이핑 (0) | 2024.11.19 |
[오브젝트 2회독] 12장 - 다형성 (0) | 2024.11.19 |
[오브젝트 2회독] 11장 - 합성과 유연한 설계 (0) | 2024.11.19 |
[오브젝트 2회독] 10장 - 상속과 코드 재사용 (0) | 2024.11.19 |
Comments