본문 바로가기

개발 관련 지식

객체지향의 사실과 오해 정리 - 3장. 타입과 추상화

추상화

어떤 현상이나 구조를 더 명확하게 이해하거나 목적을 효과적으로 달성하기 위해, 불필요한 세부 사항을 생략하거나 감춤으로써 복잡도를 줄이는 방식.

예) 자동차 계기판은 차량의 모든 상태를 보여주지 않고, 속도나 연료량처럼 필요한 정보만 표시한다.

추상화 방법

  1. 공통점은 취하고 차이점은 생략하는 일반화
  2. 목적에 불필요한 디테일 제거

예시 1) 고양이, 강아지, 토끼는 생김새는 다르지만 '동물'이라는 공통 개념으로 묶는다. → 각각의 차이는 무시하고, 생명체, 움직임 같은 공통 속성만 취함.

예시 2) 스마트폰 지도 앱은 건물 색깔이나 간판 같은 정보는 제거하고, 길과 방향만 표시한다. → 길 찾기라는 목적에 집중한 추상화.


개념 (Concept)

공통점을 기준으로 객체들을 묶기 위한 틀.

예)

  • '탈 것' → 자동차, 자전거, 기차, 비행기 등
  • '과일' → 사과, 바나나, 포도 등

복잡한 현실을 개념 단위로 단순화해 이해할 수 있게 해준다.

 

개념을 적용한 객체의 정의

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

타입 (Type)

개념과 동일하다.
타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다.
어떤 객체에 타입을 적용할 수 있을 때, 그 객체를 타입의 인스턴트라고 한다.

타입 시스템의 목적

데이터가 잘못 쓰이지 않도록 제약 조건을 부여하는 것. → 어떤 연산이 가능한지 결정한다.

예)

  • 숫자형: +, -, *, /
  • 문자열: +, len(), ...

핵심

  1. 어떤 연산자를 쓸 수 있느냐가 타입을 정의한다.
  2. 타입 내부 구현은 몰라도 된다. 가능한 연산만 알면 충분.

데이터 타입

메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이터
데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정

객체의 타입 판단 기준

  1. 행동이 기준이다. → 같은 행동을 할 수 있으면 같은 타입으로 본다.
    예) 고양이, 강아지, 토끼 모두 '움직인다', '소리를 낸다'는 공통 행동 → 같은 타입(동물)
  2. 내부 표현은 감춘다. → 행동을 수행할 수 있다면, 내부 상태 표현 방식은 상관없음.

부가 해석

  • 같은 타입의 객체는 같은 행동 (=책임)을 수행한다.
  • 같은 메시지를 받아 처리할 수 있어야 한다.
  • 단, 내부 구현이나 응답 방식은 달라도 된다 → 다형성
  • 외부엔 행동만 노출되고, 내부 데이터는 숨긴다 → 캡슐화

슈퍼타입 / 서브타입


 

  • Supertype은 Subtype보다 일반적
  • Subtype은 Supertype보다 특수함
  • Subtype은 Supertype을 완전히 대체할 수 있어야 한다 → 리스코프 치환 원칙

'대체'란: 슈퍼타입이 쓰이는 자리에서 서브타입을 넣어도 시스템이 문제없이 작동해야 한다는 뜻.

→ Subtype은 Supertype의 행동을 모두 수행할 수 있어야 하며, 추가적인 행동도 가질 수 있음.

→ Supertype의 행동은 Subtype에게 자동 상속됨.


타입은 추상화다

타입: 시간에 따라 변하는 객체의 상태를 시간과 무관하게, 정적으로 다룰 수 있게 해주는 수단.

→ 불필요한 요소(시간, 상태 변화)를 제거하고 본질적 속성만 취함.


동적/정적 관점은 모두 다룰 수 있어야 한다.

정적 관점:

  • 클래스 정의 시점
  • 구조, 타입, 책임 정의

동적 관점:

  • 실행 중 객체 상태 변화
  • 디버깅, 메시지 전송 추적 등

클래스는 타입인가?

OOP에서 타입을 구현하는 일반적인 수단이 클래스임은 맞지만, 클래스가 타입 그 자체는 아니다.

→ 프로토타입 기반 자바스크립트 버전에서는 클래스가 존재하지 않았음

 

 

※ 본 글은 『객체지향의 사실과 오해』(조영호 저) 3장을 기반으로 학습 목적으로 요약한 글입니다.

※ 이 글은 책의 내용을 요약한 것으로, 원문 없이 읽을 경우 오해의 여지가 있을 수 있습니다. 정확한 이해를 위해 원서의 정독을 권장합니다.