Java

JAVA 기초정리 - 다형성 (Polymorphism)

chungmani 2026. 6. 12. 19:06

1. 다형성이란?

다형성이란

하나의 참조 변수로 여러 종류의 객체를 다루는 것의 의미

 

자바에서는 부모 타입 참조 변수로 자식 객체를 참조할 수 있는 것을 의미한다.

Burger b = new BulgogiBurger();
 

 

중요한 특징

  • 부모 타입 → 자식 객체 참조 가능 (O)
  • 자식 타입 → 부모 객체 참조 불가능 (X)
Burger b = new BulgogiBurger(); // 가능
BulgogiBurger b = new Burger();  // 불가능
 

 

왜 이런 구조일까?

자식 객체는 부모보다 기능이 더 많다.

Burger (부모)
 ├─ eat()
 
BulgogiBurger (자식)
 ├─ eat()
 ├─ grill()
 

그래서

  • 기능을 “줄이는 것”은 가능 (OK)
  • 없는 기능을 “늘리는 것처럼 쓰는 것”은 불가능 (X)

👉 부모 타입은 항상 “공통 기능만 보게” 된다


2. instanceof 연산자

instanceof는

객체가 어떤 타입인지 확인하는 연산자

 

다형성 상황에서 실제 객체를 구분할 때 사용한다.

 
void eat(Burger b) {

    if (b instanceof BulgogiBurger) {
        BulgogiBurger bb = (BulgogiBurger) b;
        bb.grill();
        
    } else if (b instanceof CheeseBurger) {
        CheeseBurger cb = (CheeseBurger) b;
        cb.meltCheese();
    }
}
 

 


3. 다형성의 장점

 

1️⃣ 매개변수의 다형성

하나의 메서드로 여러 객체를 처리할 수 있다

 
void serve(Burger b) {
    b.eat();
}
 

사용:

serve(new BulgogiBurger());
serve(new CheeseBurger());
serve(new ShrimpBurger());
 

💡 장점

  • 버거 종류마다 메서드를 따로 만들 필요 없음
  • 코드가 단순해지고 확장성이 좋아짐

2️⃣ 하나의 배열에 여러 객체 저장 가능

서로 다른 객체를 하나의 부모 타입 배열로 관리 가능

Burger[] burgers = new Burger[3];

burgers[0] = new BulgogiBurger();
burgers[1] = new CheeseBurger();
burgers[2] = new ShrimpBurger();
 

💡 사용 예시

for (Burger b : burgers) {
    b.eat();
}
 

 

💡 장점

  • 다양한 객체를 하나의 구조로 관리 가능
  • 반복문으로 통일된 처리 가능
  • 유지보수 매우 쉬움