A. 여러(poly) 모습(morph)을 갖는 것
B. 객체 지향에서는 한 객체가 여러 타입을 갖는 것
- 즉 한 객체가 여러 타입의 기능을 제공
- 타입 상속으로 다형성 구현
- 하위 타입은 상위 타입도 됨
다형성 예 ---------------------------------------------------
public class Timer {
public void start() {...};
public void stop() {...};
}
public interface Rechargeable {
void charge();
}
public class IotTimer
extends Timer
implements Rechargeable {
public void charge() {
...
}
}
IotTimer it = new IotTimer();
it.start();
it.stop();
Timer t = it;
t.start();
t.stop();
Rechargeable r = it;
r.charge();
-----------------------------------------------------------
이처럼 다양한 형식으로 사용이 가능하게 됨.
A.데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정
B.두 가지 방식의 추상화
- 특정한 성질, 공통 성질(일반화)
C.간단한 예
- DB의 User 테이블 : 아이디, 이름, 이메일
- Money클래스 : 통화, 금액
- 프린터 : HP Mxxx, 삼성 SL-Mxxxx
- GPU : 지포스, 라데온
타입 추상화
A. 여러 구현 클래스를 대표하는 상위타입 도출
- 흔히 인터페이스 타입으로 추상화
- 추상화 타입과 구현은 타입 상속으로 연결
추상 타입 사용
A.추상 타입을 이용한 프로그래밍
Notifier notifier = getNotifier(...);
notifier.notify(someNoti);
B.추상 타입은 구현을 감충
- 기능의 구현이 아닌 의도를 더 잘 드러냄
추상 타입 사용에 따른 이점: 유연함
A.콘크리트 클래스를 직접 사용하면
B.추상화 사용
좀 더 추상화시
추상화 결과 : 사용 대상 변경 유연함
추상화는 의존 대상이 변경하는 시점에
A.추상화 -> 추상 타입 증가 -> 복잡도 증가
- 아직 존재하지 않는 기능에 대한 이른 추상화는 주의: 잘못된 추상화 가능성, 복잡도만 증가
B.실제 변경-확장이 발생할 때 추상화 시도
추상화를 잘 하려면
A.구현을 한 이유가 무엇 떄문인지 생각해야 함
**출처
인프런 객체지향 프로그래밍 최범균님 강의
REST API에 Under_Score(_)? Hyphen(-)? (0) | 2023.05.18 |
---|---|
[Git] commit 되돌리기 (0) | 2022.09.02 |
[객체지향프로그래밍] 객체, 캡슐화 (0) | 2022.04.28 |
[객체지향프로그래밍] 의존과 DI (0) | 2022.04.15 |
디자인패턴 (0) | 2022.03.31 |