[java] 자바 추상 클래스와 인터페이스를 사용하여 어떤 문제를 해결할 수 있는지

자바에서 추상 클래스와 인터페이스는 객체 지향 프로그래밍에서 중요한 역할을 담당합니다. 이들을 사용하면 다양한 문제를 해결할 수 있습니다. 이번 포스트에서는 자바 추상 클래스와 인터페이스의 사용 예시를 알아보겠습니다.

1. 추상 클래스

추상 클래스는 인스턴스를 직접 생성할 수 없고, 상속을 통해 사용됩니다. 추상 클래스는 일반 클래스와 비슷한 멤버 변수, 메서드 등을 가질 수 있지만, 하나 이상의 추상 메서드를 가지고 있어서 추상 메서드를 구현하는 자식 클래스를 만들어야 합니다.

예를 들어, 동물을 다루는 프로그램에서 추상 클래스인 동물 클래스를 정의할 수 있습니다. 동물 클래스는 소리()라는 추상 메서드를 가지고 있고, 이를 상속받은 실제 동물 클래스에서는 소리() 메서드를 구현해야 합니다. 이렇게 함으로써 동물 클래스는 동물의 공통적인 특성과 기능을 가지고 있으면서, 각각의 동물은 자신만의 특별한 소리를 낼 수 있도록 할 수 있습니다.

abstract class 동물 {
    abstract void 소리();
}

class 강아지 extends 동물 {
    void 소리() {
        System.out.println("멍멍");
    }
}

class 고양이 extends 동물 {
    void 소리() {
        System.out.println("야옹");
    }
}

public class Main {
    public static void main(String[] args) {
        동물 강아지 = new 강아지();
        강아지.소리(); // 멍멍
        
        동물 고양이 = new 고양이();
        고양이.소리(); // 야옹
    }
}

이 예시에서 추상 클래스를 사용하여 동물의 공통 기능을 추상화하고, 실제 동물 클래스에서 이를 구현함으로써 코드의 재사용성과 유연성이 높아집니다.

2. 인터페이스

인터페이스는 추상 클래스와 마찬가지로 인스턴스를 직접 생성할 수 없고, 구현 클래스를 통해 사용됩니다. 인터페이스는 클래스가 가져야 하는 메서드들의 집합을 정의합니다. 이를 통해 다중 상속과 관련된 문제를 해결하고, 클래스 간의 관계를 유연하게 구성할 수 있습니다.

예를 들어, 전자기기의 전원을 켜고 끄는 기능을 갖춘 인터페이스인 전원을 정의할 수 있습니다. 이 전원 인터페이스를 구현하는 클래스들은 각자의 방식으로 전원을 제어할 수 있습니다. 이렇게 하면 전자기기 클래스들은 공통된 전원 기능을 가지고 있으면서, 각각의 클래스에서는 독립적으로 전원을 제어할 수 있게 됩니다.

interface 전원 {
    void 전원켜기();
    void 전원끄기();
}

class TV implements 전원 {
    public void 전원켜기() {
        System.out.println("TV 전원을 켭니다.");
    }

    public void 전원끄기() {
        System.out.println("TV 전원을 끕니다.");
    }
}

class 컴퓨터 implements 전원 {
    public void 전원켜기() {
        System.out.println("컴퓨터 전원을 켭니다.");
    }

    public void 전원끄기() {
        System.out.println("컴퓨터 전원을 끕니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        전원 tv = new TV();
        tv.전원켜기(); // TV 전원을 켭니다.

        전원 computer = new 컴퓨터();
        computer.전원켜기(); // 컴퓨터 전원을 켭니다.
    }
}

인터페이스를 사용하여 클래스 간의 관계를 구성함으로써, 클래스를 더욱 유연하게 설계할 수 있고, 코드의 재사용성과 확장성을 높일 수 있습니다.

결론

자바에서 추상 클래스와 인터페이스는 다양한 문제를 해결하는 데 도움을 줍니다. 추상 클래스는 공통 기능을 추상화하여 상속을 통해 자식 클래스에서 사용할 수 있게 하며, 인터페이스는 클래스 간의 관계를 유연하게 구성하고 다중 상속 문제를 해결할 수 있습니다. 이러한 기능들을 적절히 활용하여 프로그램을 설계하면 유지보수성과 확장성이 높은 코드를 작성할 수 있습니다.