프로그래밍/JAVA

다형성 이해

Baesj 2021. 7. 13. 15:59

지금까지 공부하면서 이해한 다형성에 대한 설명이다.

추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다.

 

다형성

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