Java & Spring/Java

다형성 (Polymorphism)

승주우에요 2026. 1. 6. 22:03

1. 다형성이란?

다형성이란 하나의 타입으로 여러 형태의 객체를 다룰 수 있는 성질을 의미한다. 즉, 부모 타입의 참조 변수로 서로 다른 자식객체를 참조할 수 있고, 같은 메서드 호출이 객체에 따라 다르게 동작한다.

  • 코드의 결합도 감소
  • 구현 교체 용이
  • 확장에 유리한 구조

2. Upcasting

업캐스팅은 자식 객체를 부모 타입으로 참조하는 것이다.

  • 자동 형변환
  • 매우 안전
class Animal {
    void sound() {}
}

class Dog extends Animal {
    void sound() {
        System.out.println("멍멍");
    }
}

Animal animal = new Dog(); // 업캐스팅
animal.sound();

출력
멍멍

 

특징

업캐스팅 상태에서는 부모 클래스에 정의된 멤버만 접근 가능하다. 자식 메서드는 부모 타입 접근 불가능함.

class Dog extends Animal {
    void run() {}
}

Animal animal = new Dog();
animal.run(); // 컴파일 에러

 

3. Downcasting

부모 타입으로 참조하던 객체를 다시 자식 타입으로 변환하는 것이다. 

  • 명시적 형변환 필요
  • 잘못 사용 시 런타임 오류 발생 가능 (ClassCastException)
Animal animal = new Dog();
Dog dog = (Dog) animal; // 다운캐스팅
dog.run();

Animal animal = new Animal();
Dog dog = (Dog) animal; // 런타임 오류

 

4. instanceof 연산자

참조 변수가 특정 클래스 타입으로 형변환 가능한지 검사하는 연산자이다. boolean 타입을 반환하고 안정성을 위해 다운캐스팅 전에 사용한다.

Animal animal = new Dog();

if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.run();
}

 

5. 다형성 정리

  • 다형성은 하나의 타입으로 여러 객체를 다루는 개념이다
  • 업캐스팅은 자동이며 안전함
  • 다운캐스팅은 명시적이며 위험할 수 있다.
  • instanceof는 다운캐스팅의 안전장치
  • 다형성은 결합도를 낮추는 핵심이다.

 

'Java & Spring > Java' 카테고리의 다른 글

추상화  (0) 2026.01.07
SOLID 원칙  (0) 2026.01.06
캡슐화와 접근 제어자  (0) 2026.01.06
Object 클래스  (0) 2026.01.06
상속(Inheritance)이란  (0) 2026.01.06