AbstractClass vs Interface
추상 클래스란(Abstract Class)
추상 클래스는 계승될 것을 전제로 한 클래스다.
Class에 abstract 수식자를 지정함으로써 추상 클래스를 정의할 수 있다.
추상 클래에스에는 추상 메소드라는 구현하지 않은 메소드를 하나 이상 정의할 수 있는데
추상 클래스를 상속받은 클래스에서는 추상 메소드를 반드시 구현해야 한다.
일반 메서드도 구현이 가능하다.
추상 클래스의 특징
- 추상 클래스는 new 연산자를 이용하여 객체를 생성할 수 없다.
- 추상 클래스는 새로운 일반 클래스를 위한 부모 클래스의 용도로만 사용된다.
- 추상 클래스는 단일 상속만 가능하며 일반 변수를 가질 수 있다.
- 추상 클래스는 동일한 부모를 가지는 클래스를 묶는 개념으로 상속을 받아서 기능을 확장시키는 것이 목적이다.
인터페이스란(Interface)
인터페이스란 추상 클래스보다 한 단계 더 추상화된 클래스이다.
인터페이스의 모든 메서드들은 추상 메소드이다.(자바 8 버전부터 default 예약어를 통해 일반 메서드 구현이 가능하다.)
그렇기때문에 abstract 키워드를 적지 않아도 된다.
추상 클래스와 마찬가지로 상속받은 클래스에서는 추상 메소드를 반드시 구현해야 한다.
인터페이스의 특징
- 인터페이스는 static final 필드만 가질 수 있고 생략이 가능하다.
- 추상 클래스와 마찬가지로 new 연산자를 사용하여 객체를 생성할 수 없다.
- 추상 클래스와 다르게 다중 상속이 가능하다.
- 인터페이스끼리 상속을 할 때는 extends 키워드를 사용한다.
차이점
- 추상클래스의 목적은 상속을 받아서 기능을 “확장”시키는 것(부모의 유전자를 물려받는다.)
- 인터페이스의 목적은 구현하는 모든 클래스에 대해 같은 동작을 보장하는 것(부모로부터 유전자를 물려받는 것이 아니라 사교적으로 필요에 따라 결합)
Comments