다형성(Polymorphism)
객체 지향 프로그래밍의 개념으로, 하나의 객체나 참조 변수가 여러 가지 형태나 타입을 가질 수 있는 성질
같은 이름의 메서드를 여러 클래스에서 구현하는 방식
Parent parent = new Child();
상속과 인터페이스, 오버라이딩을 바탕으로, 프로그램에서 여러 객체를 공통적으로 다루면서 개별적으로 다른 동작을 하게 하는 특징
부모 클래스의 메서드는 자식 클래스에서 재정의(오버라이딩)하면, 부모 타입으로 호출해도 실제 실행되는 함수는 자식 클래스에서 재정의한 함수를 호출
여러 하위 클래스가 같은 인터페이스를 구현하면, 여러 인터페이스 타입 변수로 각각의 객체를 관리할 수 있다.
"역할과 구현"
다형성을 로미오와 여러 남자 배우로 설명을 해보면,
로미오라는 역할은 뮤지컬이나 영화에서는 변하지 않지만, 차은우, 박보검, 디카프리오 등등 누구든지 바뀔 수 있다.
관객이 볼때는 배우가 달라도, 로미오와 줄리엣에서 로미오라는 역할은 항상 동일하다.
인터페이스: 로미오
구현클래스: 차은우, 박보검
위처럼 두 부류로 나눌 수 있고, 차은우와 박보검은 연기하는 방식(표정, 목소리 톤)은 다를 수 있다.
로미오가 어떤 배우가 맡게 되어도 로미오와 줄리엣에 대한 전체 공연은 잘 진행된다.
예제코드
// 역할(인터페이스)
interface Romeo {
void act();
}
// 구현체(여러 배우)
class ChaEunWoo implements Romeo {
public void act() {
System.out.println("차은우: 사랑해, 줄리엣!");
}
}
class ParkBoGum implements Romeo {
public void act() {
System.out.println("박보검: 내 사랑, 줄리엣!");
}
}
// 공연 연출 코드
public class Stage {
public static void main(String[] args) {
Romeo romeo = new ChaEunWoo();
romeo.act(); // 차은우가 연기
romeo = new ParkBoGum();
romeo.act(); // 박보검이 연기
}
}
결론
위 처럼 Romeo라는 역할(인터페이스)를 만들면, 누가 연기하는지는 프로그램이 실행되는 시점에 얼마든지 교체가 가능하다.(유연성, 재사용성에 있어 장점을 가진다.)
요약하자면 역할과 구현을 분리하면 구현은 얼마든지 바꿔도 프로그램 전체 구조가 변하지 않는다.
'Development > Java' 카테고리의 다른 글
| [Java] Static이란? (0) | 2026.01.02 |
|---|---|
| [Java] 추상 클래스와 인터페이스 (0) | 2025.09.03 |
| [Java] equals(), == 연산 null 비교 (0) | 2025.06.20 |
| [Java] ==와 equals()의 차이 (2) | 2025.06.16 |
| [Java] String compareTo() 메서드 (2) | 2025.06.15 |