Java week8
8주차
인터페이스 정의하는 방법
인터페이스 구현하는 방법
인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
인터페이스 상속
인터페이스의 기본 메소드 (Default Method), 자바 8
인터페이스의 static 메소드, 자바 8
인터페이스의 private 메소드, 자바 9
인터페이스 정의
사용의미 정의
- 객체를 사용하는 방벙에 대해서 정의한 타입
정의
- 상수와 메소드만을 구성 멤버로 가지게 된다.
- 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.
publix interface 인터페이스이름 {
// 타입 상수명 = 값;
public int MAX_COUNT = 10;
// 타입 메소드명(매개변수, ...)
public void upCount(int count);
public void trunOff();
// default 타입 메소드
default void printCount(int count) {
System.out.println("count: " + count);
}
// static 타입 메소드
static void turnOn() {
System.out.println("set turn on");
}
}
인터페이스 구현
동작
- 개발 코드 -> 인터페이스 호출 -> 객체에서 재 정의된 실제 메소드가 실행
구현클래스
- pulic class 클래스명
implements 인터페이스명A, 인터페이스명B
- 인터페이스명A, 인터페이스명B와 같이 1개 이상을 명시해서 다중 인터페이스를 사용할 수 있다
pulic class 클래스명 `implements 인터페이스명A,` {
인터페이스명에 정의한 추상 메소드들에 대한 실질 메소드가 있어야 함.
}
익명 구현 객체
- 일반적으로 위처럼 구현 클래스를 만들어서 사용하는 것이 일반적이고, 재 사용성에 유리하지만 일회성의 구현 객체를 만들기 위해서는 소스파일을 만들고 클래스를 선언하는 것이 비효율적이다.
- 아래와 같이 소스파일을 만들지 않고, 구현 객체를 만들 수 있다.
인터페이스 변수 = new 인터페이스() {
추상 메소드의 실체 메소드 선언
}
인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
- 하나의 예로 설명하자면
interface RemoteControl
-> (구현) Television
-> (구현) Audio
public void useRemoteControl (RemoteControl rd) { ... }
- 메소드 호출 시 어떤 구현 객체를 매개값으로 주는지에 따라서 메소드의 실행결과는 다르다
- 구현 객체가 인터페이스 타입으로 자동 변환(Promotion)이 된다는 것
- 인퍼페이스가 구현 클래스의 부모의 역할을 한다고 생각할 수 있음
인터페이스 상속
- 인퍼테이스도 (다중)상속을 지원
- public interface 하위인터페이스명
extends 상위인터페이스명A, 상위인터페이스명B
- public interface 하위인터페이스명
자바 8 인터페이스 메소드
default, static
- 자바 8에서 추가된 인터페이스의 새로운 멤버
- public 접근제한자의 특성을 가지므로 기술하지 않아도 됨
default
- 인터페이스에 정의했지만, 구현 객체에서만 사용할 수 있다.
- 모든 구현 객체가 동일한 메소드를 가지고 있다고 생각하면된다.
- 하방호환성을 위해서 제공된다.
- 인터페이스에 새롭게 정의되고, 업그레이드 하는 부분이 계속 늘어가면서 하위 호환성을 지키지 못할 수 있다.
- default 메소드로 정의하여 기존에 하위 버전의 기능을 유지하면서 기능을 업그레이드 할 수 있다는 이점이 있다.
static
- 정적 메소드는 인터페이스에서 바로 호출이 가능한 메소드 이다.