다형성이란 무엇인가요? 예를 들어 설명해주세요.
다형성(Polymorphism)이란 객체지향 프로그래밍에서 같은 인터페이스나 상위 클래스의 메서드를 여러 다른 방식으로 구현하여, 하나의 코드가 다양한 형태의 객체를 처리할 수 있게 하는 특성을 의미합니다.
즉, 동일한 메시지(메서드 호출)가 객체에 따라 다르게 동작하도록 만드는 것을 말합니다.
다형성의 종류 1. 컴파일 시 다형성 (오버로딩, Overloading) 같은 이름의 메서드를 매개변수의 타입이나 개수를 다르게 하여 여러 개 정의하는 것 예) `void add(int a, int b)`, `void add(double a, double b, double c)` 2. 실행 시 다형성 (오버라이딩, Overriding) 상위 클래스에 정의된 메서드를 하위 클래스에서 재정의하여 서로 다른 기능을 수행하는 것 예) 부모 클래스에 `draw()` 메서드가 있고, 자식 클래스 참조에 따라 `draw()`가 다르게 작동 --- 예를 들어 설명 ```java class Animal { void sound() { System.out.println("동물이 소리냅니다.
"); } } class Dog extends Animal { @Override void sound() { System.out.println("멍멍"); } } class Cat extends Animal { @Override void sound() { System.out.println("야옹"); } } public class TestPolymorphism { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Cat(); animal1.sound(); // 출력: 멍멍 animal2.sound(); // 출력: 야옹 } } ``` 위 예제에서 `Animal` 타입의 참조 변수가 `Dog` 객체 또는 `Cat` 객체를 가리키면, 같은 `sound()` 메서드 호출이지만 각 객체에 맞게 다르게 실행됩니다.
이것이 바로 실행 시 다형성의 대표적인 예입니다.
--- 정리 - 다형성은 코드의 유연성과 확장성을 높여줍니다.
- 같은 메서드 호출이 객체에 따라 다르게 동작하도록 하여, 코드를 간결하게 만들고 유지보수를 쉽게 합니다.
- 대표적인 활용은 상속과 함께 메서드 오버라이딩을 통한 실행 시 다형성입니다.