객체지향 프로그래밍 언어를 이용해 타입을 구현하는 가장 보편적인 방법은 클래스를 이용하는 것이다.
클래스는 타입을 구현하는 용도 외에도 코드를 재사용하는 용도로 사용되기도 한다.
클래스 외에도 인스턴스를 생성할 수 없는 추상 클래스나 인터페이스를 이용해 타입을 구현할 수도 있다.
일반적으로 동일한 범주에 속하는 객체는 동일한 클래스의 인스턴스여야 한다.
계층의 상위에 위치한 범주를 계층의 하위에 위치한 범주의 일반화라고 하고,
계층의 하위에 위치한 범주는 계층의 상위에 위치한 범주의 특수화라고 한다.
내연의 관점에서 특수한 타입을 일반적인 타입의 속성을 포함한다.
외연의 관점에서 서브타입은 슈퍼타입의 부분집합이다.
프로그래밍 언어를 이용해 일반화와 특수화 관계를 구현하는 가장 일반적인 방법은 클래스 간의 상속을 사용하는 것이다.
상속은 서브타이핑과 서브클래싱의 두 가지 용도로 사용될 수 있다.
서브클래스가 슈퍼클래스를 대체할 수 있는 경우 이를 서브타이핑이라고 한다.
서브클래스가 슈퍼클래스를 대체할 수 없는 서브클래싱이라고 한다.
서브타이핑은 설계의 유연성이 목표인 반면, 서브클래싱은 코드의 중복 제거와 재사용이 목적이다.
서브타이핑을 인터페이스 상속이라고 하고, 서브클래싱을 구현 상속이라고 한다.
일반화를 위한 서브타이핑은 특정 기대 집합에 대한 서브타입과 슈퍼타입 간의 구조적, 또는 행위적 순응 관계를 의미하며, 대체 가능성을 내포한다.
집합은 부품과 관련된 세부 사항을 시계 내부로 캡슐화해서 복잡성을 극복한다.
소프트웨어의 전체적인 구조를 표현하기 위해 관련된 클래스 집합을 하나의 논리적인 단위로 묶는 구성 요소를 패키지 또는 모듈이라고 한다.
패키지는 내부의 클래스들을 추상화한다.
'객체지향(Java)' 카테고리의 다른 글
Java 자바 기술면접 질문 정리 (2) (0) | 2023.01.24 |
---|---|
Java 자바 기술면접 질문 정리 (1) (0) | 2022.12.08 |
객체지향의 사실과 오해 부록A. 추상화 기법 (1) (0) | 2022.11.25 |
객체지향의 사실과 오해 4장. 역할, 책임, 협력 (0) | 2022.11.23 |