Java

[Java] 추상 클래스와 인터페이스 비교

Dev_Green 2023. 8. 2. 11:03

1. 추상 클래스(abstract class)

  • 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도
  • 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라, 단지 미완성 메서드(추상 메서드)를 포함하고 있다는 의미
    • 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것
  • 추상 클래스는 추상 메서드를 포함하고 있다는 것을 제외하고는 일반클래스와 유사하다
    • 추상 클래스에도 생성자가 있으며 멤버변수와 메서드도 가질 수 있다
    • new 연산자 사용 불가

1. 1. 추상 클래스의 사용 방법

  • 클래스 선언부에 abstract 키워드 입력
  • abstract 키워드를 포함한 추상 메서드를 정의한다.
  • 추상 클래스는 상속을 통해서 자손 클래스에 의해서 완성

 

2. 인터페이스(interface)

  • 추상클래스가 미완성 설계도 라면, 구현된 것은 아무것도 없고 밑그림만 그려져 있는 기본 설계도
  • 추상 클래스와 달리 일반 메서드 또는 멤버변수를 멤버로 가질 수 없다
  • 오직 추상 메서드상수만을 멤버로 가질 수 있다
    • 모든 멤버변수는 public static final
    • 모든 메서드는 public abstract
    • 단, static 메서드와 default 메서드는 예외 *java 1.8 부터 가능

2.1. 인터페이스의 필요성

  • A-B 의 직접적인 관계

  • A-I-B 간접적인 관계

    • 클래스 A를 작성하는데 있어서 클래스 B가 사용되지 않는다
    • A-B 의 직접적인 관계에서 A-I-B 간접적인 관계로 변환
  • 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원
  • 구현의 강제로 표준화 처리(abstract)
  • 서로 관계 없는 클래스들에게 인터페이스 구현을 통한 관계 부여