본문 바로가기
TIL

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

by thegreatjy 2023. 11. 13.
728x90

추상 클래스

미완성 설계도

미완성 메서드를 포함하고 있는 클래스 = 추상 클래스

추상클래스의 인스턴스는 생성할 수 없다. 상속을 통해 자식 클래스를 생성할 수 있다.

추상 메서드

선언부만 있고 구현부는 존재하지 않는 메서드

메서드의 내용이 상속받는 자식 클래스에 따라 달라질 수 있기 때문이다.

추상클래스로부터 상속받는 자식 클래스는 오버라이딩을 통해 조상인 추상클래스의 추상 메서드를 모두 구현해주어야 한다. 하나라도 구현하지 않는다면, 추상클래스로 지정해야 한다.

추상 메서드로 선언하는 이유

자식 클래스에서 추상메서듣를 반드시 구현하도록 강요하기 위함.

추상메서드로 정의되어 있지 않다면, 자식 클래스에서는 이 메서드가 온전히 구현된 것으로 인식하고 오버라이딩하지 않을 가능성이 있다.

추상의 이유 → 상속하여 오버라이딩하기 위함

인터페이스

추상메서드와 상수만 멤버로 가질 수 있다.

  • static final 멤버 변수
  • abstract 메서드(){}; → 구현하는 클래스에서 반드시 구현해야 함
  • default 메서드(){ … }; → 이미 구현되어 있음

추상 클래스 VS 인터페이스

추상 클래스 인터페이스
공통점 인스턴스를 생성할 수 없다.
추상 메서드를 포함한다.
하위 클래스에서 추상 메서드를 반드시 구현해야 한다.
차이점 상속 받아서 기능을 확장한다. 구현 클래스들은 동일한 기능을 수행한다.
클래스에서의 변수 선언과 동일 상수만 선언 가능
다중 상속 불가능 다중 상속 가능
  • 추상 클래스 = 자식 클래스에서 오버라이딩(재정의)를 하기 위함. “기능 확장”
  • 인터페이스 = 상속받은 자식 클래스들의 동일한 기능 구현을 보장하기 위함. “기능 구현”

추상 클래스와 인터페이스의 다중 상속

  • 추상 클래스
    • 다중 상속이 불가능하다.
    • 부모 클래스에 동일한 이름의 메서드가 있을 경우, 자식 클래스에서 어떤 부모 클래스의 메서드를 참조하는지 알 수 없기 때문이다. → 다중 상속의 모호성
  • 인터페이스
    • 다중 상속이 가능하다.
    • 여러 인터페이스를 상속받아도 부모 인터페이스에서 구현되어 있지 않기 때문에(추상 메서드), 자식 클래스에서 재정의(오버라이딩)이 가능하다.
728x90