[java] 추상 클래스와 인터페이스를 사용하여 다형성을 활용하는 실제 사례

다형성은 객체 지향 프로그래밍의 중요한 개념 중 하나입니다. 추상 클래스와 인터페이스를 사용하여 다형성을 활용하는 것은 객체 지향 프로그램을 더 유연하고 확장 가능하게 만드는 좋은 방법입니다.

추상 클래스와 인터페이스의 개요

추상 클래스는 일부 메서드가 구현되지 않은 미완성 클래스입니다. 추상 메서드를 포함할 수 있으며, 해당 클래스를 상속하는 서브 클래스에서는 추상 메서드를 반드시 구현해야 합니다.

인터페이스는 모든 메서드가 추상 메서드인 클래스와 비슷한 개념입니다. 클래스가 여러 개의 인터페이스를 구현할 수 있으며, 모든 인터페이스의 메서드를 구현해야 합니다.

실제 사례

다형성을 활용하는 실제 사례 중 하나는 동물을 다루는 프로그램입니다. 동물 클래스나 인터페이스를 만들고, 이를 상속받는 구체적인 동물 클래스를 만들어 다형성을 구현할 수 있습니다.

추상 클래스와 다형성

abstract class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    abstract void sound();
}

class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    void sound() {
        System.out.println(name + "는 야옹 소리를 낸다.");
    }
}

class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    void sound() {
        System.out.println(name + "는 멍멍 소리를 낸다.");
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Animal cat = new Cat("야옹이");
        Animal dog = new Dog("멍멍이");

        cat.sound();  // 출력: 야옹이는 야옹 소리를 낸다.
        dog.sound();  // 출력: 멍멍이는 멍멍 소리를 낸다.
    }
}

위 예시에서 Animal 클래스는 추상 클래스로, sound() 메서드는 추상 메서드입니다. 이를 상속받은 Cat 클래스와 Dog 클래스에서는 sound() 메서드를 구현하여 각각의 동물 소리를 출력할 수 있습니다. Animal 클래스 타입으로 변수를 선언하고 서브 클래스의 객체를 생성하는 것은 다형성의 한 예입니다.

인터페이스와 다형성

interface Animal {
    void sound();
}

class Cat implements Animal {
    public void sound() {
        System.out.println("야옹 소리를 낸다.");
    }
}

class Dog implements Animal {
    public void sound() {
        System.out.println("멍멍 소리를 낸다.");
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Animal cat = new Cat();
        Animal dog = new Dog();

        cat.sound();  // 출력: 야옹 소리를 낸다.
        dog.sound();  // 출력: 멍멍 소리를 낸다.
    }
}

위 예시에서는 Animal 인터페이스를 정의하고, 이를 구현하는 Cat 클래스와 Dog 클래스를 만들었습니다. Animal 인터페이스를 구현한 클래스들은 모두 sound() 메서드를 구현해야 합니다. 마찬가지로 인터페이스 타입으로 변수를 선언하고 각각의 객체를 생성하는 것은 다형성의 한 예입니다.

결론

추상 클래스와 인터페이스를 사용하여 다형성을 활용하는 것은 객체 지향 프로그래밍에서 중요한 개념입니다. 이를 통해 소프트웨어를 유연하게 확장하고 재사용할 수 있으며, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.