다형성(Polymoriphism)
여러(poly) 모습(morph)을 갖는 것
객체 지향에서는 한 객체가 여러 타입을 갖는 것
추상화(Abstraction)
데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정
두 가지 방식의 추상화
- 특정한 성질 ex) 통화, 금액 을 'Money class'로 추상화할 수 있다.
- 공통 성질(일반화) ex) 삼성의 SL-M2XX, HP MXX 을 '프린터'로 추상화 할수 있다.
서로 다른 구현을 추성화 한다. 예를 들어
(SCP로 파일 업로드, HTTP로 데이터 전송, DB 테이블에 삽입) => 푸시 발송 요청으로 추상화할 수 있다.
타입 추상화
여러 구현 클래스를 대표하는 상위 타입 도출
기능에 대한 의미만 제공하고 구현은 제공하지 않아 어떻게 구현할지 알 수 없다 .
-> 구현을 제공하는 클래스를 콘크리트 클래스라고 한다.
예를 들어 추상 타입을 이용한 Notifier.class 가 있다고 했을 때
Notifier notifier = getNotifier(...);
notifier.notify(somenoti);
해당 기능의 구현을 감출 수 있고, 기능의 구현이 아닌 의도를 더 잘 드러내서 가독성이 좋다.
만약 콘크리트 클래스를 직접 사용한다면?
1. 주문 취소가 되면 Sms 를 보내는 로직이 있다.
2. 요구사항이 변경되어 추가적으로 kakaoPush도 보내야한다.
3. 주문 취소 되는 로직에 아래와 같이 추가된다.
if(pushEnabled){
kakaoPush.push();
} else {
smsSender.send():
}
주문 취소 로직이 변경되지 않았지만 안에 있는 sms, kakaoPush 등이 변경된다.
추상 타입 사용
공통점을 도출하여 추상 타입을 사용한다.
public void cancel(String ono){
// 주문 취소 처리
Notifier notifier = getNotifier(..);
norifier.notify(..);
}
private Notifier getNotifier(..){
if(pushEnabled)
return new KakaoNotifier();
else
return new SmsNotifier();
}
추상화는 의존 대상이 변경하는 시점에 한다.
추상화 -> 추상 타입 증가 -> 복잡도 증가
- 아직 존재하지 않는 기능에 대한 이른 추상화는 주의한다. -> 잘못된 추상화 가능성, 복잡도만 증가한다.
- 실제 변경, 확장이 발생할 때 추상화 시도
추상화를 잘 하려면 어떤걸 생각해야 할까?
구현을 한 이유가 무엇 때문인지 생각해야 한다.
예시)
기능 예시
- 클라우드 파일 통합 관리 기능 개발
- 대상 클라우드 - 드롭박스, 박스
- 주요기능 - 각 클라우드의 파일 목록 조회, 다운로드, 업로드, 삭제 ,검색
-> 추상화하지 않을 경우 대상 클라우드가 추가되었을 때 ( NCLOUD ) 다운로드, 업로드, 조회 등에 if block이 각각 늘어난다.
-> 하지만 아래와 같이 추상화를 해준다면 기능의 대한 코드 수정 없이 새로운 종류의 클라이드를 추가할 수 있다.
이러한 구조를 OCP 라고 한다. 확장에 열려 있고 수정엔 닫혀 있다.
'BASIC' 카테고리의 다른 글
HTTP , HTTPS (0) | 2022.02.23 |
---|---|
03. 객체 지향 프로그래밍 입문 - 상속, 의존 (0) | 2021.05.10 |
01. 객체 지향 프로그래밍 입문 - 객체와 캡슐화 (0) | 2021.05.07 |
08. HTTP 웹 기본 지식 - 캐시 기본 동작 (0) | 2021.05.06 |
07. HTTP 웹 기본 지식 - HTTP 헤더 개요 (0) | 2021.05.06 |