일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 상속
- 메서드를 통한 해결
- 유연한 설계
- 런타임 의존성
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 의존성
- 믹스인
- 오브젝트
- 하향식 접근
- 추상화
- 서브 타이핑
- 객체지향
- 행동 호환성
- 설계 재사용
- OOP
- 명령-쿼리 분리
- 유여난 설계
- 상속 조합 폭발적 증가
- 합성
- dip
- OCP
- '기존 설계 재사용
- 알고리즘
- 객체 생성 사용 분리
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 책임주도설계
- 일관성 있는 협력
- iSP
- 컴파일 타임 의존성
- 다형성
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트 2회독] 11장 - 합성과 유연한 설계 본문
- 합성은 내부 객체의 구현이 아닌, 퍼블릭 인터페이스에 의존하기 때문에 안정적인 코드를 얻을 수 있음
- 상속은 is-a 관계, 합성은 has-a 관계
- 합성은 실행 시점에 동적으로 변경할 수 있기에 더욱 유연한 설계를 얻을 수 있음
1. 상속으로 인한 조합의 폭발적 증가
작은 기능을 조합해서 더 큰 기능을 수행하는 객체를 만들어야 할 때, 상속은 두가지 문제점을 발생
- 하나의 기능을 추가하거나 수정하기 위해 불필요하게 많은 수의 클래스 추가 및 수정 필요
- 모든 조합의 클래스를 만들어야 하기 때문
- ex.) A기능을 수행하는 객체와, B 기능을 수행하는 객체를 합성하여 C 객체를 만들때
- 합성은 A + B의 클래스만 필요한 반면, 상속은 A*B의 객체가 필요하게 됨
- 단일 상속만 지원하는 언어에서는 상속으로 인해 오히려 중복 코드 양이 늘어남
훅 메서드
- OCP를 위해 부모 클래스에 추상 메서드를 추가하고 자식 클래스에서 오버라이딩
- 모든 자식 클래스가 오버리이딩 해야 하기에, 이를 방지하고자 기본 구현 메서드인 훅메서드 제공
2. 믹스인
- 객체 생성할 때 코드 일부를 클래스 안에 섞어 넣는 재사용 기법
- 합성은 실행 시점에 객체를 조합, 믹스인은 코드 시점에 조합
- 상속은 부모, 자식을 동일한 개념벅 범주로 묶는거라면, 믹스인은 유연한 관계를 재구성
- Swift에서는 클래스에 protocol과 extension을 통해서 구현 가능
- protocol Flying { func fly() } protocol Swimming { func swim() } class Animal { func sound() { print("Animal sound") } } class Bird: Animal, Flying { func fly() { print("Flying in the sky") } }
- 하지만 다양한 기능을 확장할 수 있는 반면, 특정 객체가 지나친 많은 기능으로 인해 SRP위반등 문제 발생 가능
결론
- 합성은 퍼블릭 인터페이스에 의존하여 상속보다 유연한 설계가 가능
- 작은 기능을 조합하여 더 큰 기능을 만들 때 합성을 사용함으로써, 상속에서 발생하는 불필요하게 많은 클래스가 발생하는 문제를 방지
- 합성 대신 믹스인 기법을 통해서 컴파일 타임때 유연한 관계를 생성할 수 있음
- Swift에서 protocol, extension으로 구현 가능하지만 남용할경우 한 객체에 지나치게 많은 기능이 부여될 수 있음
- 상속은 부모와 자식을 같은 개념적 범주로 묶는 것이며, 합성은 객체들을 조합하여 유연하고 확장 가능한 설계를 만듦
'OOP' 카테고리의 다른 글
[오브젝트 2회독] 13장 - 서브 클래싱과 서브 타이핑 (0) | 2024.11.19 |
---|---|
[오브젝트 2회독] 12장 - 다형성 (0) | 2024.11.19 |
[오브젝트 2회독] 10장 - 상속과 코드 재사용 (0) | 2024.11.19 |
[오브젝트 2회독] 9장 - 유연한 설계 (2) | 2024.11.19 |
[오브젝트 2회독] 8장 - 의존성 관리하기 (0) | 2024.11.19 |
Comments