개인적으로, 자바를 공부하며 자꾸만 그 차이점을 헷갈리게 되었던 개념이 추상클래스와 인터페이스다. 문득문득 머릿 속에서 “차이가 뭐더라?” 생각이 들 때가 있는데 매번 새로 찾아보니 시간이 많이 소요되었다. 그래서 따로 검색하지 않아도 빠르게 다시 확인할 수 있도록 스스로 정리했다.
추상클래스와 인터페이스의 공통점은 아래와 같다.
- 객체를 직접 생성할 수 없다.(자식 클래스만이 객체를 직접 생성할 수 있다.)
- 오로지 상속을 해주기 위해 존재한다.
- 좀더 구체적으로 말하자면, 추상 메서드를 상속시켜서 강제로 구현하게끔 만든다. 이를 통해, 상속받은 클래스로부터 해당 기능을 보장받을 수 있다. 자식 클래스는 그 추상 메서드를 override해서 메서드를 완성시킨다.(완성시켜야만 한다.)
추상클래스(Abstract Class)
- 자식클래스에서
extends
키워드로 상속받는다. -
일부 메서드가 추상 메서드이다.
- 추상 메서드란? 선언부만 작성하고 구현부가 작성되지 않은 미완성의 메서드
- 자식클래스는 하나의 추상클래스만 상속 가능하다.
- 비유하자면, 열린 결말로 끝낸 책과도 같다.
인터페이스(Interface)
- 자식클래스에서
implements
키워드로 상속받는다.(* 정확히는 상속받는다 보다 구현한다 가 옳은 표현이라고 본다.) - 모든 메서드가 추상 메서드이다.
- 자식클래스는 여러 인터페이스를 구현할 수 있다.
- 참고로 인터페이스는 인터페이스만 상속받을 수 있다.
- 비유하자면, 목차만 적어둔 책과도 같다.
박쥐
와 참새
라는 각각의 자식클래스가 있을 경우, 포유류
, 조류
는 추상클래스로 적당한 개념이고, 비행
은 인터페이스로 적당한 개념이다.