
전 글에서 객체가 무엇인지, 어떻게 구현되어 상호작용하는지에 대해 정리했다. 그렇다면 우린 어느정도까지를 하나의 객체 라고 정의할 수 있을까?
상태 변화를 통해 문을 통과한 앨리스는 하트 여왕의 정원에 들어선다. 정원에서 앨리스는 다양한 직업을 가진 아주 많은 인물들1을 만난다. 이들은 모두 분명한 경계를 가지는 하나의 객체라고 정의할 수 있다. 하지만 인물의 수가 더 더 많았다면 과연 앨리스는 인물들을 모두 다 인지할 수 있었을까? 앨리스는 이 객체들 대부분을 하나로 아울러 생각해버린다.
기껏해야 트럼프에 불과해.(p.78)
추상화가 필요한 이유
왜 우리는 이 다양한 인물들을 ‘트럼프’라는 한 단어로 줄여 지칭할 수 있을까? 그 이유는 정원에 있는 인물들이 공통적으로 ‘트럼프‘라고 했을 때 떠오르는 일반적인 외형과 행동 방식을 지니고 있기 때문이다. 인물들의 계급, 나이, 성격 등의 차이점은 무시한채 ’트럼프’라는 유사성을 기반으로 공통점만을 취해 단순화한 것이다. 앨리스는 인물들을 복잡한 면을 생략하고 깔끔하게 추상화하여 세상을 단순하게 바라보고 있는 것이다.
실패한 추상화
1930년대에 사용되던 런던 지하철의 노선도는 실제와 유사한 물리적인 지형 위에 구불구불한 운행 노선과 불규칙적인 역 간 거리를 사실적으로 묘사하고 있었다. 이는 실제 세상을 지도로 단순화하는데는 성공했지만 이렇게 사실적인 정보가 오히려 승객들에게는 이해하기 어렵게 만들었다는 점에서 추상화에는 실패했다고 볼 수 있다.
지하철 노선도는 “지도”의 종류라고 볼 수 있지만 위치, 거리 등 사실적인 지형 정보가 중요한 일반적인 지도와 달리, 역과 역 사이의 연결 정보가 중요하다. 해리 벡(Harry Beck)은 지도가 가져야하는 정확성(지형 정보)을 버리고 목적(연결성)에 집중했다. 이는 90여년이 지난 지금까지도 커다란 수정 없이 전 세계 지하철 노선도에 적용되고 있는 성공한 추상화다.
만약 앨리스가 트럼프들을 ’계급’ 혹은 ’문양2’에 따라 추상화했다면 그 세계의 규칙에 완전히 함몰되었을 것이다. 앨리스의 추상화 목적은 “이들에게서 살아남아 집으로 가는 것”이었다. 계급과 같이 가변적인 상태는 본질이 될 수 없다. 문양에 따라 세세하게 추상화되었다면 앨리스는 매순간 상대의 문양을 확인하고 그에 따른 수칙을 떠올리며 그들의 권력에 순응했을 것이다.
추상화 단계
1. 개념; 공통점 찾기
- 길거리를 빠른 속도로 누비는 교통수단 → 자동차
- 하늘을 나는 교통수단 → 비행기
세상에 존재하는 모든 자동차들과 비행기들 하나하나를 객체로 취급하기엔 인간의 인지능력은 매우 부족하다. 따라서 사람들은 공통점을 기반으로 객체를 묶어 그룹화하여 다뤄야 하는 가짓수를 줄임으로써 상황을 단순화했다. 이때 해당 그룹에 속하기 위한 기준을 가진 관념이 있는 단어를 개념(concept) 이라고 한다.
개념의 예시
길거리를 빠른 속도로 누비는 교통수단을 ‘자동차‘라는 개념으로 묶을 수 있고, 하늘을 나는 교통수단을 ‘비행기‘라는 개념으로 묶을 수 있다. 또한 ‘트럼프’는 몸이 납작하고 두 손과 발이 네모난 몸 모서리에 달려있는 객체들을 포괄할 수 있는 개념이다.
2. 분류; 개념의 틀로 거르기
개념은 객체가 어떤 그룹에 속할 것인지 틀을 제공한다. 정원의 등장인물들은 ‘트럼프’라는 개념에 속하거나, 속하지 않는다. 이처럼 분류(classification) 란 특정한 객체를 특정한 개념의 객체 집합에 포함시키거나 포함시키지 않는 작업을 의미한다. 분류는 객체지향의 품질을 결정하는 만큼 유지보수가 용이하고 변경에 유연하게 대처할 수 있는 애플리케이션을 위해 객체를 최대한 직관적으로 분류하는 것이 중요하다.
3. 인스턴스; 개념 그룹의 일원
하트 여왕은 ‘트럼프‘라는 개념 그룹의 일원이고 하얀 토끼는 ‘토끼’라는 개념 그룹의 일원이다. 결국 각 객체는 특정한 개념을 표현하는 그룹의 일원으로 포함된다. 이처럼 객체가 개념 그룹이 될 때 그 객체를 해당 개념의 인스턴스(instance) 라고 한다.
개념을 구성하는 심볼, 내연, 외연
마치며 - 개발에서의 추상화
결국 추상화에 정답은 없다. 복잡한 실체에 질서를 부여하는 사용자를 위한 방식일 뿐이다. 도메인을 어떻게 바라보고 어떤 목적을 달성하기 위해 추상화를 시도하는지에 따라 사용자의 만족도가 달라지며, 어플리케이션의 생명이 길어지고 가치가 높아진다. 프로그램 설계 시 구상한 추상화가 관념적인 시선이 아닌 목적에 맞게 설계되었는지 제대로 된 확인이 필요하다.