시스템아 미안해

추상클래스 vs 인터페이스 본문

java/객체지향

추상클래스 vs 인터페이스

if else 2022. 11. 1. 17:07

공통점 : 자식 클래스에서 반드시 오버라이딩하여 추상메소드를 상속받아야 한다.

추상클래스는 IS - A "~이다".

인터페이스는 HAS - A "~을 할 수 있는".

으로 정의한다. 추상클래스는 결국 존재의 정의, 인터페이스는 기능으로써의 역할을 한다는 것.

둘의 공통적 특징을 간단히 살펴보면

 

다중상속. 부모 추상 클래스는 다중 상속이 안된다. (일반 클래스도 다중 상속 x) 단 하나만.

그래서 존재,속성은 하나의 부모만으로 표현하고, 그 존재가 할 수 있는 기능은 여러 인터페이스를 다중상속 받아 능력있는 객체를 만든다.

 

위임. 추상클래스나 인터페이스를 상속,위임 받은 추상클래스는 추상메소드의 부분 상속이 가능하다.

다시 말해서 부모의 추상메소드를 또 한 단계 내려간 그의 자손에게 위임 가능하다는것. 반대로 일반클래스는 하나라도 override를 빼먹으면 에러를 뿜는다.

 

 

헷갈렸던 점은 둘 다 추상메소드가 들어있으니 아무거나 써서 상속받으면 되지 않을까..?

생명체 구조 예시(인간, 동물)

Swimable을 보면 인터페이스의 용도가 확연히 보인다.

이 기능을 공통적으로 적용하고 싶기도, 차별적으로 적용하고 싶기도 하다면,

Creature나 Human, Animal에 추상메소드로 적용시 이미 차별성을 잃어버린 기능이 되버린다.

추상메소드로서 모두 적용해야 하므로.(Pigeon은 수영을 못한다..)

>>유지보수 측면에서 필요한 곳에만 적용할 수 있는 곳엔 인터페이스가 알맞다.

+ Kevin은 코딩도 할 수 있고, 수영도 할 수 있도록 인터페이스를 다중상속 했다. 언제 뭐가 더 필요할 지 모르는 '기능'은 인터페이스!

만약 자식의 자식의 자식까지 모두 같은 기능을 가진다면 굳이 인터페이스를 따로 적용할 필요 없이 부모 추상 클래스에 추상메소드를 선언하면 되겠다.

이게 바로 종특이 아닐까...

출처 : https://myjamong.tistory.com/150

'java > 객체지향' 카테고리의 다른 글

캡슐화, 응집도-결합도  (0) 2022.06.28