Java/자바 정리

71. static 메서드 – 인터페이스 자체에서 실행하는 유틸 기능

코딩하는냥이 2025. 5. 8. 14:46
반응형

이번 글에서는 인터페이스에서 정적(static) 메서드를 정의하고 사용하는 방법을 학습합니다.
default 메서드와 달리 static 메서드는 인터페이스 이름으로 직접 호출하며,
보통 공통적인 유틸리티 기능을 정의할 때 사용됩니다.


📦 인터페이스 코드 (RemoteControl.java)

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("리모콘 건전지를 교환합니다.");
	}
}

✔ static 메서드는 인터페이스명.메서드명()으로 호출
✔ 인스턴스를 생성하지 않아도 사용 가능
✔ 구현 클래스에서 재정의(overriding) 불가


📦 구현 클래스 – TV & 오디오

Television.javaAudio.java는 각각 RemoteControl을 구현하며,
turnOn(), setVolume(), setMute()를 필요에 따라 구현합니다.
(내용 생략 — 이전 글과 동일)


📌 실행 클래스 (RemoteControlExample.java)

package ch08.sec06;

public class RemoteControlExample {
	public static void main(String[] args) {
		RemoteControl rc = new Television();

		rc.turnOn();
		rc.setVolume(5);
		rc.setMute(true);
		rc.setMute(false);

		System.out.println();

		rc = new Audio();
		rc.turnOn();
		rc.setVolume(5);
		rc.setMute(true);
		rc.setMute(false);

		System.out.println();

		RemoteControl.changeBattery(); // static 메서드 직접 호출
	}
}

💻 실행 결과

TV를 켭니다.
현재 TV 볼륨 : 5
무음 처리합니다.
현재 TV 볼륨 : 0
무음 해제합니다.

Audio를 켭니다.
현재 Audio 볼륨 : 5
무음 처리합니다.
현재 Audio 볼륨 : 0
무음 해제합니다.
현재 Audio 볼륨 : 5

리모콘 건전지를 교환합니다.

💬 코드 설명

  • RemoteControl.changeBattery();
    인터페이스명으로 직접 호출하는 정적 메서드
  • 객체를 생성하지 않아도 사용할 수 있으며,
    공통 도구 기능, 초기화 도우미, 상태 확인 등에 주로 사용

📌 간단 정리

요소 특징
default 구현 클래스에서 오버라이딩 가능
static 인터페이스 이름으로 직접 호출, 오버라이딩 불가

💡 포인트 정리

  • static 메서드는 인스턴스 없이 인터페이스 이름으로 직접 호출
  • 구현 클래스와 무관하게 고정된 유틸 기능을 제공할 수 있음
  • default 메서드와 달리 상속(재정의)이 불가능
  • 인터페이스를 도구 모음처럼 활용할 수 있는 구조를 제공

📌 정리하자면,
static 메서드는 인터페이스의 공통적인 기능을 제공하는 유틸리티 역할로,

구현 클래스에 영향을 주지 않고 독립적으로 호출 가능한 장점이 있습니다.