[D] 인터페이스와 추상클래스

[원본 링크]

인터페이스
인터페이스는 정의되지 않은 메서드만을 모아놓는 규약이며, 완성되지 않은 타입이다.
멤버변수나 메서드 구현은 불가능하다.

인터페이스를 구현하는 타입은 반드시 인터페이스 내의 메서드를 오버라이딩해야 한다.
따라서, 해당 인터페이스를 구현하는 타입들을 하나의 타입처럼 다룰 수 있게 해주는 것이다.

선언법은 간결하다.
interface** 인터페이스명**
{ 메서드들... }

정의되지 않은 메서드는, 그냥 중괄호 몸체를 날려버리면 된다.
반환타입 메서드명(인자...);

앞에 추상메서드를 뜻하는 abstract를 붙여도 된다.
abstract****반환타입 메서드명(인자...);

아래는 그 간단한 예다.
클래스 B와 C는 인터페이스 A를 구현한다. image

image


추상 클래스
이건 인터페이스와 클래스가 혼합된 형태를 가진다.

abstract class** 추상클래스명**
**{ ...멤버들... } **

인터페이스와 마찬가지로 정의되지 않은 메서드를 둘 수 있으므로, 이 또한 완성되지 않은 타입이다. 반드시 서브타입을 통해 구현해 사용해야 한다.

하지만 클래스와 마찬가지로 멤버변수와 메서드 구현도 둘 수 있다.

이런 적당한 제약과 유연성때문에 몇몇 디자인 패턴에 사용된다. image

image

그렇다.