추상 클래스
- '미완성 설계도'라는 별명으로 말 그대로 미완성이여서 인스턴스(객체)를 생성할 수 없습니다.
- => 인스턴스를 생성하기 위해서는 상속 받아 자식클래스에서 추상 클래스 내에 있는 모든 추상 메서드를 구현부를 오버라이딩 해줘야 합니다.
- 상속 받은 자식 클래스는 추상 클래스 안에 있는 모두 추상 메서드를 오버라이딩해야합니다.
- 만약 추상클래스를 new연산자로 생성하면 에러가 발생!
public abstract class 클래스명 {
}
추상 클래스 사용 목적
: 공통적인 메서드 부분만 추상클래스에 작성하고 차이점이 존재하는 부분은 실체 클래스에서 따로 작성함.
인터페이스
- 인터페이스는 '기본 설계도'라는 별명으로 상수형 필드와 추상 메서드만 가진 추상 클래스이다.
- 인터페이스는 추상메서드, 일반메서드 모두 반드시 오버라이딩을 해줘야 합니다.
public interface 인터페이스명 {
public abstract void 메서드이름 ( );
public void 메서드이름( );
상속과 인터페이스
<상속>
- 객체지향의 상속은 상위 클래스의 특성을 재사용하는 것이 아닙니다.
- 객체지향의 상속은 상위 클래스의 특성을 확장하는 것입니다.
- 객체지향의 상속은 is kind of 관계를 만족해야 합니다.
<인터페이스>
- 인터페이스는 구현 클래스 is able to 인터페이스라는 관계를 만족해야 합니다.
- 즉, 무엇을 할 수 있는 이란 표현입니다.
- 인터페이스는 클래스가 무엇을 할 수 있다라고 하는 기능을 구현하도록 강제하는 특징이 있음.
결론은!
상위 클래스는 물려줄 특성이 풍성할수록 좋고, 인터페이스는 구현을 강제할 메서드의 개수가 적을 수 록 좋다는 결론에 도달할 수 있습니다!
추상메서드와 인터페이스의 공통점과 차이점
공통점)
- 추상 메서드를 가진다.
- 객체 생성이 불가하며 자료형(타입)으로 사용된다.
차이점)
- 인터페이스
- 상수형 필드, 추상메서드만 가진다.
- 추상 메서드를 구현만 하도록 한다.
- 다형성을 지원한다.
- 대표적으로 JDBC가 있는데 이럴 때는 각 DBMS 들이 자신의 기능에 맞게 인터페이스의 정의된 메서드를 구현한 느낌.
- 추상 클래스
- 클래스가 가지는 모든 속성과 기능을 가진다.
- 추상 메서드는 구현 및 상속의 기능을 가진다.
- 단일 상속만 지원한다.
- 동물 상속 관계에서 하위 클래스인 고양이,강아지 등등은 울어보세요() 메서드를 자신의 특징에 맞게 확장해서 사용하는 느낌
인터페이스는 implements 키워드를 사용해서 인터페이스에 정의된 메서드를 각 클래스이 목적에 맞게 기능을 구현한 느낌!
추상 클래스는 extends 키워드를 사용해서 자신의 기능들을 하위 클래스로 확장 시키는 느낌!