타입은 개념이다
타입은 개념과 통일하다. 따라서 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다. 어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다. 타입의 인스턴스는 타입을 구성하는 외연인 객체 집합의 일원이 된다.
타입에 관련된 중요한 2가지
첫째, 타입은 데이터가 어떻게 사용되는냐에 관한 것이다. 예를 들어 숫자형 데이터가 숫자형인 이유는 데이터를 +, -, *, / 등의 연산을 할 수 있기 때문이다. 나아가 문자열형 데이터는 두 데이터를 연결해 새로운 문자열을 만들 수 있고 데이터에 포함된 문자의 길이를 알 수 있기 때문에 문자열형 데이터이다. 여기서 중요한 것은 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정한다는 점이다.
둘째, 타입에 속한 데이터를 메모리에 어떠헥 표현하는지는 외부로부터 철저하게 감춰진다. 예를 들어 개발자는 숫자형 데이터에 적용할 수 있는 산술 연산자를 알고 있다면 메모리 내부에 숫자가 어떤 방식으로 저장되는지를 모르더라도 숫자형 데이터를 사용할 수 있다.
이 책에서는 프로그래밍 언어 관점에서 데이터 타입을 다음과 같이 정의하였다
데이터 타입은 메모리 안에 저장된 데이터터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타 데이터다. 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.
객체와 타입
전통적인 데이터 타입에서 이야기하는 타입과 객체지향의 타입 사이에 깊은 연관성이 있다. 실제로 객체지향 프로그램을 작성할 때 우리는 객체를 일종의 데이터처럼 사용한다. 그렇다면 객체는 데이터인가? 그렇지 않다. 다시 한번 강조하지만 객체에서 중요한 것은 객체의 행동이다. 객체를 창조할 때 가장 중요하게 고려해야 하는 것은 객체가 이웃하는 객체와 협력하기 위해 어떤 행동을 해야 할지를 결정하는 것이다. 즉, 객체가 협력을 위해 어떤 책임을 지녀야 하는지를 결정하는 것이 객체지향 설계의 핵심이다.
행동이 우선이다
같은 타입에 속한 객체는 행동만 동일하다면 어떻게 행동하는 지는 달라도 상관없다. 이는 같은 타입이더라도 서로 다른 데이터를 가질 수 있다는 것을 뜻하기도 한다. 이것은 다형성에 의미를 부여한다. 다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 뜻한다. 결과적으로 다형적인 객체들은 동일한 타입(또는 타입 계층)에 속한다.
따라서 훌륭한 객체지향 설계는 외부에 행동만을 제공하고 데이터는 행동 뒤로 감춰야 한다. 이 원칙을 흔히 캡슐화라고 한다.
타입의 계층
일반화/특수화, 슈퍼타입과 서브타입
트럼프 - 일반화, 슈퍼타입
트럼프 인간 - 특수화, 서브타입
일반화/특수화 기법은 동시에 분류가 적용된다.
클래스
클래스와 타입은 동일한 것이 아니다. 클래스는 그저 타입을 구현할 수 있는 여러 구현 메커니즘 중 하나일 뿐이다. 중요한 것은 객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동이라는 사실과 객체를 분류하기 위해 타입을 결정한 후 프로그램 언어를 이용해 타입을 구현할 수 있는 한 가지 방법이 클래스라는 사실이다.
'객체지향' 카테고리의 다른 글
객체지향의 사실과 오해(4-2) (0) | 2022.03.27 |
---|---|
객체지향의 사실과 오해(4-1) (0) | 2022.03.24 |
객체지향의 사실과 오해(3-1) (0) | 2022.03.24 |
객체지향의 사실과 오해(2-2) (0) | 2022.03.24 |
객체지향의 사실과 오해(2-1) (0) | 2022.03.24 |
댓글