추상화
어떤 현상이나 구조를 더 명확하게 이해하거나 목적을 효과적으로 달성하기 위해, 불필요한 세부 사항을 생략하거나 감춤으로써 복잡도를 줄이는 방식.
예) 자동차 계기판은 차량의 모든 상태를 보여주지 않고, 속도나 연료량처럼 필요한 정보만 표시한다.
추상화 방법
- 공통점은 취하고 차이점은 생략하는 일반화
- 목적에 불필요한 디테일 제거
예시 1) 고양이, 강아지, 토끼는 생김새는 다르지만 '동물'이라는 공통 개념으로 묶는다. → 각각의 차이는 무시하고, 생명체, 움직임 같은 공통 속성만 취함.
예시 2) 스마트폰 지도 앱은 건물 색깔이나 간판 같은 정보는 제거하고, 길과 방향만 표시한다. → 길 찾기라는 목적에 집중한 추상화.
개념 (Concept)
공통점을 기준으로 객체들을 묶기 위한 틀.
예)
- '탈 것' → 자동차, 자전거, 기차, 비행기 등
- '과일' → 사과, 바나나, 포도 등
복잡한 현실을 개념 단위로 단순화해 이해할 수 있게 해준다.
개념을 적용한 객체의 정의
객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다.
개념이 객체에 적용됐을 때 객체를 개념의 인스턴트(instance)라고 한다.
타입 (Type)
개념과 동일하다.
타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다.
어떤 객체에 타입을 적용할 수 있을 때, 그 객체를 타입의 인스턴트라고 한다.
타입 시스템의 목적
데이터가 잘못 쓰이지 않도록 제약 조건을 부여하는 것. → 어떤 연산이 가능한지 결정한다.
예)
- 숫자형: +, -, *, /
- 문자열: +, len(), ...
핵심
- 어떤 연산자를 쓸 수 있느냐가 타입을 정의한다.
- 타입 내부 구현은 몰라도 된다. 가능한 연산만 알면 충분.
데이터 타입
메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이터
데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정
객체의 타입 판단 기준
- 행동이 기준이다. → 같은 행동을 할 수 있으면 같은 타입으로 본다.
예) 고양이, 강아지, 토끼 모두 '움직인다', '소리를 낸다'는 공통 행동 → 같은 타입(동물) - 내부 표현은 감춘다. → 행동을 수행할 수 있다면, 내부 상태 표현 방식은 상관없음.
부가 해석
- 같은 타입의 객체는 같은 행동 (=책임)을 수행한다.
- 같은 메시지를 받아 처리할 수 있어야 한다.
- 단, 내부 구현이나 응답 방식은 달라도 된다 → 다형성
- 외부엔 행동만 노출되고, 내부 데이터는 숨긴다 → 캡슐화
슈퍼타입 / 서브타입
![]() |
![]() |
- Supertype은 Subtype보다 일반적
- Subtype은 Supertype보다 특수함
- Subtype은 Supertype을 완전히 대체할 수 있어야 한다 → 리스코프 치환 원칙
'대체'란: 슈퍼타입이 쓰이는 자리에서 서브타입을 넣어도 시스템이 문제없이 작동해야 한다는 뜻.
→ Subtype은 Supertype의 행동을 모두 수행할 수 있어야 하며, 추가적인 행동도 가질 수 있음.
→ Supertype의 행동은 Subtype에게 자동 상속됨.
타입은 추상화다
타입: 시간에 따라 변하는 객체의 상태를 시간과 무관하게, 정적으로 다룰 수 있게 해주는 수단.
→ 불필요한 요소(시간, 상태 변화)를 제거하고 본질적 속성만 취함.
동적/정적 관점은 모두 다룰 수 있어야 한다.
정적 관점:
- 클래스 정의 시점
- 구조, 타입, 책임 정의
동적 관점:
- 실행 중 객체 상태 변화
- 디버깅, 메시지 전송 추적 등
클래스는 타입인가?
OOP에서 타입을 구현하는 일반적인 수단이 클래스임은 맞지만, 클래스가 타입 그 자체는 아니다.
→ 프로토타입 기반 자바스크립트 버전에서는 클래스가 존재하지 않았음
※ 본 글은 『객체지향의 사실과 오해』(조영호 저) 3장을 기반으로 학습 목적으로 요약한 글입니다.
※ 이 글은 책의 내용을 요약한 것으로, 원문 없이 읽을 경우 오해의 여지가 있을 수 있습니다. 정확한 이해를 위해 원서의 정독을 권장합니다.
'개발 관련 지식' 카테고리의 다른 글
객체지향의 사실과 오해 정리 - 5장. 책임과 메세지 (0) | 2025.04.26 |
---|---|
객체지향의 사실과 오해 정리 - 4장. 역할, 책임, 협력 (0) | 2025.04.23 |
객체지향의 사실과 오해 정리 - 2장. 이상한 나라의 객체 (0) | 2025.04.19 |
객체지향의 사실과 오해 정리 - 1장. 협력하는 객체들의 공동체 (0) | 2025.04.18 |
TDD는 정말 최고의 설계 도구일까? – Bob Martin vs Jim Coplien의 토론 정리 (0) | 2025.04.12 |