클래스와 객체의 다형성(Polymorphism)이란 무엇인가요?
다형성은 객체지향 프로그래밍에서 매우 중요한 개념입니다. 클래스와 객체의 다형성은 같은 타입이지만 서로 다른 동작을 수행할 수 있는 능력을 의미합니다. 이는 코드의 재사용성과 유연성을 높이는데 도움을 줍니다.
클래스와 객체의 차이점
클래스는 설계도이며, 객체는 클래스를 기반으로 메모리에 생성된 실체입니다. 객체는 클래스의 인스턴스라고도 할 수 있습니다. 하나의 클래스로 여러 개의 객체를 생성할 수 있으며, 객체마다 고유한 상태(필드)와 동작(메서드)을 가지고 있습니다.
다형성의 종류
-
오버로딩(Overloading): 같은 이름의 메서드를 여러 개 정의하고, 매개변수의 개수나 타입을 다르게 함으로써 다양한 형태로 호출할 수 있는 기능입니다. 컴파일러는 메서드를 호출할 때 전달되는 인자의 타입과 개수에 맞는 메서드를 선택합니다.
-
오버라이딩(Overriding): 상속 관계에 있는 클래스에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 의미합니다. 이를 통해 부모 클래스의 동작을 자식 클래스에서 변경하거나 확장할 수 있습니다. 동일한 메서드 이름과 인자를 가지고 있지만, 자식 객체에서 호출될 때는 자식 클래스의 메서드가 실행됩니다.
다형성의 장점
-
코드의 재사용: 다형성을 사용하면 공통된 코드를 재사용할 수 있습니다. 각 클래스의 차이를 추상화하여 유사한 동작을 수행하는 객체를 일관된 방식으로 처리할 수 있습니다.
-
유연성: 다형성은 코드의 유연성을 높여줍니다. 객체의 타입을 알 필요 없이 동일한 방식으로 다양한 타입의 객체를 다룰 수 있습니다. 이는 프로그램의 확장성과 유지보수성을 향상시킵니다.
다형성의 예시
class Animal {
public void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("야옹");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.sound(); // 멍멍
animal2.sound(); // 야옹
}
}
위의 예시에서 Animal
클래스는 추상적인 동물을 나타내는 클래스입니다. Dog
와 Cat
클래스는 각각 개와 고양이를 나타내며, sound
메서드를 오버라이딩하여 개와 고양이의 울음소리를 출력합니다. PolymorphismExample
클래스에서 Animal
객체는 다양한 동물 객체를 참조할 수 있습니다. 이를 통해 동물 객체의 다형성을 구현하고 재사용성과 유연성을 높일 수 있습니다.