[책읽기] 객체지향의 사실과 오해 - 3장

Haiseong Jeong·2023년 10월 20일
2
post-thumbnail

3장 : 타입과 추상화

영국의 지하철 노선도

  • 기존의 지하철 노선도는 실제 물리적 지형과 거리를 반영해 만들어 노선도를 이해하기 어려웠음
  • 새로 만든 노선도는 지형적 특징을 버리고 역과 역 사이의 연결성에 집중해 만듬
  • 단순하고 목적에 부합하는 지하철 노선도 탄생
  • 이것이 추상화

추상화를 통한 복잡성 극복

  • 추상화 :
    • 현실에서 출발해 불필요한 부분을 도려내며 사물의 본질을 드러내는 과정
    • 더 명확히 이해하기 위해 의도적으로 생략한것
      • 두가지 차원으로 이루어짐
      • 첫번째 : 사물간의 공통점은 취하고 차이점은 버려 일반화를 단순하게 만듬
      • 두번때 : 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거해 단순하게 만듬
    • 결론적으로 추상화는 단순화

앨리스와 트럼프 카드들 이야기

하트 여왕의 행렬이 정원에 들어섰다. 동시에 세명의 트럼프 정원사는 땅바닥에 얼굴이 닿을 정도로 납잡 업드렸다. 행렬의 맨앞에서 클로버를 든 열명의 병사들이 행진해 들어왔다. 그 속에는 하트 잭, 토끼, 다른 신하들이 있었고 마지막으로 하트 여왕이 모습을 드러냈다... (내가 많이 요약해버림) ... 앨리스는 여왕을 쳐다보며 마음속으로 이렇게 속샀였다. '기껏해야 트럼프에 불과해. 무서워할 필요 없어.'

  • 많은 객체가 등장함 (정원사들, 클로버 병사들, 하트 잭, 토끼, 신하들, 히트 퀸, 앨리스)
  • 마지막 대사에 집중해야함 ('기껏해야 트럼프에 불과해. 무서워할 필요 없어.')
  • 이 말은 토끼를 제외한 모든 객체를 트럼프로 단순하게 생각해 버리는 추상화를 한것임
  • 트럼프라는 공통점만 보고 차이점은 무시해버림

그룹으로 나누어 단순화하기

  • 정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸 모두 구별 가능함
    -> 객체의 성질 가짐
  • 하지만 이들을 싸잡아 트럼프라고 부를수 있는 이유는 공통점이 있기 때문이다.
  • 토끼는 이들과 공통점이 없어 트럼프가 아니다.

개념

  • 사람들은 본능적으로 공통적인 특성을 기준으로 객체를 여러 그룹으로 묶어버린다.
  • 객체들을 묶기 위한 그릇을 개념(concept) 라고한다. (자동차, 모니터, 등등)
  • 앨리스는 정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸을 트럼프라는 개념으로 추상화 했다.
  • 개념을 이용하면 객체를 여러 그룹으로 분류(classification) 할 수있다.
  • 개념 그룹의 일원을 개념의 인스턴스(instance)라고 한다.

개념의 세 가지 관점

  • 심볼(symbol) : 개념을 가리키는 간략한 이름이나 명칭 (트럼프)
  • 내연(intension) : 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다. (몸이 납작하고 손발이 네모난 몸 모서리에 달려있음)
  • 외연(extension) : 개념에 속하는 모든 객체의 집합(set) (정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸)
  • 이 세가지 관점은 객체를 분류할 수 있는 지침을 제공한다.
  • 분류는 객체지향의 가장 중요한 개념 중 하나다.

분류는 추상화를 위한 도구

  • 앞서말한 추상화의 두가지 차원
    • 첫번째 : 사물간의 공통점은 취하고 차이점은 버려 일반화를 단순하게 만듬
    • 두번때 : 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거해 단순하게 만듬
    • 정원사들, 클로버 병사들, 하트 잭, 신하들, 히트 퀸을 한 그룹에 묶은 경우는 첫번째 관점으로 공통점을 취한것

타입

  • 타입(type)과 개념은 같은말이다.
  • 그러나 메모리 안에서는 0과 1만 존재하기에 질서가 없다.
  • 그래서 메모리의 데이터에 특정한 의미를 부여한다.
  • 타입은 메모리의 0과 1에 대해서 수행 가능한 작업과 불가능한 작업을 구분함으로써 데이터가 잘못 사용되는 것을 방지한다.
    • 중요한 사실 1 : 타입은 데이터가 어떻게 사용되느냐가 중요하다.
    • 중요한 사실 2 : 타입에 속한 데이터를 메모리에 어떻게 표현하는지 철저하게 감춰진다.
  • 타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이터다.
  • 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.

객체와 타입

  • 객체는 데이터가 아니다.
  • 객체에게 중요한것은 행동이다.
  • 객체가 협력을 위해 어떤 책임을 지녀야 하는지를 결정하는게 객체지향의 설계의 핵심히다.
    • 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.
    • 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
  • 객체를 타입으로 분류할 때 사용해야 하는 기준은 행동뿐이다.

트럼프 인간

  • 사실 엘리스는 히트 퀸을 트럼프가 아니라 트럼프 인간으로 봤을 것이다.
  • 트럼프 인간은 트럼프가 할 수 있는모든걸 할 수 있지만 좀더 특화된 행동을 할 수 있다.
  • 따라서 트럼프 인간은 트럼프의 부분집합니다.

일반화/특수화 슈퍼타입/서브타입

  • 일반적인 타입 : 특수한 타입이 가진 모든 행동들 중에서 일부 행동만을 가지는 타입 (트럼프) (슈퍼타입)
  • 특수한 타입 : 일반적인 타입이 가진 모든 행동을 포함하지만 거기에 더해 자신만의 행동을 추가하는 타입 (트럼프 인간) (서브타입)
  • 외연의 수 : 일반적인 타입 > 특수한 타입
  • 행동의 수 : 일반적인 타입 < 특수한 타입

타입의 목적

  • 객체의 복잡성을 극복하기가 너무 어렵기 때문이다.
  • 하지만 타입은 시간에 따라 동적으로 변하는 앨리스의 상태를 시간과 무관한 정적인 모습으로 다룰수 있게 해준다.
  • 결론적으로 타입은 추상화다.

동적 모델과 정적 모델

  • 객체지향 애플리케이션을 설계하고 구현하기 위해서는 객체관점의 동적 모델과 객체를 추상화한 타입 관점의 정적 모델을 적절히 혼용해야 한다.

클래스

  • 객체지향 프로그래밍 언어에서 정적인 모델은 클래스를 이용해 구현된다.
  • 타입을 구현하는 가장 보편적 방법은 클래스다.
  • 클래스와 타입은 동일하지 않다. 클래스는 타입을 구현하는 메커니즘들 중 하나이다.
profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글