Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

8.6 정적 메소드 본문

이것이 자바다/08 인터페이스

8.6 정적 메소드

빌드이너프 2024. 4. 3. 16:17

인터페이스에는 정적 메소드도 선언이 가능하다

추상 메소드와 디폴트 메소드는 구현 객체가 필요하지만, 정적 메소드는 구현 객체가 없어도 인터페이스만으로도 호출할 수 있다

 

선언 방법은 클래스 정적 메소드와 동일하지만, public을 생략하더라도 자동으로 컴파일 과정에서 붙는 것이 차이점이다

public|private static 리턴타입 메소드명(매개변수, ...) {...}

 

예제

package ch08.sec06;

public interface RemoteControl {
	
	//상수 필드
	int MAX_VOLUME = 10;
	int MIN_VOLUME = 0;
	
	//추상 메소드
	void turnOn();
	void turnOff();
	void setVolume(int volume);
	
	//디폴트 메소드
	default void setMute(boolean mute) {
		if(mute) {
			System.out.println("무음");
			setVolume(MIN_VOLUME);
		} else {
			System.out.println("무음 해제");
		}
	}
	
	//정적 메소드
	static void changeBattery() {
		System.out.println("리모컨 건전지 교체");
	}
}

 

인터페이스에서 선언된 정적 메소드는 구현 객체 없이 인터페이스명으로 접근해서 호출할 수 있다

RemoteControl의 chagneBattery() 메소드는 RemoteControl.changeBattery()로 호출할 수 있다

 

정적 메소드의 실행부(중괄호 {})를 작성할 때 주의할 점

상수 필드를 제외한 추상 메소드, 디폴트 메소드, private 메소드 등을 호출할 수 없다는 것 -> 이 메소드는 구현 객체가 필요한 인스턴스 메소드이기 때문이다