인터페이스(Interface)는 구현 방법이 아니라 행동에 대한 규약(protocol)을 정의하는 역할을 합니다. 즉, 어떤 클래스가 인터페이스를 구현(implement)한다는 것은 해당 인터페이스가 정의한 규약을 그대로 따르겠다는 의미입니다.
그렇다면 왜 자바에서는 인터페이스의 변수가 자동으로 static이고 final로 선언될까요? 각각의 이유를 살펴보겠습니다.
1. 인터페이스 변수가 static인 이유
자바의 인터페이스는 그 자체로 객체(인스턴스)를 생성할 수 없습니다. 인스턴스가 존재하지 않기 때문에 변수 값도 반드시 정적(static) 컨텍스트, 즉 객체와 무관하게 접근 가능한 영역에 할당되어야 합니다.
- 인터페이스는 스스로 인스턴스화(instantiate)될 수 없습니다.
- 따라서 변수의 값을 저장하려면 인스턴스 없이도 존재할 수 있는 static 변수여야 합니다.
2. 인터페이스 변수가 final인 이유
final 제어자는 인터페이스 변수에 할당된 값이 재할당될 수 없는 진짜 상수(true constant)임을 보장합니다. 다시 말해, 인터페이스에는 상수만 선언할 수 있으며 인스턴스 변수는 선언할 수 없습니다.
- final 키워드 덕분에 한 번 초기화된 값은 변경할 수 없습니다.
- 인터페이스는 오직 상수(constant)만 가질 수 있으며, 가변적인 인스턴스 변수를 가질 수 없습니다.
인터페이스 선언 템플릿
interface interfaceName{
// 원하는 만큼의 final, static 변수 선언
datatype variableName = value;
// 원하는 만큼의 추상 메서드 선언
returntype methodName(list of parameters or no parameters);
}정리하면, 인터페이스 변수는 인스턴스 생성이 불가능하기 때문에 static이어야 하고, 값의 일관성과 불변성을 유지하기 위해 final이어야 합니다. 이 두 특성이 결합되어 인터페이스 변수는 항상 public static final 상수로 동작하게 됩니다.