Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 추상 클래스(Abstract Class)와 구체 클래스(Concrete Class)의 차이점


Java에서 추상화(abstraction)는 크게 추상 클래스(Abstract Class)인터페이스(Interface)를 통해 구현됩니다. 추상 클래스는 구현부가 없는 추상 메서드를 선언할 수 있으며, 그 실제 구현은 이를 상속받는 자식 클래스가 담당합니다. 아래 표에서 추상 클래스와 구체 클래스(Concrete Class)의 주요 차이점을 한눈에 확인할 수 있습니다.

추상 클래스 vs 구체 클래스 주요 차이점

번호구분 기준추상 클래스 (Abstract Class)구체 클래스 (Concrete Class)
1지원 메서드추상 메서드와 구체 메서드를 모두 가질 수 있습니다.구체 메서드만 가질 수 있습니다. 추상 메서드가 단 하나라도 있으면 해당 클래스는 추상 클래스가 됩니다.
2인스턴스화new 키워드로 인스턴스를 생성할 수 없습니다.new 키워드로 바로 인스턴스를 생성할 수 있습니다.
3추상 메서드추상 메서드를 가질 수도 있고, 갖지 않을 수도 있습니다.추상 메서드를 가질 수 없습니다.
4final 선언final 클래스로 선언할 수 없습니다.final 클래스로 선언할 수 있습니다.
5선언 키워드abstract 키워드를 사용해 선언합니다.선언 시 abstract 키워드를 사용하지 않습니다.
6상속extends 키워드로 다른 클래스를 상속받을 수 있으며, 인터페이스도 함께 구현할 수 있습니다.마찬가지로 extends 키워드로 다른 클래스를 상속받을 수 있습니다.
7인터페이스 구현인터페이스를 구현하더라도 모든 메서드를 완성하지 않으면 여전히 추상 상태이므로, 자식 클래스가 나머지를 구현해야 인스턴스화할 수 있습니다.인터페이스의 모든 메서드를 구현하기만 하면 손쉽게 인터페이스를 구현할 수 있습니다.

추상 클래스 vs 구체 클래스 예제

다음 예제는 추상 클래스 Cat과 이를 상속받아 eat() 메서드를 구현하는 구체 클래스 Lion의 관계를 보여줍니다.

JavaTester.java

public class JavaTester {
    public static void main(String args[]) {
        Cat lion = new Lion();
        lion.eat();
    }
}

abstract class Cat {
    abstract public void eat();
}

class Lion extends Cat {
    public void eat() {
        System.out.println("Lion eats");
    }
}

실행 결과

Lion eats

정리

위 예제에서 Cat은 추상 클래스이므로 new Cat()처럼 직접 객체를 생성할 수 없습니다. 대신 자식 클래스인 Lion이 추상 메서드 eat()를 구현했기 때문에, 부모 타입 변수로 Lion 객체를 참조해 메서드를 호출할 수 있습니다. 이처럼 추상 클래스는 공통 구조와 규약을 정의하는 역할을, 구체 클래스는 그 세부 동작을 완성하는 역할을 담당합니다.