반응형
다형성(Polymorphism)
- 여러(poly) 모습(morph)을 가지는 것.
- 객체 지향에서는 여러 동작을 수행하는 단일 객체를 의미한다.
- 일반적으로 부모 객체를 자식 객체가 상속하는 방식으로 다형성을 구현하는데, 동일한 이름의 부모 객체 메서드를 자식 객체 특성에 따라 같은 이름이지만 다른 동작 방식으로 구현할 수 있다.
public class Timer {
public void start() { ... }
public void stop() { ... }
}
public interface Recharegeable {
void charge();
}
public class IotTimer extends Timer implements Rechargeable {
public void charge() { ... }
}
IotTimer it = new IotTimer();
it.start();
it.stop();
// IotTimer 객체를 Timer 타입에 할당
Timer t = it;
t.start();
t.stop();
// IotTimer 객체를 Rechargeable 타입에 할당
Rechargeable r = it;
r.charge();
위 코드에서 IotTimer 클래스는 Timer 클래스와 Rechargeable 인터페이스를 상속하고 있다. 따라서 IotTimer 클래스는 Timer 타입도, Rechargeable 타입도 된다. 그러므로 IotTimer 객체를 Timer 타입, Rechargeable 타입에도 할당 가능하다. 또한 IotTimer는 상속받은 Timer 클래스와 Rechargeable 인터페이스의 기능을 사용할 수 있다.
추상화(Abstraction)
- 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정.
- 추상화는 두 가지 방식으로 할 수 있다.(특정한 성질 뽑아내기, 공통 성질 뽑아내기)
클래스 생성 시 추상(abstract) 키워드로 클래스를 생성하면 추상 클래스가 생성된다. 추상 클래스에서는 추상 메서드(abstract method)와 콘크리트 메서드(concrete method)를 정의할 수 있다.
- 추상 메서드: 메서드 본문과 구현 내용이 없는 메서드.
- 콘크리트 메서드: 메서드 본문과 구현 내용이 있는 메서드.
추상 클래스는 인스턴스를 생성할 수 없다.(cannot be instantiated) 즉 추상 클래스의 객체를 생성할 수 없다는 의미.
위 이미지에서 알 수 있듯이 추상 클래스는 추상 클래스를 상속한 자식 클래스가 추상 클래스의 추상 메서드를 구체화하여 작업을 수행한다.
추상화를 해야 하는 시점
- 추상화는 의존 대상이 변경하는 시점에 하는 것이 좋다.
- 실제 변경/확장이 발생할 때 추상화를 하는 것이 좋다.
- 무턱대고 추상화를 하면 추상 타입이 증가하고, 복잡도가 증가하는 결과로 이어진다. 즉 아직 존재하지 않는 기능에 대한 이른 추상화를 주의해야 한다.
참고
https://www.learncomputerscienceonline.com/object-oriented-programming/
반응형
'Programming > 기초지식' 카테고리의 다른 글
[Chrome] 크롬 개발자 도구 다크 모드(Dark Mode) 변경 (0) | 2021.11.03 |
---|---|
[객체 지향] 상속보단 조립 (0) | 2021.10.22 |
[객체 지향] 캡슐화 연습 (0) | 2021.10.21 |
[객체 지향] 캡슐화(Encapsulation) (0) | 2021.10.21 |
절차지향과 객체지향 (0) | 2021.10.21 |