📕 JAVA/인터페이스

2. 인터페이스 선언

개발진스 2023. 3. 28. 13:26
728x90

1. 인터페이스 역할

2. 인터페이스 선언 

3. 인터페이스 구현

4. 인터페이스 사용

5. 인터페이스 타입 변환과 다형성

6. 인터페이스 상속

7. 인터페이스 디폴트 메서드와 확장

 

 


인터페이스 선언

 

Java7까지는 실행 블록이 없는 추상 메서드로만 선언이 가능했지만, Java8부터는 디폴트 메서드와 정적 메서드도 선언이 가능

 

1) 상수 필드

 

인터페이스는 객체 사용 설명서이므로 런타임 시 데이터를 저장할 수 있는 필드를 선언할 수 없다.

그러나 상수 필드는 선언이 가능하다.

상수는 인터페이스에 고정된 값으로 런타임 시에 데이터를 바꿀 수 없다.

상수를 선언할 때에는 반드시 초기값을 대입해야 한다.

 

2) 추상 메소드

 

추상 메소드는 객체가 가지고 있는 메소드를 설명한 것으로 호출할 때 어떤 매개값이 필요하고, 리턴 타입이 무엇인지만 알려준다.

실제 실행부는 객체 (구현 객체)가 가지고 있다.

public abstract은 명시적으로 선언하지 않아도, Compile Time에 자동으로 선언된다

 

3) 디폴트 메소드

 

디폴트 메소드는 인터페이스에 선언되지만 시실은 객체 (구현 객체)가 가지고 있는 인스턴스 메소드라고 생각해야 한다.

자바에서 디폴트 메소드를 허용한 이유는 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해서이다.

 

4) 정적 메소드

 

정적 메소드도 역시 자바부터 작성할 수 있는데 디폴트 메소드 외는 달리 객체가 없어도 인터페이스만으로 호출이 가능하다.

 

public interface RemoteControl {
	//상수 메소드
	public int MAX_VOULME = 10;
	public int MIN_VOLUME = 0;

	//추상 메소드
	void turnOn();
	void turnOff();
	void setVolume(int volume);
	
	//디폴트 메소드
	default void setMute(boolean mute) {
		if(mute) {
			System.out.println("무음처리 합니다");
		} else {
			System.out.println("무음해제 합니다");
		}
	}
	
	//정적 메소드
	static void changeBattery() {
		System.out.println("건전지를 교환합니다");
	}
}

 


 

참고자료 : 이것이 자바다

728x90