[객체지향의 사실과 오해] 3장

sarang_daddy·2023년 3월 5일
0

학습 👨‍🎓

목록 보기
4/4
post-thumbnail

추상화

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

  • 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화
  • 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거

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

지하철 노선도는 실제 이동 경로와 거리, 위치가 부정확하다.
승객은 위 정보들이 불필요하다. 출발지와 목적지 그리고 환승지 정보만 있으면 된다. 추상화란 이처럼 복잡성을 필요한 정보를 명확하고 쉽게 이해하기 위해 불필요한 부분은 생략하거나 감춤으로서 단순화 하는 것이다.

개념

위에서 학습한 추상화를 가지고 이상한 나라의 엘리스로 다시 들어가보자.
이상한 나라에 도착한 엘리스는 트럼프의 모습을 하고 있는 정원사들을 만난다.
그리고 트럼프의 모습을 가진 병사들, 왕자와 공주, 하객들, 왕과 여왕 등 다양한 객체들을 만나게 된다.

여기서 엘리스는 이들 모두를 "트럼프" 라는 단어 하나로 표현한다.
계급, 나이, 성격 등의 차이점은 무시한 채 "트럼프"라는 유사성을 기반으로 추상화하여 바라보고 있는 것이다.

수많은 객체들을 개별적인 단위로 취급하기에는 어려움이 많다.
엘리스 처럼 객체들의 공통점을 기반으로 객체들을 묶은 것을 개념(concept)라 한다.

개념을 이용하면 객체를 여러 그룹으로 분류 할 수 있다.
앞서 정원사, 병사, 왕, 여왕 모두 "트럼프"라는 그룹의 일원이 된다.
이들은 모두 트럼프(개념)의 일원(인스턴스)이다.

객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다.
개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다.

개념을 이용해 공통점을 가진 객체들을 분류 할 수 있다는 사실에 주목하라.

어떤 객체를 마주했을 때 객체에게 적용할 개념을 결정하는 것은
결국 해당 객체를 개념이 적용된 객체 집합의 일원으로 맞아들인다는 것을 의미한다. 어떤 객체가 개념에 적합하지 않을 경우 해당 객체는 해당 개념의 객체 집합에 포함되지 않을 것이다.

객체에 어떤 개념을 적용할 것인지를 결정하는 것은 결국 객체들을 개념에 따라 분류하는 것과 동일하다.
따라서 분류란 특정한 객체를 특정한 개념의 객체 집합에 포함시키거나 포함시키지 않는 작업을 의마한다.

개념은 분류를 가능하게 해주고 분류는 추상화를 위한 도구가 된다.

타입

타입은 앞서 학습한 개념의 수학적 용어다.
즉, 타입은 개념와 동일한 의미를 가지고 있다.

다만, 컴퓨터 내부로 들어오면서 조금 더 기계적인 의미로 바뀌게 된다.

데이터 타입

데이터는 0과 1로 메모리에 저장된다.
인간은 무수히 많은 0과 1을 보고 어떤 데이터인지 판단이 불가능하다.
이 혼돈의 0과 1의 세상을 다루기 위해 사람들은 데이터를 분류하기 시작했고,
연산이 가능한 데이터를 숫자형, 여러 문자로 구성되고 다른 문자와 연결되면 문자열형, 참/거짓으로 이야기 할 수 있다면 논리형으로 분류했다.

객체들의 공통점을 기반으로 묶은 것을 개념이라 한다면,
데이터들의 수행방식을 기반으로 묶은 것을 데이터 타입이라 할 수 있다.

객체와 타입

객체지향 프로그램을 작성할 때 우리는 객체를 일종의 데이터처럼 사용한다.
따라서, 객체를 타입에 따라 분류하고 그 타입에 이름을 붙이는 것은 결국 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것과 같다.

앞장에서 객체에서 중요한 것은 객체의 행동임을 학습했다.
객체의 상태는 행동의 결과로 초래된 부수효과를 쉽게 표현하기 위해 도입된 추상적인 개념일 뿐이다.

어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.

같은 타입에 속하는 객체는 행동만 동일하다면 서로 다른 데이터를 가질 수 있다.
여기서 동일한 행동이란 동일한 책임을 의미하며, 동일한 책임이란 동일한 메시지 수신을 의미한다. 따라서 동일한 타입에 속한 객체는 내부의 데이터 표현 방식이 다르더라도 동일한 메시지를 수신하고 이를 처리할 수 있다.

다시 엘리스의 이야기로 돌아가자.
앞서 엘리스는 수많은 객체들을 트럼프라는 타입으로 분류했다.

  • 객체들(트럼프)의 공통점을 추상화로 단순화하여 개념으로 분류 했다.
  • 개념은 타입과 같은 의미이며 각 객체(트럼프)들은 데이터라 할 수 있다.
  • 엘리스는 그들의 동일한 행동방식을 보고 트럼프라는 타입으로 분류했다.

객체를 결정하는 것은 행동이다. 데이터는 단지 행동을 따를 뿐이다.
객체가 동일한 타입으로 분류되기 위해서는 공통의 행동을 가져야만 한다.

슈퍼타입과 서브타입

엘리스가 분류한 트럼프라는 타입은 실제 트럼프와 같다고 할 수 있을까?
실제 트럼프는 납작하게 엎드리고, 뒤집혀진다는 행동을 가진다.
하지만, 엘리스가 분류한 트럼프는 납작하게 엎드리고, 뒤집혀지고, 걸어다닌다.
이를 정확히 분류한다면 "트럽프 인간"이라 할 수 있겠다.

  • 트럼프 : 납작하게 엎드릴 수 있고 뒤집어 질 수 있다.
  • 트럼프 인간 : 납작하게 엎으릴 수 있고 뒤집어 질 수 있고 걸어다닌다.

트럼프처럼 일반적인 타입을 슈퍼타입이라고 하고,
일반적인 트럼프보다 특수한 행동을 수행하는 트럼프 인간을 서브타입이라 한다.

여기서 중요한 점은 슈퍼,서브 타입의 결정 또한 행동에 의해 결정된다는 점이다.

  • 슈퍼타입은 서브타입을 포괄하는 더 큰 집합체다.
  • 슈퍼타입의 행동은 서브타입에게 상속된다.
  • 서브타입은 슈퍼타입의 행동을 가지며 특수한 행동을 더 가진다.
  • 서브타입은 슈퍼타입을 대체할 수 있다.

확실히 알고가기

3장까지 아래 내용만은 확실히 알고 넘어가자.

객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동이다.
'클래스'는 프로그래밍언어를 이용해 타입을 구현하는 하나의 방법일 뿐이다.

profile
한 발자국, 한 걸음 느리더라도 하루하루 발전하는 삶을 살자.

0개의 댓글