1 분 소요

클래스를 설계도에 비유한다면 추상클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도란, 단어 의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라, 단지 미완성 메서드(추상메서드)들 포함하고 있다는 의미이다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성활 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.

인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와는 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 어떠한 요소도 허용하지 않는다. 추상클래스를 부분적으로만 완성된 ‘미완성 설계도’라고 한다면, 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려져 있는 ‘기본 설계도’라고 할 수 있다. 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러개의 인터페이스로부터 상속을 받는 것이 가능하다.

  1. 다중 상속의 문제점과 인터페이스 해결 방식:
    • 클래스의 다중 상속은 다이아몬드 문제를 일으킬 수 있습니다. 이는 두 상위 클래스가 동일한 메서드를 가질 때, 하위 클래스에서 어떤 메서드를 상속받을지 모호해지는 문제입니다. 인터페이스를 사용하면 이러한 문제가 발생하지 않습니다. 인터페이스는 구현을 포함하지 않기 때문에, 상속받는 클래스에서 명확히 구현을 제공해야 합니다. 이로 인해 다중 상속의 모호성을 해결할 수 있습니다.
  2. 자바 8의 ‘default 메서드’:
    • 자바 8에서 도입된 default 메서드는 인터페이스에 새로운 기능을 추가하면서 기존 구현을 깨트리지 않기 위해 사용됩니다. 하지만 이를 사용할 때는 주의가 필요합니다. 다중 상속 시, 여러 인터페이스에서 동일한 시그니처를 가진 default 메서드가 있을 경우, 어떤 메서드를 상속받을지 명확히 해야 합니다. 또한, default 메서드의 과도한 사용은 인터페이스의 명확성을 떨어뜨릴 수 있습니다.

카테고리:

업데이트: