UIClientPropertyKey
UIClientPropertyKey (클라이언트 프로퍼티 키 태깅)
UIClientPropertyKey은 UI가 설정하고 L&F 변경 및 직렬화 시 지워야 하는 JComponent의 클라이언트 프로퍼티 키를 태깅하는 데만 사용하는 인터페이스예요. 이러한 모든 키는 JComponent.setUI() 메서드에서 기존 UI를 제거한 후 새 UI를 설치하기 전에 클라이언트 프로퍼티에서 제거돼요. 또한 직렬화 전에도 제거돼요.
본문
이 인터페이스는 javax.swing 패키지에 속하며, Java 9부터 도입됐어요. 구현하는 클래스가 특별히 필요한 메서드는 없고, 마커(marker) 인터페이스로 동작해 어떤 키가 UI 설정 클라이언트 프로퍼티인지 식별하는 데 사용돼요. 이렇게 태깅된 키들은 룩앤필이 바뀌거나 직렬화가 일어날 때 JComponent의 클라이언트 프로퍼티에서 자동으로 정리되어 상태를 오염시키지 않아요.
JComponent에는 클라이언트 프로퍼티라는 이름-값 쌍 저장소가 있고, UI 클래스들이 그려는 방식이나 상태를 제어하는 정보를 저장해요. 대부분의 클라이언트 프로퍼티는 일반 애플리케이션 코드가 넣는 것이지만, 룩앤필 관련 키는 UI에 의존하기 때문에 룩앤필이 바뀌면 무효가 돼요. UIClientPropertyKey을 구현한 키는 바로 이런 UI 설정용 키라는 것을 표시해요.
이 인터페이스를 구현하는 데 필요한 메서드는 없어요. 단지 타입 자체가 태그 역할을 해서, JComponent.setUI()가 기존 UI를 제거할 때나 직렬화가 수행될 때 이 키들을 자동으로 걸러낼 수 있게 해줘요. 애플리케이션이 UI 설정용 클라이언트 프로퍼티 키를 직접 만들 때 이 인터페이스를 구현하면, 커스텀 룩앤필이 바뀌거나 직렬화될 때 정리 규칙이 일관되게 적용돼요.
사용 방법
// UI 설정용 클라이언트 프로퍼티 키를 만들 때 UIClientPropertyKey을 구현한다
private static final class MyUIPrivateKey implements UIClientPropertyKey {}
// JComponent에 UI 설정용 프로퍼티로 저장
component.putClientProperty(new MyUIPrivateKey(), someValue);
이 방식으로 저장한 키는 룩앤필 변경 시 JComponent가 자동으로 정리해 주기 때문에, 다음 룩앤필이 이전 룩앤필의 상태를 물려받아 잘못 렌더링되는 문제를 피할 수 있어요.