일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SWIFT
- 독서후기
- xcode
- human interface guidelines
- 독후감
- Modality
- @available
- NotificationCenter
- Info.plist
- Codegen
- View Life Cycle
- NumberFormatter
- IOS
- contentInset
- 책후기
- Structures and Classes
- 부트캠프
- 야곰아카데미
- 스타트업주니어로살아남기
- UIResponder
- 스위프트
- delegation
- Mock
- viewcontroller
- Failed to register bundle identifier
- roundingMode
- Navigation
- 아이폰
- mvvm
- SWIFTUI
- Today
- Total
호댕의 iOS 개발
[독서 후기] 객체지향의 사실과 오해 3장 본문
3장에서는 타입과 추상화의 개념에 대해 중점적으로 설명을 하고 있다.
💭 추상화
추상화의 경우 지하철 노선도의 예를 들어 설명하고 있다. 사실 지하철 노선도의 경우 실제 지형적 특징이나 거리를 반영하지 않고 단순히 다음 역이 어떤 역이고 특정 역까지 가려면 몇 정거장이 남아있는지를 보여준다.
지하철 노선도가 필요한 경우는 지형적 특징이 궁금할 때가 아니라 지하철을 타고 얼마나 이동해야할 지 확인해야 할 때이기 때문이다. 따라서 불필요한 지형적 특징은 제거하고 단순화하는 것이다.
이는 추상화에서 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거하고 단순화한 것이다.
이외에도 추상화는 사물 간 공통점을 취하고 차이점은 버리는 방식으로 이뤄질 수도 있다.
그럼 추상화는 어떻게 정의해볼 수 있을까?
일단 추상화가 필요한 상황은 복잡한 것들을 최대한 단순화하여 특정 목적을 달성하기 위함이다. 따라서 추상화는 불필요한 것들을 제거하며 목적에 맞는 본질을 찾아가는 과정이라 볼 수 있다.
⚖️ 개념과 분류
이상한 나라의 앨리스에선 병정, 왕, 여왕, 정원사 등을 단순히 트럼프로 추상화할 수 있다. 이렇게 다양한 객체들을 하나의 개념으로 묶을 수 있는 것이다.
앞에서도 유사하게 몇 번 등장하긴 했지만 객체는 이 책에서 이렇게 정의하고 있다.
명확한 경계를 가지고 서로 구별할 수 있는 구체적인 사람이나 사물을 객체지향 패러다임에서는 객체라고 한다 .
- 객체지향의 사실과 오해 p/81 -
트럼프라는 개념을 통해 트럼프와 트럼프 이외의 토끼 같은 것들을 분류할 수 있다.
또한 개념이 객체에 적용이 되었을 때 각각의 객체는 인스턴스라고 할 수 있다.
여기서 개념을 조금 더 자세히 살펴보자.
💡 개념
- 심볼: 개념을 가리키는 이름 / 명칭
- 내연: 개념의 정의 -> 트럼프의 경우 납작하고 네모난 것들이 내연이 될 수 있다.
- 외연: 특정 개념으로 묶을 수 있는 것들의 집합
다만 여기서 심볼, 외연, 내연보다 중요한 것은 개념으로 객체를 분류할 수 있다는 것이다.
어떤 객체를 어떤 개념으로 분류할지가 객체 지향 설계의 품질을 결정하게 된다. 객체를 적절한 개념으로 분류를 할 경우 각각의 역할과 행동이 분명하기 때문에 유지보수도 용이하며 변화에도 유연하게 대처할 수 있게 된다.
이런 개념은 프로그래밍에서 타입이라고 볼 수 있다.
타입을 좀 더 자세히 알아보기 전에 데이터 타입에 대해 먼저 알아보자.
💽 데이터 타입
실제 메모리에서는 0, 1로 데이터가 구성이 되어 있다. 이는 일련의 비트열로 구성이 되어 있기 때문에 이 비트열의 의미는 값을 가져다 쓰는 어플리케이션에 의해 결정이 된다.
이 때 데이터에 타입이 있어야 데이터가 뭔지 분류를 할 수 있다. 따라서 생겨난 것이 데이터 타입이다. 데이터가 잘못 사용되지 않도록 기준을 만들어 이를 통해 분류할 수 있도록 하는 것이다.
데이터 타입의 경우 어떤 데이터에 어떤 연산자(Operator)를 적용할 수 있는지가 데이터의 타입을 결정하게 된다.
또한 데이터 자체가 어떻게 표현되는지는 외부에 감춰지게 된다.
✳️ 객체
이런 데이터 타입처럼 객체 각각도 하나의 데이터처럼 사용된다. 다만 객체 == 데이터라는 의미는 아니다. 객체를 타입으로 분류하고 타입에 이름을 붙이는 것은 데이터 타입을 정의해놓는 것과 유사하지만 말이다.
물론 객체에서 가장 중요한 것은 객체의 행동이다.
따라서 객체가 동일한 행동을 한다면, 동일한 타입으로 볼 수 있다. 이 때 다른 데이터를 가지고 있다고 해도 동일한 메세지를 받아 처리할 수 있다면 동일한 타입이다. 따라서 다형적인 객체들은 같은 타입에 속한다고 볼 수 있다.
여기서 다형성은 동일한 요청(메세지)에 대해 서로 다른 방식으로 처리할 수 있는 능력으로, 다른 방식으로 처리하긴 하지만 동일한 메세지를 받아 처리하기 때문에 다형적인 객체가 같은 타입으로 볼 수 있는 것이다.
또한 데이터 자체가 어떻게 표현되는지는 외부에 감추는 데이터 타입처럼, 객체도 외부에 행동만 드러내고 상태(프로퍼티)는 감추는 캡슐화를 해줘야 한다.
그럼 왜 타입을 사용하는 것일까?
행동에 따라 동적으로 객체가 변하게 되는데 이런 복잡성을 추상화하기 위함이다.
타입을 사용해 상태가 변하는 것에 집중을 하기보단 어떤 행동에 상태가 변하는 지에 대해 단순화하여 정의할 수 있다.
Swift의 경우 클래스 이외에도 Struct, Enum을 통해 타입을 정의할 수 있다.
'Book > 개발' 카테고리의 다른 글
[독서 후기] 객체 지향의 사실과 오해 4장 (0) | 2022.04.18 |
---|---|
[독서 후기] 객체지향의 사실과 오해 2장 (0) | 2022.04.13 |
[독서 후기] 객체지향의 사실과 오해 1장 (0) | 2022.04.11 |