개발

[객체지향프로그래밍] 다형성과 추상화

Ridiss 2022. 5. 6. 08:49

다형성(Polymorphism)

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();

-----------------------------------------------------------

이처럼 다양한 형식으로 사용이 가능하게 됨.

 

추상화(Abstraction)

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