☕ 인터페이스 역할
: 자바에서는 인터페이스는 객체의 사용 방법을 정의한 타입이다.
인터스페이스는 객체 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다.
- 자바 8에서 인터스페이스의 중요성은 더욱 커졌다. 자바 8의 람다식은 함수적 인터스페이스의 구현 객체를 생성하기 때문이다.
🥨 인터스페이스 역할 요약
- 인터스페이스는 개발코드와 객체가 서로 통신하는 접점 역할.
- 인터스페이스는 객체의 메소드를 호출.
개발 코드가 직접 객체의 메소드를 호출하면 간단한데, 중간에 인터페이스를 두는지 의문이 생길 수 있다.
그 이유는 개발코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다.
인터스페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객첵를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다. 따라서 실행내용과 리턴값을 다양화 할 수 있다는 장점이 있다.
☕ 인터스페이스 선언
: 물리적 형태는 클래스와 동일하다.
차이점은 소스를 작성할 때 선언하는 방법이 다르다.
public interface 인터스페이스명 {...}
public interface Remote{ }
클래스는 필드, 생성자, 메소드를 구성 멤버로 가지는데 인터페이스는 상수와 메소드만을 구성멤버로 가진다.
🥨 상수 필드
: 런타임시 데이터를 저장할 수 있는 필드를 선언할 수 없다. 그러나 상수 필드는 선언이 가능하다.
상수는 인터페이스 고정된 값으로 런타임시에 데이터를 바꿀 수 없다. 상수를 선언할 때에는 반드시 초기값을 대입해야한다.
public static final 타입 상수명 = 값;
public interface Remote{
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
}
🥨 추상 메소드
: 객체가 가지고 있는 메소드를 설명한 것으로 호출할 때 어떤 매개값이 필요하고, 리턴 타입이 무엇인지만 알려준다. 실제 실행부는 객체가 가지고 있다.
인터스페이스를 통해 호출된 메소드는 최정적으로 객체에서 실행된다. 그렇기 때문에 인터스페이스의 메소드는 실행블록이 필요 없는 추상 메소드로 선언한다. 추상 메소드는 리턴타입, 메소드명, 매개변수만 기술되고 중괄호 { } 붙이지 않는 메소드를 말한다. public abstract를 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.
public interface Remote{
// 상수
public int MAX_VOLUME = 10;
public int MIN_VOLIME = 0;
// 추상 메소드
public void turnOn();
public void tuenOff();
public void setVolume(int volume);
}
🥨 디폴트 메소드
: 자바 8에서 디폴트 메소드를 허용한 이유는 기존 인터스페이스를 확장해서 새로운 기능을 추가하기 위해서다.
public interface Remote{
// 상수
public int MAX_VOLUME = 10;
public int MIN_VOLIME = 0;
// 추상 메소드
public void turnOn();
public void tuenOff();
public void setVolume(int volume);
//디폴트 메소드
default void setMute(boolean mute){
if(mute){
System.out.println("무음 처리합니다")
}
else{
System.out.println("무음 해제합니다")
}
}
}
그 외...정적 메소드
☕ 인터스페이스 구현
: 객체는 인터스페이스에서 정의 된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 한다. 이래서 객체를 인터페이스 구현(implement) 객체라고 하고, 구현 객체를 생성하는 클래스를 구현 클래스라고 한다.
🥨 구현 클래스
: 인터스페이스 타입으로 사용할 수 있음을 알려주기 위해 클래스 선언부에 implements 키워드를 추가하고 인터페이스명을 명시해야한다.
public class 구현클래스명 implements 인터스페이스명 {
// 인터페에스에 선언 된 추상 메소드의 실체 메소드 선언
}
🥨 다중 인터스페이스 구현 클래스
public class 구현클래스명 implements 인터스페이스A, 인터스페이스B{
// 인터스페이스 A에 선언된 추상 메소드의 실체 메소드 선언
// 인터스페이스 B에 선언된 추상 메소드의 실체 메소드 선언
}
☕ 인터스페이스 사용
: 인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입될 경우 구현 객체의 번지를 저장한다.
☕ 타입 변환과 다형성
: 인터페이스도 다형성을 구현하는 기술이 사용된다. 오히려 요즘은 상속보다 인터스페이스를 통해 다형성을 구현하는 경우가 더 많다.
: 다형성은 하나의 타입에 대입되는 객체에 따라서 실행 결과가 다양한 형태로 나오는 성질을 말한다. 프로그램 소스코드는 변함이 없는데, 구현 객체를 교체함으로써 프로그램의 실행 결과가 다양해진다. 이것이 인터스페이스 다형성이다.
'개발&etc > JAVA' 카테고리의 다른 글
[Java] 이것이 자바다 - #상속 (0) | 2023.04.24 |
---|---|
[Java] 이것이 자바다 - #클래스 (0) | 2023.04.21 |
[Java] 이것이 자바다 - #참조타입 (0) | 2023.04.12 |
[Java] 이것이 자바다 - #연산자 (0) | 2023.04.12 |
[Java] 이것이 자바다 - #변수 (0) | 2023.04.10 |