인터페이스와 추상클래스의 차이

2024. 2. 4. 16:01백엔드/JAVA

자바에서 다형성을 구성하는 데 사용되는 것이 바로 인터페이스와 추상클래스인데요 비슷한 것 같은 인터페이스와 추상클래스!
어떤 점이 다르기에 구분해서 사용하는지에 대하여 알아보겠습니다. ✏️

 

# 추상클래스

  • abstract 키워드를 이용하여 선언된 클래스나 내부에 추상 메서드를 한 개 이상 포함한 클래스 (일반메서드도 포함을 할 수 있음)
  • 실체클래스들의 공통적인 특성을 추출해서 선언한 클래스
  • 추상클래스의 추상메소드는 실체클래스에서 무조건 상속을 받아 재정의 해야 한다.(오버라이딩 필수)
  • 직접 인스턴스를 생성 할 수 없음
  • 단일 상속만 허용
  • 클래스간의 연관 관계를 구축하는 것에 초점
  • 인스턴스화할 수 없음

예시 코드

abstract class Shape {
    abstract void draw();

    void display() {
        System.out.println("Displaying the shape");
    }
}

class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a circle");
    }
}

class Rectangle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a rectangle");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape circle = new Circle();
        circle.draw();
        circle.display();

        Shape rectangle = new Rectangle();
        rectangle.draw();
        rectangle.display();
    }
}

 

 

 

# 인터페이스

  • interface 키워드를 이용하여 선언
  • 추상 메서드와 상수만을 가질 수 있음
  • 하위에 선언된 모든 메서드는 자동으로 추상 메서드로 선언
    모든 필드는 public static final이어야 하며, 모든 메서드는 public abstract 이어야 함
  • 다중 상속 허용
  • 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용하는 것에 초점
  • 인스턴스화할 수 없음

예시 코드

interface Animal {
    // 추상 메서드
    void sound();
}

class Dog implements Animal {
    // 인터페이스의 추상 메서드 구현
    public void sound() {
        System.out.println("멍멍");
    }
}

class Cat implements Animal {
    // 인터페이스의 추상 메서드 구현
    public void sound() {
        System.out.println("야옹");
    }
}

 

 

표로 정리해보자 

  추상클래스 인터페이스
목적 기능을 확장 시키기 위함  구현 객체의 함수 구현 강제
선언 키워드 abstract interface
상속 키워드 extends implements
다중 상속 불가 가능
메서드 구현 추상메서드, 일반 메소드 구현가능 추상메소드만 구현 가능
선언 가능 변수  상수 인스턴스 변수, 상수, 일반 변수