study with book

[객체지향의 사실과 오해] 3. 타입과 추상화

yjs3819 2021. 7. 23. 17:28
728x90

추상화란?

추상화란 어떠한 목적에 맞게 복잡한 현실을 단순화 하는 방법

추상화에는 두가지 차원이 존재한다.

  1. 사물들간의 공통점을 취하고 차이점을 버리는 일반화로 단순하게 만드는 것
  2. 중요한 부분을 강조하기위해서 사물의 세부사항을 제거하여 단순하게 만드는 것

즉 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것!

객체지향과 추상화

이상한나라의 엘리스에서의 트럼프 인간들

트럼프 정원사, 트럼프 병사, 트럼프 왕자, 트럼프 왕, 트럼프 왕자가 이상한나라의 엘리스에 존재한다.(토끼도 존재함)
이를 보고 엘리스는 기껏해야 트럼프에 불과해라고 한다.

트럼프 정원사, 트럼프 병사, 트럼프 왕자, 트럼프 왕, 트럼프 왕자를 트럼프라는 공통점만을 취해 단순화 한것이다.

여러 객체들을 공통점을 기반으로 그룹으로 나누어 단순화한것이다.!
트럼프 정원사, 트럼프 병사, 트럼프 왕자, 트럼프 왕, 트럼프 왕자 ----> 트럼프
토끼 ---> 토끼

엄청나게 많던 객체를 단 두개의 그룹으로 나누어 단순화하였다.

개념

공통점을 기반으로 객체들을 묶기위한 그릇, 틀을 개념이라한다.
트럼프 정원사, 트럼프 병사, 트럼프 왕자, 트럼프 왕, 트럼프 왕자와 같은 개념에 속한 객체를 개념의 인스턴스라고 한다.
트럼프 정원사, 트럼프 병사, 트럼프 왕자 .... 이러한 트럼프의 개념에 속한 객체들은 이제 트럼프 개념의 인스턴스라는 하나로 단순화된것이다.

개념의 세가지 관점

  1. 심볼 : 트럼프(개념을 가르키는 명칭)
  2. 내연 : 몸이 납작, 두손두발이 네모난 몸모서리에 달려있다.(개념의 완전한 정의)
  3. 외연 : 개념에 속하는 객체의 set!(집합) (트럼프 정원사, 트럼프 병사, 트럼프 왕자, 트럼프 왕, 트럼프 왕자 ...)

개념을 통해 공통점으로 객체들을 분류하는 것은 객체지향 세계에서 복잡성을 극복하는데 가장 기본적인 수단이다.

분류

분류란 객체에 특정한 개념을 적용하는 작업이다.
분류는 객체지향에서 가장 중요한 개념중 하나이다. 왜냐면 분류는 개발자들에게 정신적인 지도를 제공한다.

정신적인 지도란 복잡한 객체지향 세계에서 객체를 쉽게 찾고 조작할수 있는 인지능력

분류는 추상화를 위한도구!

분류는 위에서말한 추상화의 두가지 차원을 모두 사용한다.

  1. 트럼프 정원사, 트럼프 병사, 트럼프 왕자, 트럼프 왕, 트럼프 왕자간의 차이점은 버리고 공통점만 취해서 트럼프라는 하나의 개념으로 분류했다.(차원 1 사용)
  2. 트럼프 정원사, 트럼프 병사, 트럼프 왕자, 트럼프 왕, 트럼프 왕자의 각각의 세세한 세부사항을 제거하여 단순하게 만들었다.

즉, 분류는 객체들의 복작성을 극복하기위한 추상화의 도구이다.

분류를 통해서 복잡한 세상을 단순화할수있다.

타입

타입 = 개념
즉, 타입은 공통점을 기반으로 객체들을 묶기 위한 그릇이다.
타입에 포함되는 개체 = 타입의 인스턴스(= 개념의 인스턴스)

다시한번 강조하는 행동의 중요성

