객체지향의 사실과 오해 3장 : 타입과 추상화

일단 해볼게·2023년 6월 12일
0

book

목록 보기
3/13

추상화

  • 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법
  • 목적의존적
  • 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것
  • 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것

개념

  • 일반적으로 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념
  • 공통점을 기반으로 객체들을 묶기 위한 그릇
  • 객체에서 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 때 객체를 그 개념의 인스턴스라고 한다.

개념의 세가지 관점

  • 심볼(symbol) : 개념을 가리키는 간략한 이름이나 명칭
  • 내연(intension) : 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다.
  • 외연(extension) : 개념에 속하는 모든 객체의 집합

분류

  • 객체를 특정한 개념의 객체 집합에 포함시키거나 포함시키지 않는 작업

타입

  • 개념과 동일하다.
  • 특징
    • 타입은 데이터가 어떻게 사용 되느냐에 관한 것
      • 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정
    • 타입에 속한 데이터를 메모리에 어떻게 표현 하는지는 외부로부터 철저하게 감춰진다.
      • 데이터 타입의 표현은 연산 작업을 수행하기에 가장 효과적인 형태가 선택 되며, 개발자는 해당 데이터 타입의 표현 방식을 몰라도 데이터를 사용하는 데 지장이 없다.

객체의 타입

  • 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동
    • 어떤 객체들이 동일한 행동을 수행할 수 있다면 그 객체들은 동일한 타입으로 분류
  • 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
    • 객체의 행동을 가장 효과적으로 수행할 수만 있다면 객체 내부의 상태를 어떤 방식으로 표현하더라도 무방

다형성

  • 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력

캡슐화

  • 데이터의 내부 표현 방식과 무관하게 행동만이 고려 대상이라는 사실은 외부에 데이터를 감춰야 한다.

책임 - 주도 설계

  • 행동에 따라 객체를 분류하기 위해서는 객체가 내부적으로 관리해야 하는 데이터가 아니라 객체가 외부에 제공해야 하는 행동을 먼저 생각해야 한다
  • 이를 위해서는 객체가 외부에 제공해야 하는 책임을 먼저 결정하고 그 책임을 수행하는 데 적합한 데이터를 나중에 결정한 후, 데이터를 책임을 수행하는 데 필요한 외부 인터페이스 뒤로 캡슐화해야 한다.
  • 책임-주도 설계는 데이터를 먼저 생각하는 데이터-주도 설계 방법의 단점을 개선하기 위해 고안

일반화/특수화 관계

  • 관계를 결정하는 것은 객체의 상태를 표현하는 데이터가 아니라 행동이다.
  • 일반화 : 더 포괄적이라는 의미를 내포
    • 특수한 타입이 가진 모든 행동들 중에서 일부 행동만을 가지는 타입
    • 슈퍼타입이라고 한다.
  • 특수화 : 일반적인 개념보다 범위가 더 좁다.
    • 일반적인 타입이 가진 모든 타입을 포함하지만 거기에 더해 자신만의 행동을 추가하는 타입
    • 서브타입이라고 한다.
      • 슈퍼타입의 행위와 호환되기 때문에 서브타입은 슈퍼타입을 대체할 수 있어야 한다.

스냅샷

  • 객체가 특정 시점에 구체적으로 어떤 상태를 가지는지

동적 모델

  • 실제로 객체가 살아 움직이는 동안 상태가 어떻게 변하고 어떻게 행동하는지를 포착하는 것
  • 예시) 애플리케이션을 실행해 객체의 상태 변경을 추적하고 디버깅

타입 모델(정적 모델)

  • 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현
  • 예시) 객체지향 프로그래밍 언어를 이용해 클래스를 작성하는 시점

클래스

  • 타입을 구현하는 가장 보편적인 방법
  • 클래스는 타입과 동일하지 않다. → 클래스는 타입을 구현할 수 있는 여러 구현 메커니즘 중 하나 → JavaScript같은 프로토타입 기반의 언어에는 클래스가 존재하지 않는다.
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글