일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 상속
- 객체지향
- '기존 설계 재사용
- 유여난 설계
- 추상화
- 서브 타이핑
- 상속 조합 폭발적 증가
- 메서드를 통한 해결
- OCP
- 믹스인
- 일관성 있는 협력
- 유연한 설계
- dip
- 런타임 의존성
- iSP
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- OOP
- 하향식 접근
- 컴파일 타임 의존성
- 명령-쿼리 분리
- 알고리즘
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 다형성
- 오브젝트
- 합성
- 객체 생성 사용 분리
- 설계 재사용
- 행동 호환성
- 책임주도설계
- 의존성
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트 2회독] 2장 - 객체지향 프로그래밍 본문
1. 영화 예매 시스템
- 결국 프로그래밍에서 중요한 건 용어를 알맞게 정의하는 것
- 책에서 영화 예매 프로그램을 구현하기 전, 영화와 상영의 정의를 나누고 있음
- 우리가 일반적으로 예매하는 건, 영화가 아닌 상영(특정 시간에 상영되는 영화)
- 영화는 단순히 실제 영화 정보를 담고 있음
- 이게 실제 세계와 맞는지 중요하지 않고, 해당 프로그램을 만들 때 이렇게 정의한 게 중요
2. 객체지향 프로그래밍을 향해
객체, 클래스, 협력
- 객체 지향 프로그래밍의 본질은 객체(not class)
- 객체 지향에 핵심 두가지
- 어떤 객체가 필요한가?
- 이를통해, 해당 객체에 필요한 state(속성)과 행동(behavior)를 정의
- 객체는 협력하는 공동체의 일원(not 독립적 존재)
- 객체를 협력의 대상으로 봄으로써, 유연하고 확장 가능하게 만듦
- 어떤 객체가 필요한가?
클래스, 도메인
- 도메인은 문제 해결을 위해 사용자가 프로그램을 사용하는 분야
- 영화 예매 도메인을 분석하여, 도메인을 구성하는 개념과 관계를 표현하는게 가능해짐(설계도를 그리는 것)
- 도메인을 실제적으로 구현시, 클래스로 구현하면 됨
클래스
- 클래스 public/private 으로 나누는 것은 개발자들간 협력시 매우 중요
- 캡슐화를 통해서, 구현은 감추고 외부에서 사용만 하면 되기 때문
자율적 객체
- 객체는 상태와 행동을 가지는 존재
- Data와 기능을 묶여 있고, 이는 캡슐화의 본질(이전 패러다임에선, Data와 기능을 분리해서 생각)
- 클래스의 캡슐화는 객체 public, private을 나누어 스스로 상태를 관리하도록 만듦 → 자율적 객체가 됨
컴파일 타임, 실행 타임 의존성
- 코드의 의존성과 실행 시점의 의존성이 다름
- 따라서, 유연하게 설계가 가능하지만 이로 인해 코드의 이해도가 더 어려울 수 있음
- 명시적인 특정 클래스가 아닌, 추상화된 객체에 의존하기 때문
다형성
- 한 객체가 다른 객체에 메세지를 전송(함수 호출), 하지만 수신 객체 클래스에 따라 결과가 달라짐
- 결국, 특정 객체에 종속되지 않고 다양한 객체가 해당 메세지를 받을 수 있음
모든 코드는 이유가 필요하기 때문에, 다형성 trade-off를 고려한 설계가 필요하다.
코드 재사용
- 상속
- 부모 ↔ 자식간에 강력한 커플링 발생
- 따라서, 부모의 변경이 모든 자식에게 영향을 미치는 구조
- 코드 재사용을 위해서 상속을 사용해선 안됨
- 합성
- 재사용이 가능함(다양한 역할을 가진 객체들을 조합해서 사용)
결론
- OOP의 핵심은 객체들의 상호작용을 통한 기능 구현, not 다형성
- 하지만, 다형성을 사용하여 보다 유연한 설계가 가능
- 코드 재사용을 위해선 상속보단 합성을 사용
- 상속은 객체간의 책임 및 역할이 확정된 뒤, 합성과 함께 사용이 가능함
'OOP' 카테고리의 다른 글
[오브젝트] 9장 - 유연한 설계 (1) | 2024.09.28 |
---|---|
[오브젝트 2회독] 3장 - 역할, 책임, 협력 (1) | 2024.09.15 |
[오브젝트 2회독] 1장 - 객체 설계 (0) | 2024.08.15 |
[오브젝트] 15장 - 디자인 패턴 / 프레임워크 (1) | 2024.07.21 |
[오브젝트] 14장 - 일관성 있는 협력 (0) | 2024.07.21 |
Comments