03. 타입과 추상화
추상화를 통한 복잡성 극복
책에서는 추상화는 현실을 기반으로 하되 복잡하거나 불필요한 부분을 제외하고 목적에 맞게 사물의 본질을 드러나게 하는 과정이다 라고 말한다.
각 객체의 모든 부분을 인간이 기억하는것은 어려우므로 목적에 맞게 제외할 부분은 제외하여 객체를 좀 더 명확하게 하여 복잡도를 낮추는 과정이다.
객체지향과 추상화
앨리스는 여러 객체들을 마주한다. 정원사, 카드 병사, 신하, 공주 등 다양한 모습에 카드 인간들이 있는데 이것을 모두 "트럼프" 에 불과하다 라고 판단한다. 객체들의 성격, 직업, 나이 같은 프로퍼티는 제외하고서 트럼프 라는 공톰점을 가지고 객체를 단순화 하였다.
그룹으로 나누어 단순화 하기
개념 (Concept)
개념이란 우리가 실세계에서 사물에게 적용할 수 있는 생각이나 관념을 말한다.
수많은 객체를 일일히 기억하고 판단하기에는 어렵기에 개념을 이용해 분류(Classficaiton) 할 수 있다.
여기서 공통점을 개념화 하여 해당 그룹개념으로 단순화 할 수 있다.
이렇게 그룹 개념에 속한 객체를 인스턴스(Instance) 라고 표현한다.
분류는 추상화의 도구이다.
객체를 어떻게 분류하냐 에 따라 객체지향의 품질이 달라진다.
공통점은 취하고 차이점은 배제한다. 중요한 부분은 강조하고 그렇지 않다면 최소화 하여 복잡성을 낮춘다.
타입은 개념이다.
타입은 곧 개념이다. 해당 객체가 어떤 타입에 속해있다면 객체는 그 타입에 인스턴스이다.
행동
객체가 어떤 타입인지를 결정하는것은 행동이다. 책에서는 동일한 행동이면 동일한 타입이라고 말하지
엄연히 말하면 행동의 목적에 있다고 생각한다.
행동이 다르더라도 목적이 동일하다면 같은 타입이라고 말할수있다.
다만 타입에 있어서 이러한 행동이 외부에 노출 되는건 자제하는것이 좋다.
행동이 우선시 되야 한다.
행동 = 타입 = 역할 = 기능 = 책임
다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답할수있는 능력을 뜻하기도한다.
캡슐화가 필요한 이유도 행동만이 고려 대상이 되기 때문에 외부에 내부 데이터를 감춰서 철저하게 역할 행동으로 객체를 바라볼수있도록 해야한다.
객체를 분류하는 기준은 타입(개념)이며, 타입을 나누는 기준은 객체가 수행하는 행동이다. 그리고, 클래스는 타입을 구현하기 위한 방법 중 하나이다.
동적 모델과 정적모델
동적 모델(dynamic model): 시간에 따라서 객체의 상태가 어떻게 변화하고, 어떻게 행동하는지를 포착한다.
정적 모델(static model): 객체의 상태가 아닌, 객체가 속한 타입의 정적인 모습을 표현한다.
개발자들은 애플리케이션의 동적인 관점과 정적인 관점을 모두 다뤄야 한다.
클래스
객체지향 프로그래밍 언어에서 정적인 모델은 클래스를 이용해 구현된다. 타입은 객체를 분류하기 위해 사용하는 개념이다. 반면 클래스는 단지 타입을 구현할 수 있는 여러 구현 메커니즘 중 하나일 뿐이다. (p.104)
정리하자면, 객체를 분류하는 기준은 타입(개념)이며, 타입을 나누는 기준은 객체가 수행하는 행동이다. 그릐고, 클래스는 타입을 구현하기 위한 방법 중 하나이다. (p.105)
Last updated