지금까지 공부하면서 이해한 다형성에 대한 설명이다.
추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다.
다형성
1. 객체 지향에서는 한 객체가 여러 타입을 갖는 것
2. 하나의 메소드가 다양한 방법으로 동작하는 것 - 오버로딩, 오버라이딩
1. 객체 지향에서는 한 객체가 여러 타입을 갖는 것
역할과 구현의 관점에서 worker와 키보드를 가지고 예를 들어보자.
worker역할 - 키보드 역할(인터페이스) - 기계식 키보드(구현)
- 무접점 키보드(구현)
- 일반 키보드(구현)
새로운 키보드가 나와도 키보드의 역할을 할 수 있으면 새로운 키보드를 만들 수 있다.(확장에 용이하다)
worker(클라이언트)에게 영향을 주지 않고 새로운 기능을 제공 할 수 있다.
또한, worker가 일하기 전에(실행 시점)에서 유연하게 키보드를 변경할 수 있다.
interface Keyboard {
}
class MechanicalKeyboardImpl implements Keyboard{
//기계식 키보드
}
class CapacitiveKeyboardImpl implements Keyboard{
//무접점키보드
}
class NormalKeyboardImpl implements Keyboard {
//일반키보드
}
class Worker {
private Keyboard keyboard;
public Worker(Keyboard keyboard) {
this.keyboard = keyboard;
}
}
public class ExPoly {
public static void main(String[] args) {
// Keyboard keyboard = new MechanicalKeyboardImpl();
// Keyboard keyboard = new CapacitiveKeyboardImpl();
Keyboard keyboard = new NormalKeyboardImpl(); //OCP 원칙에 위배됨 - 키보드를 바꾸기 위해 클라이언트 코드를 수정하기 때문
Worker worker = new Worker(keyboard); //worker에 영향을 주지 않고 keyboard를 바꿀 수 있다
}
}
2. 하나의 메소드가 다양한 방법으로 동작하는 것 - 오버로딩, 오버라이딩
여기서 더 나아가서 메소드 관점에서 보면 키보드는 누르는 행위를 한다.
여기서 ESC를 누르면 취소가되고, ENTER를 누르면 어떤것을 실행하거나 들어갈 수 있다.
같은 행위(누르는 행위)를 하지만 다른 결과를 나타낼 수 있다.
'프로그래밍 > JAVA' 카테고리의 다른 글
객체 지향 5대 원칙 (SOLID 원칙) (0) | 2021.07.14 |
---|---|
캡슐화 이해 (0) | 2021.07.13 |
연산자 (0) | 2021.06.30 |
JAVA 형변환 (0) | 2021.06.24 |
JAVA 데이터 타입 (0) | 2021.06.24 |