>>추상화
>> 추상화를 통한 복잡성 극복
추상화 : 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러내는 과정
- 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법
- 추상화의 수준, 이익, 가치는 목적에 의존적
>> 방법 2가지
1) 일반화 : 공통점을 취하고 차이점을 버림
2) 불필요한 세부사항을 제거
>>개념 : 객체를 분류하는 기준
- 공통점을 기반으로 객체들을 묶기 위한 그릇
=> 개념을 기반으로 그룹으로 분류
=> 개념 그룹 ∋ 개체 : 개체를 개념의 인스턴스라고 함
>> 개념의 3가지 관점 : 심볼 / 내연 / 외연
- 심볼 : 개념을 가리키는 간략한 이름이나 명칭 ex) 트럼프
- 내연 : 개념의 완전한 정의 / 내연의 의미를 이용해 객체가 개념에 속하는지 확인 ex) 트럼프에 대한 설명
- 외연 : 개념에 속하는 모든 객체의 집합 ex) 정원사, 병사, 신하 등
>>분류
: 분류- 특정한 객체를 특정 개념의 객체 집합으로 포함시키는 작업
: 개발자에게 객체를 쉽게 찾고 조작할 수 있는 정신적 지도를 제공
>>타입 : 개념의 다른 말
- 타입은 개념이다.
: 우리가 인식하고 있는 다양한 사물이나 객체에 적용가능한 아이디어나 관념
: 어떤 객체에 타입을 적용할 수 있을 때, 그 객체를 타입의 인스턴스라 함
: 타입의 인스턴스 == 타입의 외연(객체 집합)의 일원
- 데이터 타입
: 사용 데이터의 용도와 행동에 따라 분류하는 것
= >타입 시스템 : 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것
1) 타입은 데이터가 어떻게 사용되느냐에 관한 것
: 특정 데이터다움을 구성하는 것은 데이터가 수행가능한 연산자로부터 결정됨
=> 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 타입을 결정
2) 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰짐
: 데이터 표현방식을 몰라도 괜찮음
: 연산자만을 알고 있다면 됨
>>객체와 타입 : 타입을 결정하는 것은 객체의 행동
: 객체를 타입에 따라 분류하고, 타입에 이름을 붙이는 것
== 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것
1) 객체의 타입을 결정하는 것은 객체의 행동이다. (다형성)
- 행동만 동일하다면 서로 다른 데이터를 가질 수 있다.
- 즉, 동일책임 == 동일 메시지 수신만 하면 같은 행동이며, 처리방식은 서로 다를 수 있다.
- 동일 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 뜻함
2) 객체의 내부적인 표현은 외부로부터 감춰진다.(캡슐화)
- 객체는 외부로 행동만을 제공하고 데이터는 감춰진다.
=> 행동에 따라 객체를 분류하기 위한 노력(책임-주도 설계: RDD)
1) 객체가 외부에 제공해야 하는 책임 -> 2) 그 책임에 필요한 행동 -> 3) 그 행동에 필요한 데이터
>>타입의 계층 : 일반화/특수화 관계
-일반화/특수화 관계
트럼프(super type) | 납작 업드릴 수 있고 뒤집어질 수 있다. | ||
트럼프 인간 (derived type) |
+) 길을 걸을 수 있다. |
=> 객체지향에서 일반화/특수화 관계를 결정하는 것은 객체의 데이터가 아닌 객체의 행동이다.
- 일반화된 타입 : 일반화된 공통행동
- 특수화된 타입 : 일반화된 공통행동 + 특수적인 추가행동
but, 타입의 내연(행동의 가짓수)와 타입의 외연(객체 집합의 크기)는 반대임
=> 일반 타입(super type)
외연 : 크다 >> 포괄적인 타입범위를 규정하므로 조건이 까다롭지 않으며 객체집합의 크기가 크다
내연 : 작다 >> 그러나, 수행가능한 행동은 공통행동에 한정되므로 행동의 가짓수는 작다
=> 특수타입(sub type)
외연 : 작다 >> 조건이 까다로운 만큼 객체집합의 크기는 작다.
내연 : 크다 >> 그러나, 수행가능한 행동의 가짓수는 공통행동+특수행동으로 많다.
=> 중요한 것은 super-sub의 관계는 객체의 행동에서 결정된다는 것
>> 정적 모델 : 타입의 목적(동적 모델의 정적화)
- 타입의 목적
: 시간에 따라 동적으로 변하는 상태를 시간과 무관한 정적인 모습으로 다루게 해줌
ex) 시간에 따라 키가 변하는 앨리스의 상태
=> 키가 변할 가능성에만 집중하여, 동적인 특성을 단순화
-동적모델 vs 정적모델
동적 모델 => 특정 시점에서 상태가 어떻게 변하고 어떻게 행동하는지 포착하는 것
ex) 스냅샷 / 객체 다이어그램
정적 모델 => 객체가 가진 모든 상태와 행동을 시간에 독립적으로 표현하는 것
ex) 타입모델(클래스)
- 클래스
: 객체지향 프로그래밍 언어에서 정적인 모델은 클래스를 이용해 구현됨
: 그러나, 타입 ≠ 클래스
=> 타입 : 객체를 분류할때 사용되는 개념
=> 클래스 : 객체를 구현하는 메커니즘 중 하나
[핵심 한마디]
객체를 분류하는 것은 타입이며,
타입을 결정하는 것은 객체의 행동이다.
'기술 서적 > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] ch5. 책임과 메시지 (1) | 2024.03.04 |
---|---|
[객체지향의 사실과 오해] ch4. 역할, 책임, 협력 (0) | 2024.03.01 |
[객체지향의 사실과 오해] ch2. 이상한 나라의 객체 / 상태 -행동 -식별자 (0) | 2024.01.17 |
[객체지향의 사실과 오해] ch1. 협력하는 객체들의 공동체/ 협력-역할-책임 (0) | 2024.01.16 |