Interface와 Abstract Class를 같이 상속받는 경우에는 왜 그렇게 작성하였을까요? - (국민)
인터페이스와 추상클래스
| 추상 클래스 | 인터페이스 | |
|---|---|---|
| 사용키워드 | abstract | interface |
| 사용 가능 변수 | 제한없음 | static final |
| 사용 가능 접근 제어자 | 제한 없음 | public |
| 사용 가능 메서드 | 제한 없음 | abstract method, default method, static method, private method |
| 상속 키워드 | extends | implements |
| 다중 상속 가능 여부 | 불가 | 클래스에 다중구현, 인터페이스끼리 다중 상속 |
공통점
- 추상메소드를 가지고 있어야 한다
- 인스턴스화 할 수 없다.
- 인터페이스 혹은 추상클래스를 상속받아 구현한 클래스의 인스턴스 사용해야됨
- 상속받은 자손 클래스는 반드시 추상 메서드를 구현해야된다
인터페이스나 추상클래스나 똑같이 추상메서드를 통해 메소드 강제구현을 시킨다
인터페이스는 implements라는 키워드처럼 인터페이스에 정의된 메서드를 각 클래스의 목적에 맞게 기능을 구현하는 느낌
추상클래스는 자신의 기능을 하위 클래스로 확장 시키는 느낌
추상클래스의 목적은 공통적인 기능을 하는 객체들의 추상화
언제 추상클래스를 사용해야 하는지??
인터페이스와 추상클래스를 단순히 자식클래스에게 구현하도록 하는것만 생각하면 비슷하지만 다르다
추상클래스는 말그대로 추상화 시킬때 사용한다
여러 클래스들의 공통점을 찾아 추상화 시켜서 사용하는 것
예를들어 냉장고, tv, 전자레인지를 -> 가전제품이라는 추상클래스로 추상화 시켜서 사용
멤머에 public 이외의 접근자 선언이 필요한 경우
인터페이스는 구현객체가 같은 동작을 한다는 것을 보장하기 위한 목적이다

만약에 1,2,4 는 수영이 가능하고 3, 5는 수영을 하지 못한다면 swimming 메서드를 A에 넣는다면 3, 5에도 swimming 메서드를 구현해야 한다
하지만 인터페이스를 사용한다면

자유로운 타입 묶음을 통해 추상화를 이루게 한다
이외에도 날아다니는 동작 메서드나 말하는 동작 메서드를 각각 인터페이스마다 분리하여 선언하고 이를 각 자식 클래스에 자유롭게 상속시키면서 보다 구조화된 객체 지향 설계를 할 수 있다
인터페이스와 추상클래스를 함께 상속받는 이유는 다중 상속의 장점을 확용하기 위해서다.
클래스는 단일 상속만 허용하므로 인터페이스를 사용하여 여러 종류의 기능을 추가적으로 구현 할 수 있다.