객체지향에서 하나의 기능이 구현되기 위해선 객체들간의 협력이 필요하다.
협력을 위해서 객체들은 행동을 한다.
객체지향 설계, 즉 객체를 창조하는 것중 가장 고려해야하는것은 이웃하는 객체와 협력을 하기위해 객체가 어떤 행동을 해야할지 결정하는것이다.
(= 객체가 협력을 위해서 어떤 책임을 지녀야 하는지 결정하는 것이 객체지향 설계의 핵심!)

객체는 행동이 상태를 결정한다.

객체와 타입

  1. 객체가 어떤 타입에 속하는지 결정하는 것은 객체가 수행하는 행동이다.
  2. 객체의 내부 상태는 외부로부터 철저히 감춰진다.

즉, 객체의 내부 데이터가 달라도 행동이 같으면 같은 타입의 객체이다.
객체의 내부 데이터가 같아도 행동이 다르면 다른 타입의 객체이다.

객체의 타입을 결정하는 것은 객체의 행동뿐!!!!!!!!!!

객체와 타입 그리고 다형성

다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답하는 능력이다.

객체의 타입이 같다 = 객체가 행동이 같다 = 객체가 할당받은 책임이 같다 = 객체가 수신하는 메시지가 같다. = 객체가 동일한 요청을 받는다.

즉, 객체가 다른 방식으로 응답하기 위해선 동일한 요청, 동일한 메시지를 수신해야하므로 다형적인 객체들은 타입이 같다

행동(책임)을 먼저 생각하라

추상화를 위해(복잡성을 낮추기 위해 = 단순화를 위해) 타입에따라 즉, 행동에 따라 객체를 분류하기 위해서는 당연하게도 행동을 먼저 고려해야한다.

행동 고려 -> 객체에 책임 할당 -> 책임에 맞는 데이터결정의 순서로 객체지향 설계하는 방법을 책임-주도 설계(Responsibility-Driven Design)
객체의 데이터먼저 생각하는 객체지향설계 방법을 데이터 주도 설계(Data-Driven Design)

데이터주도 설계의 단점을 개선하기 위해 책임주도 설계가 등장했다.

다시한번 강조하지만 객체를 결정하는 것은 행동이다. 상태(데이터)는 행동을 따를 뿐이다.

타입의 계층

일반화/특수화 관계
일반화 : 좀더 일반적인것(범위 더 넓음), 트럼프(외연은 더 많지만 내연-행동은 더적음)
특수화 : 좀더 특수한 것(범위 더 좁음), 트럼프 인간(외연은 더 적지만 내연-행동은 더 많음)
(일반화/특수화 관계를 결정하는 것은 객체의 행동이다. 상태가아니라!!!)

일반화/특수화 관계를 타입으로 끌어오면
일반화 : 좀더 일반적인 타입 = 슈퍼타입
특수화 : 좀더 특수한 타입 = 서브타입
(슈퍼타입, 서브타입도 객체의 행동에 의해 결정된다.)

일반화/특수화 관계는 세부적인 부분을 버려서 단순화하는 추상화 두번째 차원을 사용한 대표적인 예이다.
(일반화 : 트럼프인간의 특수한 행동은 버리고 트럼프의 행동에만 집중하는 추상화..)

즉, 일반화는 추상화의 도구이다.

분류와 일반화는 추상화의 도구이다.!(분류는 이전에서 확인했다.)

정적모델과 동적모델

정적모델 : 객체가 속한 타입의 정적인 모습을 표현한 모델
동적모델 : 객체가 살아움직이는 동안 상태가 어떻게 변하고 어떻게 행동하는지를 표현한 모델

즉, 타입은 정적모델로써 추상화를 가능하게한다.(정적모델이 동적모델보다 더 단순하기 때문에.)

타입은 추상화이다.

결론

  1. 객체를 분류하는 기준은 타입이다.(클래스는 타입을 구현하는 한가지 방법일 뿐 클래스에 매몰되지말자.)
  2. 타입을 나누는 기준은 객체가 수행하는 행동이다.
728x90