Locale — 지역·문화·언어 식별자
Locale — 지역·문화·언어 식별자
Locale 객체는 특정 지리적, 정치적, 문화적 지역을 나타내요. 작업 수행에 Locale이 필요한 연산을 locale-sensitive(로케일 민감)이라고 하고, 사용자에게 맞춘 정보를 제공하는 데 Locale을 사용해요. 예를 들어 숫자 표시는 locale-sensitive 연산으로, 숫자를 사용자의 모국 관습에 따라 포맷해야 해요.
본문
public final class Locale extends Object implements Cloneable, Serializable
Locale 클래스는 RFC 4647 "Matching of Language Tags"와 RFC 5646 "Tags for Identifying Languages"로 구성된 IETF BCP 47을 구현하며, LDML(UTS#35) BCP 47 호환 확장을 지원해요.
필드 구성
- language — ISO 639 alpha-2/alpha-3 언어 코드(최대 8자).
Locale은 항상 소문자로 정규화해요. 예:"en","ja","kok". - script — ISO 15924 alpha-4 스크립트 코드. 항상 타이틀 케이스(첫 글자 대문자)로 정규화해요. 예:
"Latn","Cyrl". - country (region) — ISO 3166 alpha-2 국가 코드 또는 UN M.49 3자리 지역 코드. 항상 대문자로 정규화해요.
- variant — 언어/국가를 구별하는 변형 코드.
상수
ENGLISH, KOREAN, JAPANESE, FRENCH, GERMAN 같은 언어 상수와 US, KOREA, JAPAN, FRANCE, CANADA, CHINA 같은 국가 상수, 그리고 모든 로케일의 기반인 ROOT 상수가 있어요. PRIVATE_USE_EXTENSION('x')와 UNICODE_LOCALE_EXTENSION('u') 키 상수도 있어요.
생성과 팩토리
Locale(String language),Locale(String language, String country),Locale(String language, String country, String variant)— (Java 19부터@Deprecated) 언어/국가/변형으로 만듭니다. 각 생성자는 언어를 소문자로, 국가를 대문자로 정규화해요.Locale.of(...)— deprecated가 아닌 팩토리 메서드로, 생성자와 동일하게 만들어요.Locale.forLanguageTag(String)— IETF BCP 47 언어 태그 문자열로부터 로케일을 만들어요.
기본/설치 로케일
getDefault()/getDefault(Locale.Category)— JVM 인스턴스의 기본 로케일을 반환해요. 시작 시 호스트 환경에 따라 설정돼요.setDefault(Locale)/setDefault(Locale.Category, Locale)— 기본 로케일을 변경해요.getAvailableLocales()/availableLocales()— 설치된 로케일 배열/스트림을 반환해요.getISOCountries()/getISOLanguages()— ISO 국가/언어 코드 목록을 반환해요.
접근자
getLanguage(), getScript(), getCountry(), getVariant(), hasExtensions(), getExtension(char), getExtensionKeys(), getUnicodeLocaleAttributes(), getUnicodeLocaleKeys(), getUnicodeLocaleType(String).
표시 이름
getDisplayLanguage(), getDisplayScript(), getDisplayCountry(), getDisplayVariant(), getDisplayName() — 사용자에게 보여주기 적합한 이름을 반환해요. 기본 DISPLAY 로케일 또는 지정된 로케일로 현지화되고, 가능하지 않으면 영어 이름, 마지막으로 ISO 코드로 대체해요.
언어 태그
toString()— 디버깅용 문자열(예:en_US,zh_CN_#Hans)을 반환해요. 교환용으로는toLanguageTag()를 써야 해요.toLanguageTag()— 잘 구성된 IETF BCP 47 언어 태그를 반환해요. 구식 ISO 코드(iw→he,ji→yi,in→id)도 변환해요.caseFoldLanguageTag(String)— RFC 5646 2.1.1의 대소문자 규칙에 맞는 태그를 반환해요.forLanguageTag(String)— 태그에서 로케일을 만들어요.
매칭
filter(...) / filterTags(...) — RFC 4647 필터링 메커니즘으로 일치하는 로케일/태그 목록을 반환해요. lookup(...) / lookupTag(...) — 최상의 일치 항목을 반환해요.
기타
equals(Object)는 언어·스크립트·국가·변형·확장이 동일한 Locale끼리 true를 반환해요. hashCode()는 해시 기반 구조에서 자주 쓰이므로 속도를 위해 캐시해요. getISO3Language() / getISO3Country()는 3글자 축약 코드를 반환하고, 없으면 MissingResourceException을 던질 수 있어요.