추상클래스와 인터페이스

추상클래스

하나 이상의 추상 메서드를 포함하는 클래스

반드시 사용되어야 하는 메서드를 추상 클래스에 추상 메서드로 선언 -> 상속받는 모든 클래스에서는 추상 메서드를 반드시 재정의해야 한다.

  • 추상 클래스를 사용하는 이유은 공통된 내용(필드나 메서드)들을 추출하여 통일된 내용으로 작성하도록 규격화하는 것 이다.
  • 추상 클래스는 상속을 강제하기 위한 것이다. 부모 클래스에는 메서드의 시그니처만 정의해놓고 그 메서드의 실제 동작 방법은 이 메서드를 상속 받은 하위 클래스의 책임으로 위임한다.

목적 : 동일한 부모를 가지는 클래스를 묶는 개념으로, 상속을 받아서 기능을 확장시키는 것

인터페이스

일종의 추상 클래스를 의미. 오직 추상 메서드와 상수만을 포함

  • Java 8 부터 default 예약어를 통해 일반 메서드 구현이 가능하다.

    • 구현한 구체 클래스는 오버라이딩 없이 default 메서드를 사용할 수 있고, 오버라이딩 역시 할 수 있다.
  • 다중 구현이 가능하다.

목적 : 메서드 구현을 강제하여 구현 클래스가 같은 동작을 한다는 것을 보장하기 위함

추가

상속은 반드시 하위 클래스가 상위 클래스의 ‘진짜’ 하위 타입인 상황에서만 쓰여야 한다. - 클래스 B가 클래스 A와 is-a 관계일 때만 클래스 A를 상속해야 한다.

  • 상속보다는 컴포지션과 전달을 사용하자
  • 다형성을 위한 것이라면 클래스 상속보다는 인터페이스를 구현하자

Written by@Myunghwan
Nothing changes if nothing changes

GitHub