Java 개념

다형성

ron_nie 2024. 2. 19. 19:34
728x90

다형성?

하나의 객체가 여러가지 형태를 가질 수 있는 것을 의미한다.

다형성의 예시

import array.Calculator;
import pholimolphysm.CProgramer;
import pholimolphysm.JavaProgramer;
import pholimolphysm.Programer;

public class Main {
    public static void main(String[] args) {
        JavaProgramer java = new JavaProgramer();
        CProgramer c = new CProgramer();

        writeCode(java); // 자바 프로그램 만들기
        writeCode(c); // C언어 프로그래 만들기
    }

    public static void writeCode(Programer programer) {
        if (programer instanceof JavaProgramer) {
            System.out.println("자바 프로그램 만들기");
        } else if (programer instanceof CProgramer){
            System.out.println("C언어 프로그래 만들기");
        }
    }
}

위 예시는 만약에 새로운 타입의 프로그래머 클래스가 추가된다면 if문이 추가되어야 한다. 즉 유지보수성이 떨어진다.

인터페이스를 활용해서 수정해보자

public interface Programer {
    void writeCode();
}

공통적인 메서드를 인터페이스로 보낸다

package pholimolphysm;

public class JavaProgramer implements Programer{
    @Override
    public void writeCode() {
        System.out.println("자바 프로그램 만들기");
    }
}

그리고 인터페이스의 구현체들에게 가서 코드를 작성시켜준다

이렇게 하면 어떤 프로그래머가 오더라도 메서드 이름은 같지만 다른 실행을 줄 수 있을 것이다.

public static void writeCode(Programer programer) {
        programer.writeCode();
}

writeCode 메서드에는 실행만 시켜주면 된다.

정리

main 메서드에서 writeCode라는 메서드의 내부가 어떻게 되어있는지는 알필요 없고 그냥 실행만 시켜주면 되는 것이다(추상화) 즉 관심사의 분리를 시켜준다

CProgramer 입장에서도 writeCode가 외부에서 어떻게 사용되는지는 알필요 없고 그냥 호출하면 실행만 시켜주면 된다

반응형