개발/Java

Abstract Class와 Interface의 사용법과 차이점

이쪽저쪽살짝 2023. 4. 7. 20:24
반응형

JAVA 프로그래밍에서 자주 사용되는 두 가지 개념인 '추상 클래스(abstract class)'와 '인터페이스(interface)'에 대해 알아보겠습니다. 이 두 개념은 클래스 간의 계층 구조를 설계할 때 중요한 역할을 합니다. 이 글에서는 각 개념의 정의와 사용법을 설명하고, 그 차이점을 이해하는 데 도움이 되는 예제를 제공하겠습니다.

 

Abstract Class (추상 클래스)

추상 클래스는 상속을 통해 공통된 기능을 다양한 구현체에 전달하기 위해 사용됩니다. 추상 클래스는 완전한 구현을 가지지 않는 메서드(추상 메서드)를 포함할 수 있습니다.

사용법

abstract class Animal {
    abstract void makeSound();

    void sleep() {
        System.out.println("Animal is sleeping");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("Dog barks");
    }
}

class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound();
        dog.sleep();
    }
}

위 예제에서 Animal은 추상 클래스입니다. makeSound()는 추상 메서드이며, sleep()은 일반 메서드입니다. Dog 클래스는 Animal 클래스를 상속받아 makeSound() 메서드를 구현합니다.

Interface (인터페이스)

인터페이스는 여러 클래스가 구현해야 하는 특정 기능의 규격을 정의하는데 사용됩니다. 인터페이스는 모든 메서드가 추상 메서드이며, 상수를 포함할 수 있습니다.

사용법

interface Animal {
    void makeSound();
}

class Dog implements Animal {
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound();
    }
}

위 예제에서 Animal은 인터페이스입니다. makeSound()는 추상 메서드입니다. Dog 클래스는 Animal 인터페이스를 구현하며, makeSound() 메서드를 구현합니다.

차이점

1. 추상 클래스는 일반 메서드와 추상 메서드를 모두 포함할 수 있지만, 인터페이스는 추상 메서드만 포함할 수 있습니다.
2. 추상 클래스는 생성자를 가질 수 있지만, 인터페이스는 생성자를 가질 수 없습니다.
3. 하나의 클래스는 여러 인터페이스를 구현할 수 있지만, 하나의 클래스는 하나의 추상 클래스만 상속받을 수 있습니다.

4. 인터페이스는 다중 상속을 지원하므로, 여러 인터페이스의 조합으로 더 유연한 구조를 만들 수 있습니다. 반면에 추상 클래스는 단일 상속만 지원합니다.

 

언제 사용할까?

추상 클래스와 인터페이스의 사용 시점은 다음과 같이 결정할 수 있습니다.

 

인터페이스여러 클래스가 공통된 기능을 구현해야 할 때, 또는 다중 상속이 필요한 경우 인터페이스를 사용합니다.

 

추상 클래스: 공통된 기능과 상태를 가진 클래스가 필요하거나, 다른 클래스에 일부 구현을 제공하고자 할 때 추상 클래스를 사용합니다.

 

결론

추상 클래스와 인터페이스는 클래스 간의 관계와 구조를 정의하는 데 중요한 역할을 합니다. 각각의 개념과 사용법을 이해하고, 적절한 시점에 사용함으로써 코드의 재사용성과 확장성을 높일 수 있습니다. 프로젝트의 요구 사항에 따라 추상 클래스와 인터페이스를 현명하게 선택하고 활용하세요.

감사합니다! 이 글이 추상 클래스와 인터페이스의 차이점과 사용법에 대한 이해에 도움이 되길 바랍니다.

 

반응형

'개발 > Java' 카테고리의 다른 글

Java 제네릭(Generic) 타입 이해하기  (0) 2023.04.07
ModelMapper와 ObjectMapper 의 차이점  (0) 2023.04.07
자바8 Stream 기능 이해하기  (0) 2023.04.01
Java 17의 새로운 기능과 장단점 탐구  (0) 2023.04.01
lombok의 @Slf4j  (0) 2023.03.31