Interface VS Abstract Class

고승원·2022년 12월 11일
0

CS

목록 보기
2/12

추상클래스와 인터페이스는 extends, implements를 통해 상속, 구현하여 사용하기에 비슷하다 생각하고 있었다.

정의

  • 추상클래스는 클래스내의 추상 메서드가 하나 이상 포함되면 추상 클래스로 정의된다.
  • 인터페이스는 클래스내의 모든 메서드가 추상 클래스이다. (자바 8부터 default 메서드도 사용 가능)

결국 추상 메서드를 구현하여 사용하는 것으로 같다고 보면 되나??

→ 결론부터 말하면 그렇지 않다. 추상 클래스와 인터페이스의 사용목적이 다르기 때문이다.

추상클래스는 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용한다.

다음과 같이 전기차와 가솔린차 클래스가 있다.

추상 클래스는 공통되는 속성을 추상화하고, 서비스를 강제화한다.

추상 클래스의 가장 중요한 것은 공통 사항을 집중화 하는 것 즉 is a(~는 ~다) 이다.

추상클래스의 특징을 정리하면

  • 공통 분모를 일반화하여 일관적으로 관리할 수 있다.
    → (전기차와 가솔린차를 모두 관리할 수 있다.)
  • 추상 클래스를 상속하는 집합간에는 연관관계가 있다.
  • 단일 상속만 가능하다.

인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용한다.

다음과 같이 movable이라는 인터페이스가 있고 go, stop, turn 세가지 기능이 있다.

인터페이스는 상속과는 달리 기능을 구현하기만 하면 된다.

인터페이스의 가장 중요한 것은 필요한 기능을 구현하는 것 즉 has a(~는 ~할 수 있다)이다.

자동차와 코끼리는 전혀 상관이 없지만, 인터페이스에서 필요하는 기능을 구현하기만 한다면 클라이언트가 필요로하는 위치에 부품처럼 교체할 수 있다.

인터페이스의 특징을 정리하면

  • 원하는 기능을 구현하면 부품처럼 교체하여 사용할 수 이
  • 인터페이스를 구현하는 집합간에는 관계가 없을 수 있습니다.
  • 기능만 구현하면 여러개를 implements할 수 있다.
    → 다중 상속이 가능하다.

차이점

클라이언트와의 관계

  • 추상클래스는 클라이언트에 상관없이 Car가 먼저 존재하게 되고, 클라이언트가 전기, 가솔린중 어떤 것을 사용하는지 결정한다.
  • 인터페이스는 클라이언트가 움직이는게 필요한데, 필요한 기능을 인터페이스에 정의해놨으니까 너네가 구현해서 구현한 객체를 포장해서 연결하라.

용도

  • 인터페이스는 필요에 따라 관계를 생성하는 것이고
  • 상속은 DNA처럼 물려받는 것이다.

자바 8부터 추가된 인터페이스의 기능

  • 디폴트 메서드 정의 가능 (인스턴스 선언시 사용 가능)
  • 스태틱 메서드 정의 가능 (인스턴스 선언 없이 사용 가능)
  • private static 메서드 사용 가능( 자바 9부터)

참고

이펙티브 자바 3/E

자바 객체지향 강의 30강 - 추상클래스와 인터페이스의 차이

추상클래스 vs 인터페이스 (용도차이)

profile
봄은 영어로 스프링

0개의 댓글