타입과 추상화
때로는 정보의 정확성보다 그 목적에 집중하는 게 더 좋은 결과를 낼 수 있다.
추상화(Abstraction)란 현실에서 출발하되 불필요한 부분을 도려 내가면서 사물의 진정한 본질을 드러나게 하는 과정이다.
모든 경우, 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이다.
추상화는 2가지 차원에서 이루어진다.
1. 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만든다.
2. 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거하여 단순하게 만든다.
객체지향 패러다임은 객체라는 추상화를 통해 현실의 복잡성을 극복한다.
개념(concept)
: 공통점을 기반으로 객체들을 묶기 위한 그릇. ex) 인간, 교통수단, 식물
- 개념을 이용하면 객체를 여러 그룹으로 분류할 수 있다.
- 객체가 특정 개념 그룹의 멤버가 될 때 그 객체를 개념의 인스턴스(instance)라 한다.
개념의 3가지 관점
- 심볼(symbol) : 개념을 가리키는 간략한 이름이나 명칭
- 내연(intension) : 개념의 완전한 정의
- 외연(extension) : 개념에 속하는 모든 객체의 집합
타입(Type)
개념은 객체들의 복잡성을 극복하기 위한 추상화 도구이며 컴퓨터 공학자들은 이를 타입이라는 용어로 지칭하였다.
개념과 타입은 근본적으로 동일하지만 타입은 컴퓨터 내로 들어오면서 좀 더 기계적인 의미로 윤색되게 된다.
객체는 행위에 따라 변하는 상태를 가지고 있다. 애플리케이션 내부 모든 객체의 상태를 모으면 결국 애플리케이션 전체 데이터를 표현할 수 있게 된다. 그렇다면 객체는 데이터인가? 아니다. 객체에서 중요한 것은 상태가 아닌 행동이다. 상태는 행동의 결과의 효과를 표현하기 위한 추상적인 개념이다.
객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 동일한 타입에 속한다.
즉, 객체 타입 분류의 기준은 객체의 행동이다.
동일한 타입의 객체는 내부의 데이터 표현 방식이 다르더라도 동일한 메시지를 수신하고 처리할 수 있다.
- > 다형성(polymorphism)을 의미 : 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력.
데이터의 내부 표현 방식과 무관하게 행동만이 고려 대상이라는 사실은 외부에 데이터를 감춰야 한다는 것을 의미한다.
- > 캡슐화(encapsulation)를 의미 : 공용 인터페이스 뒤로 데이터를 숨기는 것.
책임 주도 설계(Responsibility driven design)
: 객체가 외부에 제공해야 하는 책임을 먼저 결정하고 그 책임을 수행하는 데 적합한 객체를 결정한 후, 데이터를 캡슐화하는 객체지향 설계 방법.
- 객체가 협력을 위해 어떤 책임을 지녀야 하는지를 결정하는 것이 객체지향 설계의 핵심이다.
협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다.
일반화/특수화(generalization/specialization)
일반화 : 일반적인 행동을 하는 개념.
특수화 : 일반적인 개념보다 좀 더 특화된 행동을 하는 특수한 개념.
- 일반화/특수화 관계를 결정하는 것은 객체의 상태가 아닌 객체의 행동이다.
- 일반적인 타입은 특수한 타입보다 더 적은 수의 행동을 가진다. 특수한 타입은 일반적인 타입의 모든 행동을 포함하며 추가로 자신만의 행동을 할 수 있기 때문.
- 특수하다는 것은 일반적인 개념보다 범위가 좁다.
일반적인 타입을 슈퍼 타입(Supertype), 특수한 타입을 서브타입(Subtype)이라고 한다.
- 어떤 타입이 다른 타입의 서브타입이 되기 위해서는 행위적 호환성을 만족시켜야 한다.
- 즉, 서브타입은 슈퍼 타입을 대체할 수 있어야 한다. -> SOLID 리스코프 치환 원칙 (https://hyobn.tistory.com/9)
클래스와 타입은 동일한 것이 아니다.
타입은 객체를 분류하기 위해 사용하는 개념이고,
클래스는 타입을 구현할 수 있는 여러 구현 방법 중 하나이다.
'Book Report' 카테고리의 다른 글
카이스트 미래전략 2022 (0) | 2022.01.28 |
---|---|
양자컴퓨터의 이해 (0) | 2022.01.27 |
객체지향의 사실과 오해 - 1,2장 (0) | 2022.01.23 |
운의 알고리즘 (0) | 2022.01.06 |
단 1줄로 사로잡는 전달의 법칙 (0) | 2021.12.26 |