기존의 지하철 노선도는 실제 물리적 지형과 거리를 반영해 만들어 노선도를 이해하기 어려웠음
새로 만든 노선도는 지형적 특징을 버리고 역과 역 사이의 연결성에 집중해 만듬
단순하고 목적에 부합하는 지하철 노선도 탄생
이것이 추상화
추상화를 통한 복잡성 극복
추상화 :
현실에서 출발해 불필요한 부분을 도려내며 사물의 본질을 드러내는 과정
더 명확히 이해하기 위해 의도적으로 생략한것
두가지 차원으로 이루어짐
첫번째 : 사물간의 공통점은 취하고 차이점은 버려 일반화를 단순하게 만듬
두번때 : 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거해 단순하게 만듬
결론적으로 추상화는 단순화
앨리스와 트럼프 카드들 이야기
하트 여왕의 행렬이 정원에 들어섰다. 동시에 세명의 트럼프 정원사는 땅바닥에 얼굴이 닿을 정도로 납잡 업드렸다. 행렬의 맨앞에서 클로버를 든 열명의 병사들이 행진해 들어왔다. 그 속에는 하트 잭, 토끼, 다른 신하들이 있었고 마지막으로 하트 여왕이 모습을 드러냈다... (내가 많이 요약해버림) ... 앨리스는 여왕을 쳐다보며 마음속으로 이렇게 속샀였다. '기껏해야 트럼프에 불과해. 무서워할 필요 없어.'
많은 객체가 등장함 (정원사들, 클로버 병사들, 하트 잭, 토끼, 신하들, 히트 퀸, 앨리스)
마지막 대사에 집중해야함 ('기껏해야 트럼프에 불과해. 무서워할 필요 없어.')
이 말은 토끼를 제외한 모든 객체를 트럼프로 단순하게 생각해 버리는 추상화를 한것임
트럼프라는 공통점만 보고 차이점은 무시해버림
그룹으로 나누어 단순화하기
정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸 모두 구별 가능함
-> 객체의 성질 가짐
하지만 이들을 싸잡아 트럼프라고 부를수 있는 이유는 공통점이 있기 때문이다.
토끼는 이들과 공통점이 없어 트럼프가 아니다.
개념
사람들은 본능적으로 공통적인 특성을 기준으로 객체를 여러 그룹으로 묶어버린다.
객체들을 묶기 위한 그릇을 개념(concept) 라고한다. (자동차, 모니터, 등등)
앨리스는 정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸을 트럼프라는 개념으로 추상화 했다.
개념을 이용하면 객체를 여러 그룹으로 분류(classification) 할 수있다.
개념 그룹의 일원을 개념의 인스턴스(instance)라고 한다.
개념의 세 가지 관점
심볼(symbol) : 개념을 가리키는 간략한 이름이나 명칭 (트럼프)
내연(intension) : 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다. (몸이 납작하고 손발이 네모난 몸 모서리에 달려있음)
외연(extension) : 개념에 속하는 모든 객체의 집합(set) (정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸)
이 세가지 관점은 객체를 분류할 수 있는 지침을 제공한다.
분류는 객체지향의 가장 중요한 개념 중 하나다.
분류는 추상화를 위한 도구
앞서말한 추상화의 두가지 차원
첫번째 : 사물간의 공통점은 취하고 차이점은 버려 일반화를 단순하게 만듬
두번때 : 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거해 단순하게 만듬
정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸을 한 그룹에 묶은 경우는 첫번째 관점으로 공통점을 취한것
타입
타입(type)과 개념은 같은말이다.
그러나 메모리 안에서는 0과 1만 존재하기에 질서가 없다.
그래서 메모리의 데이터에 특정한 의미를 부여한다.
타입은 메모리의 0과 1에 대해서 수행 가능한 작업과 불가능한 작업을 구분함으로써 데이터가 잘못 사용되는 것을 방지한다.
중요한 사실 1 : 타입은 데이터가 어떻게 사용되느냐가 중요하다.
중요한 사실 2 : 타입에 속한 데이터를 메모리에 어떻게 표현하는지 철저하게 감춰진다.
타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이터다.
데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.
객체와 타입
객체는 데이터가 아니다.
객체에게 중요한것은 행동이다.
객체가 협력을 위해 어떤 책임을 지녀야 하는지를 결정하는게 객체지향의 설계의 핵심히다.
어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.
객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
객체를 타입으로 분류할 때 사용해야 하는 기준은 행동뿐이다.
트럼프 인간
사실 엘리스는 히트 퀸을 트럼프가 아니라 트럼프 인간으로 봤을 것이다.
트럼프 인간은 트럼프가 할 수 있는모든걸 할 수 있지만 좀더 특화된 행동을 할 수 있다.
따라서 트럼프 인간은 트럼프의 부분집합니다.
일반화/특수화 슈퍼타입/서브타입
일반적인 타입 : 특수한 타입이 가진 모든 행동들 중에서 일부 행동만을 가지는 타입 (트럼프) (슈퍼타입)
특수한 타입 : 일반적인 타입이 가진 모든 행동을 포함하지만 거기에 더해 자신만의 행동을 추가하는 타입 (트럼프 인간) (서브타입)
외연의 수 : 일반적인 타입 > 특수한 타입
행동의 수 : 일반적인 타입 < 특수한 타입
타입의 목적
객체의 복잡성을 극복하기가 너무 어렵기 때문이다.
하지만 타입은 시간에 따라 동적으로 변하는 앨리스의 상태를 시간과 무관한 정적인 모습으로 다룰수 있게 해준다.
결론적으로 타입은 추상화다.
동적 모델과 정적 모델
객체지향 애플리케이션을 설계하고 구현하기 위해서는 객체관점의 동적 모델과 객체를 추상화한 타입 관점의 정적 모델을 적절히 혼용해야 한다.