본문 바로가기
더 좋은 개발자 되기/개발자 책읽기

[개발자 책 읽기] 객체지향의 사실과 오해-조영호 (3장 타입과 추상화)

by Wonit 2021. 4. 8.

[개발자 책읽기] 객체지향의 사실과 오해-조영호 (3장 타입과 추상화)

해당 글은 조영호님의 객체지향의 사실과 오해 역할, 책임, 협력, 관점에서 본 객체지향 라는 책을 읽고 학습한 내용을 정리 및 회고하는 글 입니다. 자세한 사항은 YES 24 객체지향의 사실과 오해 에서 확인해주세요.

객체지향의 사실과 오해 - 역할, 책임, 협력 관점에서 본 객체지향 (조영호)

  • 위키북스
  • 지은이: 조영호
  • 펴낸이: 박찬규, 엮은이: 이대엽, 디자인: 북누리
  • 1쇄 발행: 2015.06.17


이번 장에서 이야기하고자 하는 것

  • 추상화
    • 어떤 양상, 세부사항, 구조를 더 명확히 이해하기 위해 의도적으로 생략, 감추는 방법
    • 2가지 차원으로 이루어짐
      1. 구체적인 사물들 간의 공통점은 취하고 차이는 버린다.
      2. 중요한 부분은 강조하기 위해 불필요한 사항은 제거한다.
    • 이런 두가지 특징으로 추상화를 단순하게 만듦
    • 추상화는 복잡성을 이해하기 쉬운 수준으로 단순화 하기가 목적임
  • 객체지향과 추상화
    • 객체지향의 추상화도 위의 두 단계를 근간으로 함
      • 공통적인 특성을 기준으로 객체를 그룹으로 묶어 동시에 다뤄야할 가지 수를 줄임
        • 이를 위해 개념분류를 이용
          • 개념 (concept): 우리가 인식하는 다양한 객체에 적용할 수 있는 아이디어 및 특징
          • 분류 (classsification): 개념을 이용하여 묶은 그룹
  • 개념의 세 가지 관점
    • 객체를 분류 (classification) 하기 위해서 사용하는 개념에는 3가지 관점이 있음
      • 심볼 (symbol) : 개념을 가리키는 간략한 이름
      • 내연 (intension) : 개념의 완전한 정의
      • 외연 (extension) : 개념에 속하는 모든 객체의 집합
    • 이러한 개념을 이용해서 우리는 분류를 할 수 있음
  • 객체를 분류하기 위한 틀
    • 분류란 특정 객체를 특정한 개념의 집합으로 포함시키거나 그렇지 않는 작업
    • 우리는 객체를 안전하고 적절하게 분류하기 위해서 인지능력과 직관이 필요
  • 타입
    • 타입 : 공통점을 기반으로 객체들을 묶기 위한 틀
    • 개념을 프로그래밍 세계에서 부르는 용어
    • 타입 시스템
      • 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것
  • 객체와 타입
    • 객체지향에서 객체를 일종의 타입으로 사용함
      • 객체는 데이터 타입이 아님. 객체는 특정 상황(행동)에 따라 변화할 데이터 들(상태)을 모아놓은 데이터 타입일 뿐
  • 행동이 우선이다
    • 객체가 어떠한 행동을 하느냐에 따라서 객체의 타입이 결정됨
    • 객체 내부의 표현 방식이 다르더라도 어떠한 객체들이 동일하게 행동한다면 그 객체들은 동일한 타입
      • 같은 타입에 속한 객체는 행동만 동일하면 서로 다른 데이터를 가질 수 있음
      • 동일한 행동 == 동일한 책임
        • 이는 다형성과 결부
  • 일반화/특수화 관계
    • 어떤 행동을 포괄하는 개념에서 좀 더 특수한 행동을 하는 관계
      • ex) 일반화/특수화 : 남자(일반화) -> 군인(특수화)
      • 일반화와 특수화는 동시에 일어남
    • 특수화를 결정하는 것은, 특수한 데이터를 갖고 있음이 아니고 특수한 행동을 할 때 결정함
  • 슈퍼타입과 서브타입
    • 슈퍼타입 : 일반화된 타입
    • 서브타입 : 특수화된 타입
  • 타입의 목적
    • 인간의 인지 능력으로는 시간에 따라 동적으로 변하는 객체의 복잡성을 극복하기 위해
    • 타입에는 (정적 타입, 동적 타입)두 가지 타입이 존재

나의 해석과 회고

잘 알다 싶이 이 책의 제목은 객체지햐의 사실과 오해다.


지난 시간 까지? 지난 시간 중반 까지 객체지향의 오해를 다뤘다고 생각한다.


하지만 이번 시간에는 객체지향의 사실에 대해서 이야기 하고 있다.


자칫 뻔하게 넘어갈법도 한 타입을 이렇게 깊고 철학적으로 설명한다는 것은 나에게 매우 감명깊었다.


내가 책을 많이 읽지는 않아서인지, 그 어떤 책에서도 타입을 이렇게 설명하는 책은 없었다.


그에 따라서 자연스럽게 나는 타입에 대한 이해를 잘못 혹은 많이 부족하게 하고있었다.


타입의 인스턴스는 동적으로 언제든지 변할 수 있지만 이를 정적으로 울타리를 쳐준다는 의미가 새로웠다.

댓글