JAVA

JAVA 9 - Collection Factory Method

pows1011 2023. 2. 20. 10:16

JAVA 9 버전 부터 Map이나 List에 대한 생성 방식을  기존의 set.add , list.add  , map.put 으로 하나하나씩 선언 하는 방식

 

//     변경전
Set<String> set = new HashSet<>();
 set.add("제이든");
 set.add("Jayden");

 List<String> list = new ArrayList<>();
 list.add("제이든");
 list.add("버나드");
 list.add("자이노");
 list.add("메이슨");
 list.add("엘빈");

 Map<String, String> map = new HashMap<>();
 map.put("J","Jayden");
 map.put("B","Bernard");
 map.put("Z","Zino");
 map.put("M","Mason");
 map.put("E","Elvin");

JAVA 9 버전 이후 도입된 Collection Factory Method 방식으로, 한번에 내가 작성하고자 하는 여러개의 값들을

동시에 선언시켜 줄 수 있게 되면서 조금 더 가독성이 높아지고 코드의 길이가 줄어드는 장점이 존재하지만

 
 //       변경 후
 Set<String> set = Set.of("제이든", "Jayden", "개발3팀");

 List<String> list = List.of("제이든", "버나드", "자이노", "메이슨", "엘빈");

 Map<String, String> map
    = Map.of(
    "J", "Jayden",
    "B", "Bernard",
    "Z", "Zino",
    "M", "Mason",
    "E", "Elvin");

Collection Factory Method  방식으로 선언할 경우의 단점도 존재하게 되는데 of 는 선언되는 순간 현재 만들어진 인자의 갯수에 맞춰 오버로딩이 되어 있는데, 그 갯수를 넘어가게되면 초기화가 불가능하다 (최대 10 개 ) 이런 경우에는ofEntries를 사용해야 한다.

또한 of나 ofEntries를 통해 객체를 초기화 할때 주의해야 할점이 더 있는데  Collection Factory Method는

Immutable 객체를 반환하여 초기화하고 난 이후에는 put이나 remove를 통해 객체의 데이터를 변경 시킬 수가 없다.

of메소드는 초기화 작업에서 굉장히 편리한 방법일 수는 있지만 , 단순히 초기화 한 후 값 조회만 하는 경우가 아니라면불변성을 가지고있는  of()나 ofEntries는 사용하지 않는게 좋은 방법이다.