인터페이스의 역할
인터페이스는 객체의 교환성을 높여주기 떄문에 다형성을 구현하는 매우 중요한 역할을 한다.
개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메서드를 호출하면 인터페이스는 객체의 메서드를 호출한다. 그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메서드만 알고 있으면 된다.
인터페이스를 사용하는 이유?
개발 코드가 직접 객체의 메서드를 호출하면 되는데 굳이 인터페이스를 사용하는 것일까 의문점이 생길 수 있다.
그 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 변경 할 수 있도록 하기 위해서이다.
인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴 값이 다를 수 있다. 따라서 개발 코드측면에서는 코드 변경없이 실행 내용과 리턴값을 다양화할 수 있다는 장점을 가지게 된다.
인터페이스 선언
[ public ] interface 인터페이스명 { }
클래스는 필드, 생성자,메서드를 구성 멤버로 가지는데 비해, 인터페이스는 상수와 메서드만을 구성멤버로 가진다.
인터페이스는 객체로 생성할 수 없기 떄문에 생성자를 가질 수 없다.
상수 필드 Constant Field
인터페이스는 객체 사용설명서이므로 런타임 시 데이터를 저장할 수 있는 필드를 선언할 수 없다.
그러나 상수 필드는 선언이 가능하다. 상수는 인터페이스에 고정된 값으로 런타임 시에 데이터를 바꿀 수 없다. 상수를 선언할 떄에는 반드시 초기값을 대입해야 한다.
상수 필드 선언
상수는 public static final 로 선언한다. 인터페이스에 선언된 필드는 모두 public static final의 특성을 갖는다.
[ public static final ] 타입 상수명 = 값;
public interface RemoteControl {
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
}
인터페이스 상수는 static {} 블록으로 초기화할 수 없기 때문에 반드시 선언과 동시에 초기값을 지정해야 한다.
추상 메서드 Abstract Method
객체가 가지고 있는 메서드를 설명한 것으로 호출 할 때 어떤 매개값이 필요하고, 리턴 타입이 무엇인지만 알려준다.
실제 시행부는 객체(구현객체)가 가지고 있다.
추상 메서드 선언
인터페이스를 통해 호출된 메서드는 최종적으로 객체에서 실행된다. 그렇기 때문에 인터페이스의 메서드는 실행 블록이 필요없는 추상 메서드로 선언된다. 추상메서드는 리턴타입, 메서드명, 매개변수만 기술되고 중괄호를 {} 붙이지 않는 메서드를 말한다.
인터페이스에 선언된 추상메서드는 모두 public abstact의 특성을 갖기 때문에 이를 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.
public interface RemoteControl {
//상수
public int MAX_VOLUME = 10; //static final 생략
public int MIN_VOLUME = 0;
//추상메서드 //메서드 선언부만 작성
public void turnOn(); //abstract생략
public void turnOff();
public void setVolume(int volume);
}
RemoteControl 인터페이스에서 추상메서드를 선언했다. 모두 리턴 타입이 void 라는 것과 turnOn() , turnOff() 메서드는 호출 시 매개값이 필요없고, setVolume() 메서드만 int 매개 값이 필요함을 알려주고 있다.
인터페이스 구현
개발 코드가 인터페이스 메서드를 호출하면 인터페이스는 객체의 메서드를 호출한다. 객체는 인터페이스에서 정의 된 추상 메서드와 동일한 메서드 이름, 매개타입, 리턴 타입을 가진 실체 메서드를 가지고 있어야 한다.
이러한 객체를 인터페이스 구현(implement) 객체라고 하고, 구현 객체를 생성하는 클래스를 구현 클래스라고 한다.
구현 클래스
구현 클래스는 보통의 클래스와 동일한데, 인터페이스 타입으로 사용할 수 있음을 알려주기 위해 클래스 선언부에 implemnets 키워드를 추가하고 인터페이스명을 명시해야한다.
public class 구현클래스명 implements 인터페이스명 {
//인터페이스에 선언된 추상 메서드의 실체 메서드 선언
}
인터페이스에 선언된 추상 메서드의 실체 메서드를 선언해야한다.
https://float.tistory.com/81?category=1008448
'java' 카테고리의 다른 글
java_12_예외처리 (0) | 2021.10.22 |
---|---|
java_ 3_조건문(if문, switch문) (0) | 2021.10.22 |
java_10_final & abstract (0) | 2021.10.21 |
java_9_ 타입 변환 & 강제 타입 변환(Casting) (0) | 2021.10.20 |
java_9_ 다형성과 Overriding (0) | 2021.10.20 |