추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스로 미완성 설계도
라고도 표현한다. 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없다.
추상클래스가 미완성 설계도라면 인터페이스는 기본 설계도
라고 할 수 있다. 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하고 클래스와 다르게 다중상속(구현)이 가능합니다.
이렇게 구분하는 이유는 다중상속의 가능 여부에 따라 용도를 정한 것이다. 자바의 특성상 한개의 클래스만 상속이 가능하여 해당 클래스의 구분을 추상클래스 상속을 통해 해결하고, 할 수 있는 기능들을 인터페이스로 구현한다.
만약 공통된 기능이 필요하다면 추상클래스를 이용해서 일반 메서드를 작성하여 자식 클래스에서 사용할 수 있도록 하면 된다. 만약 각각 다른 추상클래스를 상속하는데 공통된 기능이 필요하다면? 해당 기능을 인터페이스로 작성해서 구현한다.
추상클래스 사용 시기 : 상속 관계를 쭉 타고 올라갔을때 같은 조상클래스를 상속하는데 기능까지 완변히 똑같은 기능이 필요한 경우
인터페이스 사용 시기 : 상속 관계를 쭉 타고 올라갔을때 다른 조상클래스를 상속하는데 같은 기능이 필요할 경우 인터페이스 사용
추상 클래스 | 인터페이스 | |
---|---|---|
사용 키워드 | abstract | interface |
사용 가능 변수 | 제한 없음 | static final (상수) |
사용 가능 접근 제어자 | 제한 없음 | public |
사용 가능 메소드 | 제한없음 | 추상 메소드, 디폴트 메소드 , 정적 메소드, private method |
상속 키워드 | extends | implements |
다중 상속 가능 여부 | 불가능 | 가능 |
✅ 공통점
추상 메소드를 가지고 있어야 한다.
인스턴스화 할 수 없다.
자유로운 타입 묶음
인터페이스 다형성 이용 설계
마커 인터페이스
중복 멤버 통합
추상클래스의 다형성 이용 설계
명확한 계층 구조 추상화