Abstract Class와 Interface는 둘 다 상속이 가능하고 구현해야 될 기능을 정의해 주지만 사용 목적에 따라 쓰임새가 다릅니다. Abstract Class와 Interface의 가장 큰 차이점은 다중 상속 가능 여부입니다.
Abstract Class는 한 개의 클래스만 상속 가능하며 자식 클래스에 일반 메서드를 작성해서 물려줄 수 있습니다. 부모 클래스가 가진 기능들을 구현해야 할 때 사용합니다. Interface는 공통적인 기능이 필요할 때 사용합니다.
아래의 추상 클래스 예제로 설명드리겠습니다.
위에서 Magician과 Warrior는 공통적으로 Human이고 Human의 기능들을 상속받습니다. 하지만 각 추상 클래스의 속성이 다르므로 구현되어야 할 기능은 따로 정의됩니다. 따로 정의되는 기능을 인터페이스로 구현합니다.
하지만 위 다이어그램만 본다면 Basic Cast Able이나 Basic Fence Able은 그냥 추상 클래스에 포함해서 넣을 법 합니다. 하지만 Magician 추상 클래스나 Warrior 추상 클래스를 상속받은 Fire Magic Warroir 클래스 같은 경우 불 마법도 쓸 줄 알고 불검술도 쓸 줄 압니다.