본문 바로가기
알고리즘/디자인 패턴

4. 인터페이스 interface 란?

by 지칸 2021. 3. 12.

안녕하세요. 지칸입니다.

본 글에서는 abstract class, inheritance와 비슷한 interface, implements를 설명하겠습니다.


1) 인터페이스란?

인터페이스는 추상화 클래스와 몇가지 차이점을 제외하면 매우 유사합니다.

- 인터페이스는 인스턴스 변수를 가질 수 없다. (정적 클래스 변수는 가능)

- 모든 매서드는 추상화 매서드이다. (인터페이스에는 매서드 바디가 없다.)

 

자바에서는 "interface" keyword를 통해 정의할 수 있으며 오직 추상화 매서드만 가지고 있기 때문에

추상화 클래스보다 상위 개념의 추상화입니다.

자바에서는 "implements" keyword를 통해 구현할 수 있습니다.

extends와 implements의 그래프 표현방식이 다르게 생겼습니다.

Steerable의 모든 매서드는 추상화이기 때문에 implements 받는 Car는 모든 매서드를 오버라이딩을 해야 합니다.


2) 추상화 클래스 vs 인터페이스

언제 추상화 클래스를 쓰고 언제 인터페이스를 쓸까요???

상속관계가 절대적으로 명확할 때만 추상화 클래스를 사용합니다.

명확하지 않으면 인터페이스를 쓰면 됩니다. 

앞에서 설명한 것처럼 인터페이스가 추상화클래스보다 더 상위의 추상화 개념이기 때문입니다.

또한, 클래스의 일부분만 나타내는 매서드가 필요할 때 인터페이스를 사용합니다.

 

혹은, subclass가 다른 상속이 필요할 때 인터페이스를 쓰기도 합니다. (자바는 다중 상속이 안됨)


3) 인터페이스 다형성

추상화 클래스와 인터페이스를 모두 적용하여 2장의 예시를 확장해봤습니다.

인터페이스 Sayable를 추가하여 각 클래스에 implement시켰습니다.

객체 생성코드를 보시면 에러나는 이유를 보면 쉽게 찾을 수 있습니다.

Robot은 Animal 추상화 클래스를 상속받지 않기 때문에 aref = robo 로 정의할 수 없습니다.

Cat와 Robot의 Canine 문제도 동일한 이유로 에러가 발생합니다.

반응형

댓글