8. 인터페이스
인터페이스
인터페이스는 객체의 사용 방법을 정의한 타입이다.
객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다.
개발 코드와 객체가 서로 통신하는 접점 역할을 한다.
인터페이스 사용 이유
개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다.
인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다. 따라서 개발 코드 측변에서는 코드 변경 없이 실행 내용과 리턴값을 다양화 할 수 있다는 장점을 가지게 된다.
인터페이스 구성
interface RemoteControl {
//상수 : 고정값, 변경불가, 초기값 꼭 지정!
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
//추상 메소드 : 구현해야할 메소드
public void turnOn();
public void turnOff();
//디폴트 메소드 : 구현 객체가 가직 있다 보면 됨
default void setMute(boolean mute) {
if(mute){
System.out.println("무음 처리합니다.");
}else{
System.out.println("무음 해제합니다.");
}
}
//정적 메소드 : 인터페이스에서 호출 가능
static void changeBattery() {
System.out.println("건전지를 교환합니다.");
}
}
- 상수 필드(Constant Field)
- 상수는 인터페이스에 고정된 값으로 런타임 시에 데이터를 바꿀 수 없다.
- 추상 메소드(Abstract Method)
- 객체가 가지고 있는 메소드를 설명한 것, 호출 시 어떤 매개값이 필요하고, 리턴 타입이 무엇인지만 알려준다.
- 디폴트 메소드(Default Method)
- 디폴트 메소드는 인터페이스에 선언되지만 사실은 구현 객체가 가지고 있는 인스턴스 메소드라고 생각해야 한다.
- 자바 8에서 디폴트 메소드를 허용한 이유는 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해서이다.
- 기존 인터페이스의 이름과 추상 메소드의 변경 없이 디폴트 메소드만 추가할 수 있기 때문에,
- 이전에 개발한 구현 클래스를 그대로 사용할 수 있으면서 새롭게 개발하는 클래스는 디폴트 메소드를 활용할 수 있다.
- 정적 메소드(Static Method)
- 디폴트 메소드와 달리 구현 객체가 없어도 인터페이스만으로 호출이 가능하다.
인터페이스를 구현한 구현 클래스
인터페이스에 선언된 추상 메소드의 실체 메소드를 선언해야 한다.
구현 클래스에서 인터페이스의 추상 메소드들에 대한 실체 메소드를 작성할 때 주의할 점은
인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 갖기 때문에, public보다 더 낮은 접근 제한으로 작성할 수 없다.
만약 인터페이스에 선언된 추상 메소드에 대응하는 실체 메소드를 구현 클래스가 작성하지 않으면,
구현 클래스는 자동적으로 추상 클래스가 된다. 그렇기 때문에 클래스 선언부에 abstract 키워드를 추가해야한다.
익명 구현 객체
일회성의 구현 객체를 만들기 위해 소스 파일을 만들고 클래스를 선언하는 것은 비효율적이다.
자바는 소스 파일을 만들지 않고도 구현 객체를 만들 수 있는 방법을 제공하는데, 그것이 익명 구현 객체 이다.
람다식은 인터페이스의 익명 구현 객체를 만들기 때문에 잘 익혀두어야한다!
익명 구현 객체 작성시 끝에는 세미콜론(;)을 붙여야 한다.
[자문자답 문제]
1. 인터페이스를 사용하는 이유와 장점을 서술하세요.
답)
이유 : 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다.
장점 : 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로
어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다.
따라서 개발 코드 측면에서는 코드 변경 없이 실행 내용과 리턴값을 다양화할 수 있다는 장점을 가지게 된다.
2. 인터페이스는 ( )를 생성할 수 없기 때문에 ( )를 가질 수 없다.
답) 객체, 생성자
3. 인터페이스에 상수 선언 후 컴파일하면 상수에 자동으로 ( )가 붙는다.
인터페이스에 추상메소드 선언 후 컴파일하면 추상메소드에 자동으로 ( )가 붙는다.
답) public static final, public abstract
4. 인터페이스로 구현객체를 사용하는 방법으로 '익명 구현 객체'가 있는데, 익명 구현 객체를 사용하는 이유는?
답)
인터페이스는 구현 클래스를 만들어 사용하는 것이 일반적이고, 클래스를 재사용할 수 있기 때문에 편리하지만,
일회성의 구현 객체를 만들기 위해 소스 파일을 만들고 클래스를 선언하는 것은 비효율적이다.
자바는 소스 파일을 만들지 않고도 구현 객체를 만들 수 있는 방법을 제공하는데, 그것이 익명 구현 객체이다.
해당 포스트는 이것이 자바다(신용권의 Java 프로그래밍 정복)을 읽은 후 기록한 내용입니다.
참고서적링크 : https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=50563128
이것이 자바다
15년 이상 자바 언어를 교육해온 자바 전문강사의 노하우를 아낌 없이 담아낸 자바 입문서. 저자 직강의 인터넷 강의와 Q/A를 위한 커뮤니티(네이커 카페)까지 무료로 제공하여 자바 개발자로 가
www.aladin.co.kr