Contents

추상클래스 vs 인터페이스

추상클래스

자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다. 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해준다. 추상 클래스는 이를 상속할 각 객체들의 공통점을 찾아 추상화시켜 놓은 것으로, 상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현해야 할 경우 사용한다.

인터페이스

인터페이스는 상속 관계를 타고 올라갔을 때 다른 조상 클래스를 상속하더라도, 같은 기능이 필요할 경우 사용한다. 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용한다. 예를 들어 Comparable, Cloneable 인터페이스는 여러 클래스들에서 구현되는데, 구현클래스들 간에 관련성이 없다.

사용 예시

추상클래스는 IS - A, 즉 “~이다” 로 표현되는 관계에 사용한다. 인터페이스는 HAS - A, 즉 “~을 할 수 있는"로 표현되는 관계에 사용된다.

https://user-images.githubusercontent.com/46465928/160078435-944951ce-6385-400c-9b3d-7cc5867132c4.png

위의 예제에서 인간과 동물은 생명체를 상속하고 각 생명체들은 구분에 따라 인간과 동물을 상속한다. 이러한 관계는 추상클래스로 표현할 수 있다. 그리고 각각 할 수 있는 기능들은 인터페이스로 구현할 수 있다.

인터페이스와 추상 클래스는 존재 목적이 다르다. 추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는 데 있다. 반면에 인터페이스는 구현을 강제함으로써 구현 객체의 같은 동작을 보장할 수 있다.

참고

https://velog.io/@dongvelop/%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://myjamong.tistory.com/150

https://brunch.co.kr/@kd4/6