[java] 자바 추상 클래스와 인터페이스의 인스턴스 생성 방법의 차이

자바에서는 추상 클래스와 인터페이스를 사용하여 클래스를 정의할 수 있습니다. 그러나 추상 클래스와 인터페이스를 인스턴스화하는 방법에는 몇 가지 차이점이 있습니다.

추상 클래스의 인스턴스 생성

추상 클래스는 다른 클래스에서 상속받기 위해 설계된 클래스입니다. 따라서 추상 클래스는 직접 인스턴스화할 수 없으며, 상속을 통해 하위 클래스를 생성해야 합니다. 아래는 추상 클래스의 인스턴스 생성 방법을 보여주는 예제 코드입니다.

// 추상 클래스 정의
public abstract class Animal {
    public abstract void makeSound();
}

// 추상 클래스를 상속한 하위 클래스 정의
public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍");
    }
}

// 추상 클래스의 인스턴스 생성
Animal animal = new Dog();
animal.makeSound();    // "멍멍" 출력

위 예제에서는 추상 클래스 Animal을 상속받은 하위 클래스 Dog를 생성하여 추상 클래스 Animal의 인스턴스를 만들고 있습니다. 추상 클래스의 인스턴스는 일반적으로 추상 클래스의 타입으로 선언하고, 이를 통해 추상 클래스의 메소드를 호출할 수 있습니다.

인터페이스의 인스턴스 생성

인터페이스는 메소드 집합을 정의하는 역할을 합니다. 인터페이스는 직접 인스턴스화할 수 없으며, 인터페이스를 구현한 클래스의 인스턴스를 생성해야 합니다. 아래는 인터페이스의 인스턴스 생성 방법을 보여주는 예제 코드입니다.

// 인터페이스 정의
public interface Animal {
    void makeSound();
}

// 인터페이스를 구현한 클래스 정의
public class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍");
    }
}

// 인터페이스의 인스턴스 생성
Animal animal = new Dog();
animal.makeSound();    // "멍멍" 출력

위 예제에서는 인터페이스 Animal을 구현한 클래스 Dog를 생성하여 인터페이스 Animal의 인스턴스를 만들고 있습니다. 인터페이스의 인스턴스는 마찬가지로 인터페이스의 타입으로 선언하고, 이를 통해 인터페이스의 메소드를 호출할 수 있습니다.

결론

자바에서 추상 클래스와 인터페이스의 인스턴스 생성 방법은 상속과 구현의 차이로 나타납니다. 추상 클래스는 하위 클래스를 생성하여 인스턴스화하고, 인터페이스는 구현한 클래스의 인스턴스를 생성합니다. 이를 통해 추상 클래스와 인터페이스의 다양한 특성과 장점을 활용할 수 있습니다.


참고 자료: