All Articles

추상클래스 vs 인터페이스

 개인적으로, 자바를 공부하며 자꾸만 그 차이점을 헷갈리게 되었던 개념이 추상클래스와 인터페이스다. 문득문득 머릿 속에서 “차이가 뭐더라?” 생각이 들 때가 있는데 매번 새로 찾아보니 시간이 많이 소요되었다. 그래서 따로 검색하지 않아도 빠르게 다시 확인할 수 있도록 스스로 정리했다.

추상클래스와 인터페이스의 공통점은 아래와 같다.

  • 객체를 직접 생성할 수 없다.(자식 클래스만이 객체를 직접 생성할 수 있다.)
  • 오로지 상속을 해주기 위해 존재한다.
  • 좀더 구체적으로 말하자면, 추상 메서드를 상속시켜서 강제로 구현하게끔 만든다. 이를 통해, 상속받은 클래스로부터 해당 기능을 보장받을 수 있다. 자식 클래스는 그 추상 메서드를 override해서 메서드를 완성시킨다.(완성시켜야만 한다.)

추상클래스(Abstract Class)

  • 자식클래스에서 extends 키워드로 상속받는다.
  • 일부 메서드가 추상 메서드이다.

    • 추상 메서드란? 선언부만 작성하고 구현부가 작성되지 않은 미완성의 메서드
  • 자식클래스는 하나의 추상클래스만 상속 가능하다.
  • 비유하자면, 열린 결말로 끝낸 책과도 같다.

인터페이스(Interface)

  • 자식클래스에서 implements 키워드로 상속받는다.(* 정확히는 상속받는다 보다 구현한다 가 옳은 표현이라고 본다.)
  • 모든 메서드가 추상 메서드이다.
  • 자식클래스는 여러 인터페이스를 구현할 수 있다.
  • 참고로 인터페이스는 인터페이스만 상속받을 수 있다.
  • 비유하자면, 목차만 적어둔 책과도 같다.

박쥐참새라는 각각의 자식클래스가 있을 경우, 포유류, 조류는 추상클래스로 적당한 개념이고, 비행은 인터페이스로 적당한 개념이다.


[참고자료]
https://www.youtube.com/watch?v=vrhIxBWSJ04