-
1. locale현재 프로젝트에서는 JDK17 에서 JDK21 버전 업 되었다
따라서 개발을 하면서 ASIS 소스를 참고하며 개발하니 오류가 발생한 것은 아니었지만 STS에서 노란색으로 경고를 줬다
"The constructor Locale(String, String) is deprecated since version 19
add @SuppressWarnings"
찾아보니 JDK 19에서부터 java.util.Locale의 생성자가 사용되지 않는다
( Locale 클래스는 Java에서 다국어 지원 및 지역 설정을 위한 핵심적인 클래스이다 )
생성자 대신 정적 팩토리 메서드 사용해야 한다
Locale locale = Locale.of(language, country, variant);
Locale koLocale = new Locale.Builder().setLanguage("ko").setRegion("KR").setVariant("POSIX").build();// ASIS Locale currentLocale = new Locale("KOREAN", "KOREA"); // TOBE Locale currentLocale = new Locale.Builder().setLanguage("ko").setRegion("KR").build();
2. 정적 팩토리 메서드 (Static Factory Method)
정적 팩토리 메서드는 객체의 생성을 담당하는 클래스 메서드이다
객체를 인스턴스화할 때 직접적으로 생성자를 호출하는 것이 아니라 별도의 객체 생성의 역할을 하는 클래스 메서드를 통해 간접적으로 객체 생성을 유도하는 것이다
ex1.// 정적 팩토리 메서드 String str1 = String.valueOf("hello valueOf"); System.out.println(str1); String str2 = new String("hello new"); System.out.println(str2 );
ex2.class Book { private String title; // 생성자를 private화 하여 외부에서 생성자 호출 차단 private Book(String title) { this.title = title; } // 정적 팩토리 메서드 public static Book titleOf(String title) { // 메서드에서 생성자를 호출하고 리턴함 return new Book(title); } } public static void main(String[] args) { // 정적 메서드 호출을 통해 인스턴스화된 객체를 얻음 Book book1 = Book.titleOf("book1"); }
생성자로 넘기는 매개변수 만으로는 반환될 객체의 특성을 제대로 표현하기가 어렵다
장점
1. 생성 목적에 대한 이름 표현이 가능하다
> 정적 팩토리 메서드를 구성하고자 한다면, 반드시 생성자에 private 접근 제어자를 두어 외부에서 new 키워드를 이용하여 객체를 생성
2. 인스턴스에 대해 통제 및 관리가 가능하다
> getInstance
3. 하위 자료형 객체를 반환할 수 있다
4. 인자에 따라 다른 객체를 반환하도록 분기할 수 있다
5. 객체 생성을 캡슐화할 수 있다정적 팩토리 메서드 네이밍 규칙
- from : 하나의 매개 변수를 받아서 객체를 생성
- of : 여러 개의 매개 변수를 받아서 객체를 생성
- getInstance | instance : 인스턴스를 생성. 이전에 반환했던 것과 같을 수 있음
- newInstance | create : 항상 새로운 인스턴스를 생성
- get[OrderType] : 다른 타입의 인스턴스를 생성. 이전에 반환했던 것과 같을 수 있음
- new[OrderType] : 항상 다른 타입의 새로운 인스턴스를 생성
출처:
https://inpa.tistory.com/entry/GOF-💠-정적-팩토리-메서드-생성자-대신-사용하자
https://seoulitelab.tistory.com/entry/Java자바-Locale-클래스-다국어-지원과-지역-설정을-위한-핵심-기능
https://rutgo-letsgo.tistory.com/entry/Deprecated-Features-in-Java-18-thru-21Java-18-21-%EB%B2%84%EC%A0%84%EC%97%90%EC%84%9C-%EB%8D%94-%EC%9D%B4%EC%83%81-%EC%82%AC%EC%9A%A9%EB%90%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EA%B8%B0%EB%8A%A5-Sip-of-Java728x90'업무' 카테고리의 다른 글
Enum, Java Stream API (1) 2025.01.21 pull patch 한 번에 뜰 때, commit 오류 (0) 2025.01.13