[Java] interface와 abstract class의 목적

자바에서 추상화를 지원하는 개념으로 인터페이스와 추상 클래스가 있다. 비슷해 보이지만 엄연히 목적이 다른 두 개념의 차이를 알아보자.

목적

추상클래스(Abstract Class)는 구현이 미완성된 클래스로 그 자체로는 객체를 생성하지 못하며, 다른 클래스들이 상속받는 용도로 사용된다. 추상 클래스는 일반 메서드뿐만 아니라 추상 메서드를 이용하여 하위 클래스에게 구현을 강제시킬 수 있다. 이를 통해, 재사용성 및 유연하고 안정성 있는 코드를 작성할 수 있다. 정리하자면 추상클래스는 공통적인 기능의 재사용 및 추상화를 이용한 안정성 있는 설계를 목적으로 한다.

인터페이스(Interface)는 역할을 정의해놓은 템플릿으로, 모든 메서드가 추상메서드로 되어있다.(Java 8 이전) 인터페이스를 구현한 클래스들은 정의된 모든 메서드들을 구현하는 책임을 가진다. 이러한 인터페이스를 이용하여 객체간의 연관관계에서 결합도를 낮출 수 있다. 즉, 인터페이스는 결합도를 낮추기 위해 객체간 상호작용을 정의하는 목적으로 사용한다.

💡 추상 메서드
abstract 키워드를 붙여 선언한 구현 내용이 없는 메서드


공통점

추상 클래스와 인터페이스 모두 추상 메서드를 가질 수 있다. 단, 추상클래스는 일반 메서드를 포함할 수 있으므로 추상 메서드 앞에 abstract 키워드를 붙여 주어야 한다. 인터페이스의 경우 기본적으로 추상메서드가 된다.
또한, 직접 객체를 생성할 수 없다. 자식클래스만이 객체를 생성할 수 있다.


차이점

  1. 다중상속
    • 추상클래스는 클래스이므로 다중상속이 불가능하다.
    • 인터페이스는 가능하다.
  2. 멤버변수
    • 추상클래스는 메서드들 뿐만 아니라 멤버변수 선언또한 가능하다.
    • 인터페이스는 메서드만 가능하다.
  3. 생성자
    • 추상클래스는 생성자가 존재하여 상속한 클래스에서 super 키워드를 통해 호출할 수 있다.
    • 인터페이스는 생성자가 없다.

인터페이스는 추상 클래스보다 더 강력한 추상화를 제공하여 객체간의 관계에서 낮은 결합도를 가져갈 수 있다.
반면, 추상클래스는 상속의 재사용성을 가져가며 약간의 디커플링도 가져갈 수 있다.


Java8+ 인터페이스

  • default 메서드 추가
    • 코드 호환성을 유지하면서 기능 확장하기 위해 추가.
    • 오버라이딩 가능
  • static 메서드 추가
    • default와 유사하지만 오버라이딩 불가능(오버라이딩은 런타임에 결정나지만 static은 컴파일타임에 결정나기 때문)

카테고리:

업데이트:

댓글남기기