본문 바로가기
JAVA

[JAVA]추상 클래스와 인터페이스 차이점

by meetyou 2023. 3. 12.

추상클래스와 인터페이스 그리고 그 차이점에 대해 알아보겠습니다.

 

1. 추상클래스란?

추상 클래스란, 구체적인 구현 내용을 가지지 않고 메소드의 원형만을 정의하는 클래스를 말합니다. 즉, 추상 클래스는 인스턴스를 생성할 수 없으며, 상속하여 자식 클래스에서 구현되도록 하는 용도로 사용됩니다.

 

추상 클래스를 사용하는 이유는 자식 클래스에서 공통된 메소드를 미리 정의하고, 자식 클래스에서 필요한 기능을 추가하여 사용할 수 있도록 하는 것입니다. 이렇게 하면 코드 중복을 줄일 수 있고, 유지 보수 및 개발 시간을 단축시킬 수 있습니다.

 

추상 클래스를 선언할 때는 abstract 키워드를 사용하며, 추상 메소드를 선언할 때는 abstract 키워드를 메소드 앞에 붙입니다. 또한, 추상 클래스는 상속받은 자식 클래스에서 추상 메소드를 모두 구현해야 하므로, 구현되지 않은 추상 메소드가 있다면 자식 클래스도 추상 클래스가 되어야 합니다.

 

추상 클래스는 자식 클래스에서 구현되도록 하는 메소드를 제공하는 용도로 사용되며, 자체적으로는 인스턴스를 생성할  없습니다. 따라서 추상 클래스를 사용하면 자식 클래스에서 코드의 중복을 줄일  있고, 코드의 유지보수  개발 시간을 단축시킬  있습니다.

 

1-1. 추상클래스 사용법

public abstract class Shape {
    protected double area;

    public abstract void calcArea();  // 추상 메소드

    public double getArea() {
        return area;
    }
}

위의 코드에서 Shape 클래스는 추상 클래스이며, calcArea() 메소드는 추상 메소드입니다. 자식 클래스에서는 calcArea() 메소드를 구현하여 면적을 계산하도록 해야 합니다.

public class Circle extends Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public void calcArea() {
        area = Math.PI * radius * radius;
    }
}

 

위의 코드에서 Circle 클래스는 Shape 클래스를 상속받았으며, calcArea() 메소드를 구현하여 원의 면적을 계산하도록 했습니다.

 

 

 

2. 인터페이스란?

인터페이스(Interface)는 자바에서 다중 상속을 지원하지 않는 문제를 해결하기 위해 등장한 개념 중 하나로, 클래스나 다른 인터페이스에서 구현할 메서드의 목록을 정의하는 것을 말합니다. 즉, 인터페이스는 메서드의 시그니처(메서드의 이름, 매개변수, 반환 타입)를 정의하고, 해당 메서드들을 구현하는 클래스는 반드시 인터페이스에 선언된 메서드를 모두 구현해야 합니다.

인터페이스는 다음과 같은 특징을 가집니다.

  • 인터페이스는 클래스와 마찬가지로 타입을 정의
  • 인터페이스는 다른 클래스에 구현될 메서드를 정의
  • 인터페이스는 클래스와 달리 다중 상속을 지원

인터페이스는 다음과 같은 용도로 사용됩니다.

  1. 다중 상속을 구현하기 위한 용도
  2. 서로 다른 구현체들을 사용하는 클래스의 코드를 일관성 있게 작성하기 위한 용도
  3. 유지보수가 쉬운 코드를 작성하기 위한 용도

2-1. 인터페이스 사용법

1. 인터페이스 선언

public interface MyInterface {
    void method1();
    int method2(String str);
}

2. 인터페이스를 구현하는 클래스 사용

public class MyClass implements MyInterface {
    public void method1() {
        // 메서드 구현
    }

    public int method2(String str) {
        // 메서드 구현
        return 0;
    }
}

 

3. 추상클래스 vs 인터페이스

추상 클래스와 인터페이스의 주요한 차이점입니다. 추상 클래스는 생성자와 멤버 변수를 가질 있고 일반 메소드, 추상 메소드, 정적 메소드를 모두 가질 있습니다. 반면, 인터페이스는 생성자와 인스턴스 변수, 일반 메소드를 가질 없으며, 추상 메소드와 디폴트 메소드만 가질 있습니다. 또한, 추상 클래스는 다중 상속을 지원하지 않지만, 인터페이스는 다중 상속을 지원합니다. 마지막으로, 추상 클래스를 상속받는 클래스는 추상 클래스가 있지만, 인터페이스를 구현하는 클래스는 모두 구현체가 되어야 합니다.

  추상 클래스 인터페이스
생성자 생성자를 가질 있음 생성자를 가질 없음
멤버 변수 인스턴스 변수와 정적 변수를 모두 가질 있음 상수(static final) 변수만 가질 있음
메소드 일반 메소드, 추상 메소드, 정적 메소드를 모두 가질 있음 추상 메소드와 디폴트 메소드만 가질 있음
다중 상속 다중 상속을 지원하지 않음 다중 상속을 지원함
상속 추상 클래스를 상속받는 클래스는 추상 클래스가 있음 인터페이스를 구현하는 클래스는 모두 구현체가 되어야

 

참고

https://devlog-wjdrbs96.tistory.com/370

https://wildeveloperetrain.tistory.com/112