일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 직장인점심
- 성수볼거리
- DesignPattern
- 클린코드
- 객체지향프로그래밍
- 독서일지
- 책읽기
- JavaScript
- 깨끗한코드
- 직장인
- 독서
- 책너두
- 상속
- 개발자
- 성수핫플
- 헤드퍼스트디자인패턴
- 성수
- IntelliJ
- 디자인패턴
- docker
- 주니어개발자
- 헤드퍼스트
- Linux
- 객체지향
- 성수맛집
- 코딩
- Java
- 성수직장인
- JAVA개발자
- 오브젝트
- Today
- Total
닭발개발
[오브젝트] 34일차. 436-446pg | 타입, 타입계층 본문
[오브젝트] 34일차. 436-446pg | 타입, 타입계층
D269 2023. 8. 10. 16:24
34일차.
오브젝트: 코드로 이해하는 객체지향 설계[6주차_목요일]
436-446pg
#요약
**Chapter 13. 서브클래싱과 서브타이핑**
- 13장의 목표 : 상속이 서브타입 다형성과 동적 메서드 탐색에 밀접하게 연관돼어 있음 알기.
- 객체기반 프로그래밍 : 상태와 행동을 캡슐화한 객체를 조합해서 프로그램을 구성하는 방식.
- 객체지향 프로그래밍 : 객체기반 프로그래밍의 한 종류, 상속과 다형성을 지원하지만 객체기반 프로그래밍은 지원하지 않음.
01. 타입
1) 개념 관점의 타입 : 우리가 인지하는 세상의 사물의 종류
- 우리가 인식하는 객체들에 적용하는 개념이나 아이디어
- 어떤 대상이 타입으로 분류될 때 그 대상을 타입의 인스턴스라고 부름
- 객체 : 타입의 인스턴스
- 타입은 심볼, 내연, 외연의 3가지 요소로 구성됨.
2) 프로그래밍 언어 관점의 타입
- 프로그래밍 언어 관점에서 타입은 연속적인 비트에 의미와 제약을 부여하기 위해 사용 됨.
- 비트에 담긴 데이터를 문자열로 다룰지, 정수로 다룰지는 전적으로 데이터를 사용하는 애플리케이션에 의해 결정됨.
- 프로그래밍 언어에서 타입의 목적
a. 타입에 수행될 수 있는 유효한 오퍼레이션의 집합을 정의함.
- 모든 객체지향 언어들은 객체의 타입에 따라 적용가능한 연산자의 종류를 제한함으로써 프로그래머의 실수를 막아준다는 것.
b. 타입에 수행되는 오퍼레이션에 대해 미리 약속된 문맥을 제공함.
=> 타입은 적용 가능한 오퍼레이션의 종류와 의미를 정의함으로써 코드의 의미를 명확하게 전달하고 개발자의 실수를 방지하기 위해 사용됨.
3) 객체지향 패러다임 관점의 타입
- 개념 관점에서 타입이란 공통의 특징을 공유하는 대상들의 분류.
- 프로그래밍 언어 관점에서 타입이란 동일한 오퍼레이션을 적용할 수 있는 인스턴스들의 집합
- 프로그래밍 언어의 관점과 객체지향 패러다임 관점을 조합해보면 객체의 타입이란 객체가 수신할 수신할 수 있는 메시지의 종류를 정의하는 것이다.
- 퍼블릭 인터페이스가 객체가 수신할 수 있는 메시지의 집합을 가리키는 말이다.
- 개념 관점에서 타입은 공통의 특징을 공유하는 대상들의 분류라고 했는데, 여기서 공통의 특징이란?
- 동일한 퍼블릭 인터페이스를 가지는 객체들은 동일한 타입으로 분류한다.
- 객체에게 중요한 건 속성이 아니라 행동이다.
- 어떤 객체들이 동일한 상태를 가지고 있어도 퍼블릭 인터페이스가 다르면 서로 다른 타입으로 분류된다.
- 객체의 타입을 결정하는 것은 내부 속성이 아니라 객체가 외부에 제공하는 행동이라는 것.
02. 타입의 계층
1) 타입 사이의 포함관계
- 타입은 객체들의 집합이라서 다른 타입을 포함하는 것이 가능함.
- 타입이 다른 타입에 포함될 수 있기 때문에 동일한 인스턴스가 하나 이상의 타입으로 분류되는 것도 가능함.
- 포함하는 타입은 외연 관점에서는 더 크고 내연 관점에서는 더 일반적이다. => 포함 관계로 연결된 타입 사이에 개념적으로일반화와 특수화 관계가 존재한다는 것을 의미
- 슈퍼타입 : 타입 계층을 구성하는 두 타입 간의 관계에서 더 일반적인 타입
- 서브타입 : 더 특수한 타입
- 내연의 관점에서 특수한 타입의 정의는 일반적인 타입의 정의를 좀 더 구체화한 것.
- 외연의 관점에서 일반적인 타입의 인스턴스 집합은 특수한 타입의 인스턴스 집합을 포함하는 슈퍼셋이다.
2) 객체지향 프로그래밍과 타입 계층
- 슈퍼타입이란 서브타입이 정의한 퍼블릭 인터페이스를 일반화시켜 상대적으로 범용적이고 넓은 의미로 정의한 것.
- 서브타입이란 슈퍼타입이 정의한 퍼블릭 인터페이스를 특수화시켜 상대적으로 구체적이고 좁은 의미로 정의한 것.
- 서브타입의 인스턴스는 슈퍼타입의 인스턴스로 간주될 수 있다.
03. 서브클래싱과 서브타이핑
- 타입을 구현하는 방법은 클래스를 이용하는 것이고 타입 계층을 구현하는 방법은 상속을 이용하는 것.
1) 언제 상속을 사용해야 하는가?
- 상속 관계가 is-a 관계를 모델링할 때
- 클라이언트 입장에서 부모 클래스의 타입으로 자식 클래스를 사용해도 무방할 떄
2) is-a 관계
- 어떤 타입 S가 다른 타입 T의 일종이라면 당연히 "타입 S는 타입 T다"라고 말할 수 있어야 한다.
- 타입 계층의 의미는 행동이라는 문맥에 따라 달라질 수 있다.
3) 행동 호환성
- 타입의 이름 사이에 개념적으로 어떤 연관성이 있다고 하더라도 행동에 연관성이 없다면 is-a 관계를 사용하지 말아야 함.
- 두 타입 사이에 행동이 호환될 경우에만 타입 계층으로 묶어야 한다.
- 호환여부를 판단하는 기준은 클라이언트의 관점이다.
'책책책 책을 읽읍시다‼ ver.개발 > [ 오브젝트: 코드로 이해하는 객체지향 설계 ]' 카테고리의 다른 글
[오브젝트] 37일차. 471-482pg | 실습위주 (0) | 2023.08.14 |
---|---|
[오브젝트] 35일차. 447-459pg | 인터페이스 분리 원칙, 서브클래싱, 서브타이핑, 리스코프 치환 원칙 (0) | 2023.08.11 |
[오브젝트] 33일차. 425-435pg | 상속과 위임, 프로토타입 (0) | 2023.08.09 |
[오브젝트] 32일차. 416-424pg | 상속, 동적타입, 정적타입, super와 self (0) | 2023.08.09 |
[오브젝트] 31일차. 403-415pg | 업캐스팅, 동적바인딩, 다운캐스팅 (0) | 2023.08.07 |