이전까지 객체지향을 공부하면서 중요하다는 것은 알고 있었지만 추상화가 무엇인지 정확하게 이해를 못 하고 있었다.
그런데 객체지향 사실과 오해에 너무 좋은 예시가 나와있었다.
전 세계 어디를 가더라도 지하철 노선도는 유사한 형태를 띠기 때문에 한 도시의 지하철 노선도를 이해하면 다른 도시의 지하철 노선도 역시 쉽게 이해할 수 있다.
초기의 지하철 노선도는 실제와 유사한 물리적인 지형 위에 구불구불한 운행 노선과 불규칙적인 역 간의 거리를 사실적으로 묘사하고 있었다. 문제는 이렇게 사실적인 정보가 오히려 지하철을 이용하는 승객들로 하여금 노선도를 이해하기 어렵게 만들었다는 점이다.
지하철 노선도 디자인에서 가장 중요한 것은 사실적으로 지형을 묘사했느냐가 아니라 역과 역 사이의 연결성을 얼마나 직관적으로 표현했느냐다.
1933년 해리 벡은 사실적인 지형과 축척은 무시하고 역 사이의 연결성에만 집중한 혁신적인 지하철 노선도를 창조했다.
그가 창조한 지하철 노선도의 핵심은 지도가 당연히 가져야 한다고 생각되는 '정확성'을 버리고 그 '목적'에 집중한 결과다.
해리 벡은 지하철을 이용하는 승객들을 면밀하게 관찰한 후 승객이 꼭 알아야 하는 사실만 정확하게 표현하고 몰라도 되는 정보는 무시함으로써 이해하기 쉽고 단순하며 목적에 부합하는 지하철 노선도를 창조해 낼 수 있었다.
해리 벡의 가장 위대한 업적은 지하철 노선을 추상화한 것이다.
해리 벡은 지하철 노선을 추상화 함으로써 복잡하고 사실적인 노선을 버리고 목적에 부합하는 노선을 그릴 수 있었다.
항상 추상화에 대한 명확한 예시가 없어서 헷갈려했는데 그 어느 때보다 이해가 되었다.
그렇다면 현실 세계가 아닌 객체지향 세계에서의 추상화는 무엇이고 어떻게 하는 것일까?
추상화를 통한 복잡성 극복
추상화
: 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법
- 구체적인 사물들 간의 공통점은 취하고 차이점은 버리고 일반화를 통해 만드는 것 (일반화)
- 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것 (단순화)
객체지향과 추상화
앨리스는 객체들 중에서 하얀 토끼를 제외한 모든 객체를 '트럼프'라는 하나의 개념으로 단순화해서 바라보고 있다.
즉, 정원에 서 있는 다양한 인물들의 계급, 나이, 성격 등의 차이점은 무시한 채 '트럼프'라는 유사성을 기반으로 추상화해서 바라보고 있는 것이다.
그룹으로 나누어 단순화하기
명확한 경계를 가지고 서로 구별할 수 있는 구체적인 사람이나 사물을 객체지향 패러다임에서는 객체라고 한다.
ex) 정원사, 병사, 왕자, 공주, 왕, 왕비, 하트 왕, 하트 여왕
물론 하얀 토끼는 트럼프의 특징을 갖고 있지 않기 때문에 트럼프 그룹에 들어가지 못하고 토끼 그룹에 들어갔다.
결과적으로 정원에 있는 객체들은 트럼프 그룹과 토끼 그룹으로 나뉘었으며, 이 두 개의 그룹을 통해 정원에 내재된 복잡성을 감소시킨다.
개념의 세 가지 관점
- 심볼 : 개념을 가리키는 간략한 이름이나 명칭
→ 트럼프 - 내연 : 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인
→ 몸이 납작하고 두 손과 두 발이 네모난 몸 모서리에 달려 있는지 여부 - 외연 : 개념에 속하는 모든 객체의 집합
→ 정원사, 병사, 신하, 왕자와 공주, 왕과 왕비, 하트 잭, 하트 왕과 하트 여왕
분류는 추상화를 위한 도구다
위에서 추상화는 두 가지 차원에서 이루어진다고 했다.
- 첫 번째 차원 : 트럼프라는 개념으로 묶은 것에 개별 객체 간의 차이점은 무시하고 공통점을 취한 결과
- 두 번째 차원 : 몸이 납작하고 두 손과 두 발이 네모난 몸 모서리에 달려있는 것 외에는 무시
객체와 타입
객체의 타입에는 두 가지 조언이 적용된다.
- 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다. 즉, 어떤 객체들이 동일한 행동을 수행할 수 있다면 그 객체들은 통일한 타입으로 분류될 수 있다.
- 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
행동이 우선이다.
첫 번째 조언에 따르면 객체가 어떤 행동을 하느냐에 따라 객체의 타입이 결정된다.
두 번째 조언에 따르면 객체의 타입은 객체의 내부 표현과는 아무런 상관이 없다.
따라서 객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 그 객체들은 동일한 타입에 속한다.
결론
객체의 타입을 결정하는 것은 객체의 행동뿐이다.
객체가 어떤 데이터를 보유하고 있는지는 타입을 결정하는 데 아무런 영향도 미치지 않는다.
즉, 상태가 아니라 행위가 먼저이다. 책에서 계속 하고싶은 말인 것 같다.
일반화/특수화 관계
트럼프는 트럼프 인간보다 더 일반적인 개념인 것도 중요하지만,
일반화/특수화 관계를 결정하는 것이 데이터가 아니라 행동이라는 것이다.
두 타입 간에 일반화/특수화 관계가 성립하려면 한 타입이 다른 타입보다 더 특수하게 행동해야 하고 반대로 한 타입은 다른 타입보다 더 일반적으로 행동해야 한다.
때문에 특수화된 타입은 일반화된 타입을 대체할 수 있어야 한다.
ex) 트럼프 인간은 트럼프를 대체할 수 있어야 한다. 가능한가? 가능하다.
'Book > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 05장 책임과 메시지 (0) | 2023.07.24 |
---|---|
[객체지향의 사실과 오해] 04장 역할, 책임, 협력 (0) | 2023.07.24 |
[객체지향의 사실과 오해] 02장 이상한 나라의 객체 (0) | 2023.07.15 |
[객체지향의 사실과 오해] 01장 협력하는 객체들의 공동체 (0) | 2023.07.15 |