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가 외부에서 어떻게 사용되는지는 알필요 없고 그냥 호출하면 실행만 시켜주면 된다
반응형
'Java 개념' 카테고리의 다른 글
Stream API (1) | 2024.02.19 |
---|---|
자바 둘러보기 (0) | 2024.02.16 |
JavaBean과 액션태그 (0) | 2023.09.05 |
JDBC 연동 (0) | 2023.09.04 |
Stack과 Queue (0) | 2023.08.23 |