추상클래스는 실체 클래스들의 공통된 필드와 메소드의 이름을 통일하거나 실체 클래스를 작성할 때 시간을 절약하기 위해 사용한다.

클래스 선언에 abstract 키워드를 붙히면 추상클래스가 되는데 추상 클래스는 new 연산자를 이용해 인스턴스(객체)를 생성하지 못하고 오직

상속을 통해 자식 클래스만 만들 수 있다.

추상 클래스도 일반 클래스와 같이 필드, 생성자, 메소드 선언을 할 수 있는데 메소드에 abstract 키워드를 붙히면 추상 메소드가 되어

상속받은 자식클래스에서 오버라이딩(재정의)하지 않을시 컴파일 에러가 발생하게 된다.


인터페이스는 객체의 사용 방법을 정의한 타입으로 인터페이스를 구현한 객체들에 대해서 동일한 동작을 약속하기 위해 사용한다.

인터페이스는 상수 필드만 가질수 있으며, default메소드와 static메소드를 제외한 모든 메소드는 추상 메소드가 된다.

default메소드란 재정의 하지 않아도 인터페이스 내부에서 실행 코드를 갖을 수 있고

static메소드란 인터페이스를 구현한 객체를 만들지 않고 인터페이스에서 실행할 수 있는 메소드이다.


부모 타입에는 모든 자식 객체가 대입될 수 있고 인터페이스 타입에는 모든 구현객체가 대입될 수 있기 때문에 객체의 타입을 몰라도 사용할 수 있다.

이게 추상클래스와 인터페이스를 사용하는 가장 큰 이유가 아닐까 생각한다.


혼잣말 한다고 생각하세요~