본문 바로가기
👨‍🏫일문일답

[20210904] 인터페이스와 추상 클래스의 차이

by 캔 2021. 9. 14.

자바에는 인터페이스(interface)와 추상 클래스(abstract class)가 존재한다. 두 가지 모두 자바의 다형성을 보여주는 객체로서 다른 클래스에게 상속(또는 구현)이 가능하다. 인터페이스와 추상 클래스의 자식 클래스는 상속받은 클래스의 추상 메서드를 구현(메서드의 블록 안에서 수행할 작업들을 코딩)하여 사용한다. 둘 다 추상 메서드를 상속하는 것이 가능해서 비슷한 역할을 한다는 생각이 들어 그 차이를 명확히 해놓기 위해 글을 적어본다.

 

둘의 기능을 한 마디로 표현한다면, 인터페이스는 '설계도'나 '기술 명세서', 추상 클래스는 '레퍼런스'나 '참고서'라고 할 수 있다. 인터페이스는 상수(final static인 변수)와 추상 클래스로 이뤄져 있는데, 자식 클래스에서는 상속받은(구현된) 상수를 자기 클래스 어디서든 사용할 수 있고 모든 추상 메서드를 구현하여야 한다. 한편, 추상 클래스는 일반 클래스와 동일하지만 추상 메서드를 가지는 클래스를 말하며, 결국 추상 메서드가 있는 클래스는 추상 클래스이다. 인터페이스와 다르게 추상 클래스에서는 추상 메서드를 제외한 메서드를 구현할 필요가 없다.

 

즉, 인터페이스는 가지고 있는 기능을 자식 클래스가 모두 구현해야 하므로, 그대로 시공 또는 제작되어야 하는 설계도나 기술 명세서에 해당하고, 추상 클래스는 필요한 기능만 취사선택하여 구현할 수 있으므로 레퍼런스나 참고서에 빗댈 수 있다.(사실 인터페이스를 제외한 상속을 하는 모든 부모 클래스가 레퍼런스나 참고서에 가깝다고 할 수 있다.)

 

추가적으로, 인터페이스는 다른 인터페이스와 같이 상속할 수 있으며(다중 상속) , 추상 클래스는 클래스이므로 하나의 클래스만 상속할 수 있다.(단일 상속)