자바 다형성

IT 위키

자바 다형성(Java Polymorphism, 多形性)은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 동일한 인터페이스나 상위 클래스 타입을 통해 서로 다른 클래스의 객체를 일관되게 다룰 수 있는 성질을 의미한다.

1 개요[편집 | 원본 편집]

다형성은 "하나의 인터페이스로 여러 형태의 객체를 처리할 수 있다"는 원리를 바탕으로 하며, 코드의 유연성과 확장성을 크게 향상시킨다. 자바에서는 주로 메서드 오버라이딩과 업캐스팅을 통해 다형성을 구현한다.

2 다형성의 종류[편집 | 원본 편집]

  • 컴파일 타임 다형성 (정적 다형성): 메서드 오버로딩을 통해 구현
  • 런타임 다형성 (동적 다형성): 메서드 오버라이딩 및 업캐스팅을 통해 구현

3 예제: 런타임 다형성[편집 | 원본 편집]

class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹!");
    }
}

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

public class Main {
    public static void main(String[] args) {
        Animal a1 = new Cat();
        Animal a2 = new Dog();

        a1.sound(); // 출력: 야옹!
        a2.sound(); // 출력: 멍멍!
    }
}

4 업캐스팅과 다운캐스팅[편집 | 원본 편집]

  • 업캐스팅(Upcasting): 하위 클래스 객체를 상위 클래스 타입으로 참조
  • 다운캐스팅(Downcasting): 상위 클래스 타입의 참조를 하위 클래스 타입으로 변환 (명시적 캐스팅 필요)
Animal a = new Dog(); // 업캐스팅
Dog d = (Dog) a;      // 다운캐스팅
d.sound();            // 출력: 멍멍!

5 인터페이스를 통한 다형성[편집 | 원본 편집]

자바 인터페이스를 활용하면 클래스 간의 강한 결합을 피하면서 다형성을 구현할 수 있다.

interface Speaker {
    void speak();
}

class Human implements Speaker {
    public void speak() {
        System.out.println("사람이 말합니다.");
    }
}

class Robot implements Speaker {
    public void speak() {
        System.out.println("로봇이 말합니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Speaker s1 = new Human();
        Speaker s2 = new Robot();

        s1.speak(); // 출력: 사람이 말합니다.
        s2.speak(); // 출력: 로봇이 말합니다.
    }
}

6 장점[편집 | 원본 편집]

  • 코드의 재사용성 증가
  • 시스템 확장성 향상
  • 인터페이스 기반 설계 가능
  • 실행 시간에 객체에 따라 다른 동작 수행 가능

7 관련 키워드[편집 | 원본 편집]

  • 오버라이딩
  • 오버로딩
  • 업캐스팅
  • 인터페이스
  • 동적 바인딩

8 같이 보기[편집 | 원본 편집]

9 참고 문헌[편집 | 원본 편집]

  • Joshua Bloch, *Effective Java*, Addison-Wesley, 2018.
  • Herbert Schildt, *Java: The Complete Reference*, McGraw-Hill Education, 2021.

10 각주[편집 | 원본 편집]