목차
1. 필요성
2. 문법
3. 상속과 추상클래스
= method signature
= function prototype
인터페이스 : 메서드 사용법을 규격화하기
interface
: 메서드의 사용 규칙concrete
: 규칙에 따라 만들어진 클래스 인터페이스
|
클래스 >>>>>>>> call >>>>>>>> (인터페이스 규칙이 적용된) 클래스
- caller - callee
- client - implementer(구현체)
= public static final
= 인터페이스에 정의되는 함수는 모두 public 이다.
abstract
하다.= public abstract
public void m1() {}
의 형식을 가진다.
기존형식 :public void m1();
interface에 나중에 새 규칙이 필요해서 메서드를 추가했다.
새로 만드는 클래스들은 새 규칙에 맞춰서 추가된 메서드를 구현했다.
예전에 그 규칙을 따라 만든 다른 클래스들은 어떻게 할 것인가?
모두 새 규칙을 추가로 구현할 것인가?
예전에 작성한 클래스에서 컴파일 오류가 나지 않도록 interface에서 미리 대충 구현해 둔다.
신규 프로젝트에서도 추가된 메서드를 구현한다.
이전 프로젝트 : 예전 프로젝트 소스로 변경될 필요가 없다.
interface에서 새로 추가한 메서드로 일단 구현된 메서드이기 때문이다.
추상 메서드가 아니다!
그것을 가능하게 하는게 바로
default method
이다.
default 메서드
에서 구현할 때 쓰기 위해 있는 구현메서드
이런식으로 할꺼면
interface
로 하지말고 그냥class
로 만드는 것이 더 낫다!
상속관계의 인터페이스들
수퍼 인터페이스 <- 서브 인터페이스
다중 인터페이스 구현
두 인터페이스에 정의된 메서드가 중복되더라도 상관없다.
단, 두 메서드의 signature가 같아야 한다.
인터페이스는 다중상속도 가능하다.
interface A extends (interface)B, (interface)C
OK!
리턴 타입이 다른 중복 메서드(오버로딩이 성립하지 않는 두 메서드)의 존재가 확인될 경우
다중 상속을 허용하지 않는다!!
이미 구현된 default 메서드를 다중 상속을 통해 중복으로 받아야 할 경우
다중 상속이 불가능하다.
자식 클래스는 원하는 method만 상속받아 오버라이딩 하여 사용할 수 있다.
= 인터페이스 구현을 간소화할 수 있다.