Skip to content

Commit e352720

Browse files
committed
[13장_김명석] 내용 정리
1 parent 1b70d26 commit e352720

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
### 상속의 용도
2+
3+
- **타입 계층**
4+
- 부모 클래스는 일반적인 개념을 구현하고 자식 클래스는 특수한 개념을 구현
5+
- 부모 클래스는 자식클래스의 **일반화**
6+
- 자식 클래스는 부모클래스의 **특수화**
7+
- 코드 재사용
8+
- 자식 클래스가 부모 클래스의 코드를 재사용할 수 있다
9+
10+
#### 객체기반 프로그래밍
11+
12+
- 상태와 행동을 캡슐화한 객체를 조합해서 프로그램을 구성하는 방식
13+
- 객체지향 프로그램도 객체기반 프로그래밍의 한 종류다
14+
- Visual Basic 은 객체라는 개념은 존재하지만 상속이나 다형성을 지원하지 않았다
15+
- 객체기반 프로그래밍
16+
17+
#### 객체지향 프로그래밍
18+
19+
- **상속****다형성**을 지원한다는 점에서 객체기반 프로그래밍과 차별화된다
20+
21+
### 타입
22+
23+
#### 개념 관점의 타입
24+
25+
> 우리가 인지하는 세상의 사물의 종류
26+
27+
- 타입은 **심볼, 내열, 외연** 으로 구성된다
28+
- 심볼
29+
- 타입에 이름을 붙인 것
30+
- 내연
31+
- 타입의 정의
32+
- 타입에 속하는 객체들이 가지는 공통적인 속성이나 행동
33+
- 외연
34+
- 타입에 속하는 객체들의 집합
35+
36+
#### 프로그래밍 언어의 관점의 타입
37+
38+
> 연속적인 비트에 의미와 제약을 부여하기 위해 사용
39+
> 비트 묶음에 의미를 부여하기 위해 정의된 제약과 규칙
40+
41+
- 타입에 수행될 수 있는 유효한 오퍼레이션의 집합
42+
- 객체의 타입에 따라 적용 가능한 연산자의 종류를 제한
43+
44+
- 타입에 수행되는 오퍼레이션에 대해 미리 약속된 문맥을 제공
45+
- 객체마다 같은 오퍼레이션에 대해 수행되는 연산이 달라진다
46+
47+
#### 객체지향 패러다임 관점의 타입
48+
49+
> 객체의 퍼블릭 인터페이스가 객체의 타입을 결정하며 동일한 퍼블릭 인터페이스를 제공하는 객체들은 동일한 타입으로 분류된다
50+
51+
- 개념 관점에서 타입이란 공통의 특징을 공유하는 대상들의 분류
52+
- 프로그래밍 언어 관점에서 타입이란 동일한 오퍼레이션을 적용할 수 있는 인스턴스들의 집합
53+
- 타입은 호출가능한 오퍼레이션의 집합을 정의
54+
- 오퍼레이션의 집합 = 퍼블릭 인터페이스
55+
56+
### 타입 계층
57+
58+
#### 타입 사이의 포함 관계
59+
60+
- 슈퍼타입
61+
- 계층을 구성하는 관계에서 더 일반적인 타입
62+
- 집합이 다른 집합의 모든 멤버를 포함한다
63+
- 서브타입
64+
- 계층사이에서 더 특수한 타입
65+
- 집합에 포함되는 인스턴스들이 더 큰 집합에 포함된다
66+
- 일반화
67+
- 어떤 타입의 정의를 좀 더 보편적이고 추상적으로 만드는 과정
68+
- 특수화
69+
- 어떤 타입의 정의를 좀 더 구체적이고 문맥 종속적으로 만드는 과정
70+
71+
### 서브클래싱과 서브타이핑
72+
73+
#### 언제 상속을 사용해야 하는가?
74+
75+
> 상속은 타입 계층을 구현하는 것
76+
77+
- 상속 관계가 is-a 관계를 모델링 하는가 ?
78+
- 자식클래스는 부모클래스다 라고 말해도 이상하지 않다
79+
- "원"은 "도형" 이다
80+
- is-a 관계가 항상 옳지는 않다
81+
- 펭귄은 새다
82+
- 새는 날 수 있다
83+
- 하지만 펭귄은 날 수 없다
84+
85+
- 클라이언트 입장에서 부모 클래스의 타입으로 자식 클래스를 사용해도 무방
86+
- 상속 계층을 사용하는 클라이언트 입장에서 부모 클래스와 자식 클래스의 차이점을 몰라야 한다
87+
- **행동 호환성** 이라고 부른다
88+
- 타입은 행동과 관련이 있다
89+
- 개념적으로 연관성이 있더라도 행동에 연관성이 없다면 is-a 관계를 사용하면 안된다
90+
- 설계가 꼭 현실의 세계를 반영할 필요는 없다
91+
92+
- 인터페이스 분리 원칙 (ISP)
93+
- 인터페이스를 클라이언트의 기대에 따라 분리하는 방식
94+
95+
#### 서브클래싱과 서브타이핑
96+
97+
- 서브 클래싱
98+
- 다른 클래스의 코드를 재사용할 목적으로 상속을 사용하는 경우
99+
- **구현 상속, 클래스 상속** 이라고도 부른다
100+
- 서브타이핑
101+
- 타입 계층을 구성하기 위해 상속을 사용하는 경우
102+
- **인터페이스 상속** 이라고도 부른다
103+
- 어떤타입이 다른 타입에 서브타입이 되기 위해서는 **행동 호환성**을 만족해야한다
104+
105+
### 리스코프 치환 원칙 (LSP)
106+
107+
> 서브타입은 그것의 기반 타입에 대해 대체 가능해야 한다
108+
109+
#### 클라이언트와 대체 가능성
110+
111+
- 직사각형과 정사각형
112+
- 직사각형 : 가로, 세로 길이가 다를 수 있다
113+
- 정사각형 : 가로 세로 길이가 다르면 안된다
114+
- Vector, Stack
115+
- Vector : 임의의 Index 에 접근이 가능하다
116+
- Stack : 임의의 Index에 접근해선 안된다
117+
- 대체 가능성을 결정하는 것은 클라이언트다
118+
119+
### 계약에 의한 설계와 서브타이핑
120+
121+
- 계약에 의한 설계
122+
- 클라이언트와 서버 사이의 협력을 의무와 이익으로 구성된 계약관점에서 표현
123+
- 서브타입이 리스코프 치환 원칙을 만족시키기 위해서는 클라이언트와 슈퍼타입 간에 체결된 **계약**을 준수 해야한다
124+
- 사전 조건
125+
- 클라이언트가 정상적으로 메서드를 실행하기위해 만족시켜야 하는 것
126+
- 사후 조건
127+
- 메서드가 실행된 후에 서버가 클라이언트에게 보장해야 하는 것
128+
- 클래스 불변식
129+
- 메서드 실행 전과 실행 후에 인스턴스가 만족시켜야 하는 것

0 commit comments

Comments
 (0)