Abstract vs Interface

sangyong·2023년 6월 12일
0

Java

목록 보기
2/3

Abstract vs Interface

Interface와 Abstract Class는 상속(extends)받거나, 구현(implements)하는 Class가 Interface나 Abstract Class 안에 있는 Abstract Method를 구현하도록 강제하는 공통점을 가지고 있다.

Interface

Interface는 부모, 자식 관계인 상속 관계에 얽메이지 않고, 공통 기능이 필요할 때, Abstract Method를 정의해놓고 구현(implements)하는 Class에서 각 기능들을 Overridng하여 여러가지 형태로 구현할 수 있기에 다형성과 연관되어 있다.
Java에서 다중 상속이 안되어 발생하는 Abstract Class의 한계도 보완해줄 수 있다.
Interface의 implements에는 제한이 없어 다중 구현이 가능하다.

Abstract Class

Abstract Class는 부모와 자식 즉, 상속 관계에서 Abstract Class를 상속(extends)받으며 같은 부모 Class(여기서는 Abstract Class)를 상속받는 자식 Class들 간에 공통 기능을 각각 구현하고, 확장시키며 상속과 관련되어 있다.

상속은 SuperClass의 기능을 이용, 확장 하기 위해 사용된다.
Abstract Class는 IS - A "~이다"이고, Interface는 HAS - A "~을 할 수 있는"이다.

class Vehicle extends Car, Motorcycle {
    @Override
    public void run(){
        super.drive();
    }
}

만약 Java에서 다중 상속이 가능했다면 Car, Motocycle에 각각 drive method가 정의되어 있을 경우 무엇을 상속받아 Overridng 한건지 모호해진다.
이것이 다중 상속의 모호성이고, 이 때문에 Java는 다중 상속을 막아 놓았다.

핵심


Abstract Class의 사용 목적을 살펴보면, 사실 위에 Talkable Interface는 동일한 부모 Class인 Animal을 상속받는 Kim, Gil에서 사용하고 있는 기능이다.


여기서 Interface의 사용 목적을 알 수 있는데, Eatable Interface를 사용함으로써 AnimalPlant 각각 다른 부모 Class를 상속받고 있는 Monkey, Kim, Gil, Venus Flaytrap에게 공통적인 기능인 먹는 기능을 Interface를 사용함으로써 상속 관계가 다름에도 기능을 구현하도록 강제 할 수 있다.

출처 : https://velog.io/@gillog/Java-Interface-vs-Abstract-Class-%EC%A0%95%EB%A6%AC

0개의 댓글