인터페이스
- 자바에서 인터페이스(interface)는 객체의 사용 방법을 정의한 타입
인터페이스의 역할
- 개발 코드와 객체가 서로 통신하는 접점 역할 : 개발 코드가 인터페이스의
메소드를 호출하면 인터페이스는 객체의 메소드를 호출. 그렇기 때문에
개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만
알고 있으면 된다.
*개발 코드가 직접 객체의 메소드를 호출하면 간단한데,
왜 중간에 인터페이스를 둘까?**
- 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다.
인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다.
따라서, 개발 코드 측면에서는 코드 변경 없이 실행 내용과 리턴값을 다양화할 수 있다는 장점을 가지게 된다.
-'이것이 자바다'-신용권 참고
interface 인터페이스명{
//상수
타입 상수명 = 값;
//추상 메소드
타입 메소드명(매개변수,...);
//디폴트 메소드
default 타입 메소드명(매개변수,...){...}
//정적 메소드
static 타입 메소드명(매개변수){...}
}
상수 필드
- 인터페이스는 객체 사용 설명서이므로, 런타임 시 데이터를 저장할 수 있는 필드를
선언할 수 없다.
하지만, 상수 필드는 선언할 수 있다. 상수는 인터페이스에 고정된 값으로 런타임 시에 데이터를 바꿀 수 없다. ( 단, 상수 선언과 동시에 초기화해야한다. )
추상 메소드
- 추상메소드는 객체가 가지고 있는 메소드를 설명한 것으로, 호출할 때 어떤
매개값이 필요하고, 리턴 타입이 무엇인지만 알려준다.
( 실제 실행부는 객체( 구현 객체 )가 가지고 있다. )
디폴트 메소드
- 인터페이스에 선언되지만 사실은 객체( 구현객체 )가 가지고 있는 인스턴스
메소드. ( 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위함. )
정적 메소드
- 디폴트 메소드와 달리 객체가 없어도 인터페이스 만으로 호출 가능.
1) 인터페이스 생성
2) 인터페이스 구현 클래스
** RemoteControl에는 3개의 추상 메소드가 있기 때문에 Television은 이 추상 메소드들에 대한 실체 메소드를 가지고 있어야 한다. **
** 구현 클래스에서 인터페이스와 추상 메소드들에 대한 실체 메소드를 작성할 때 주의할 점은 인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 갖기 때문에 public보다 더 낮은 접근 제한으로 작성할 수 없다. **
3) 인터페이스 사용
4) 실행 결과
[참고 자료 및 문헌]
이것이 자바다(신용권의 Java 프로그래밍 정복)