본문 바로가기
독서

객체지향의 사실과 오해 (Chapter 3 - 타입과 추상화)

by graygreat 2021. 4. 1.
728x90
반응형

이 챕터를 읽기 전 먼저 내가 아는 타입과 추상화는 무엇일까 생각해봤다.
무엇인지는 알지만 남에게 설명을 할 때 완벽하게 이해시킬 수 있을까라는 의문을 가지며, 빠르게 책을 펼쳤다.

추상화

추상화에 대해서는 우리가 쉽게 볼 수 있는 지하철 노선도에 있다.
지하철 노선도는 사람들이 지하철을 통해 출발지와 목적지를 볼 수 있고 어디서 환승하는지만 알려주면 된다.
즉, 거창한 디자인 없이 직관적이고 단순하게 보여주면 된다.
해리 백이 창조한 지하철 노선도의 핵심은 '정확성'이 아니라 '목적'에 집중하였다.
이것은 복잡했던 지하철 노선도를 추상화했다고 말할 수 있다.

책에서 말하는 추상화를 정리해보자.
추상화란 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.

복잡성을 다루기 위해 추상화는 두 차원으로 이루어진다.

  • 첫 번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다.
  • 두번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다.

객체지향 패러다임은 객체라는 추상화를 통해 현실의 복잡성을 극복한다.

개념

공통점을 기반으로 객체들을 묶기 위한 그릇을 개념이라고 한다.
예를 들어, 빠른 속도로 거리를 누비는 교통수단에 대해서는 '자동차'라는 개념을 적용한다.
하늘을 나는 교통수단을 지칭하는 개념은 '비행기'이다.

이 개념과 객체는 무슨 관계가 있을까?
개념을 이용하면 객체를 여러 그룹으로 분류할 수 있다.

당장 창문을 열고 밖을 보자.
우리는 바깥 세상에 존재하는 객체를 '자동차', '사람', '건물'로 3 개의 개념으로 나누고는 두 개념에 적합한 객체가 각 그룹에 포함되도록 분류할 수 있다.
이처럼 각 객체에 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 때 객체를 그 개념의 인스턴스(instance)라고 한다.

어떤 객체를 어떤 개념으로 분류할지가 객체지향의 품질을 결정한다.
어떻게 분류할 수 있을까?

개념을 통해 객체를 분류하는 과정은 추상화의 두 가지 차원을 모두 사용한다.
우리는 추상황의 두 가지 차원을 사용하여 객체들의 복잡성을 극복할 수 있다.

타입

개념을 대체할 수 있는 좀 더 세련돼 보이는 용어를 바로 타입(type)이라고 한다.
타입은 개념과 동일하다. 따라서 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다. 어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다.
타입의 인스턴스는 타입을 구성하는 외연인 객체 집합의 일원이 된다.

타입에 관련된 두 가지 중요한 사실이 있다.
첫째, 타입은 데이터가 어떻게 사용되느냐에 관한 것이다.
둘째, 타입에 못한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰진다.

행동에 따라 객체를 분류하기 위해서는 객체가 내부적으로 관리해야 하는 데이터가 아니라 객체가 외부에 제공해야 하는 행동을 먼저 생각해야 한다.
데이터를 먼저 결정하고 객체의 책임을 결정하는 방법은 유연하지 못한 설계라는 악몽을 초래한다.
즉, 객체가 동일한 타입으로 분류되기 위해서는 공통의 행동을 가져야만 한다.

일반화/특수화 관계

특수화 관계란 일반화 관계에서 좀 더 특화된 행동을 하는 것이다.
객체의 일반화/특수화 관계에 있어서도 중요한 것은 객체가 내부에 보관한 데이터가 아니라 객체가 외부에 제공하는 행동이다.
일반적인 타입은 특수한 타입보다 더 적은 수의 행동을 가지고 특수한 타입은 일반적인 타입보다 더 많은 수의 행동을 가진다.

우리는 일반적인 타입을 슈퍼 타입(Supertype), 특수한 타입을 서브(Subtype)이라고 한다.
중요한 것은 두 타입 간의 관계가 행동에 의해 결정된다.
서브타입은 슈퍼타입의슈퍼 타입의 행위에 추가적으로 특수한 자신만의 행동을 추가하는 것이므로 슈퍼 타입의 행동은 서브타입에게 자동으로 상속된다.

결론

  • 타입은 추상화다.
  • 객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동
  • 결국 객체지향에서 중요한 것은 동적으로 변하는 객체의 '상태'와 상태를 변경하는 '행위'
반응형

댓글