> For the complete documentation index, see [llms.txt](https://blakes-organization.gitbook.io/rainsister/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blakes-organization.gitbook.io/rainsister/java/java9.md).

# JAVA9

Java 9에서 새로운 api를 지원하여 코드량은 줄고 가독성은 쉬워지도록 업그레이드 되었다.。

불변의 Collection 객체 생성 방식.

```
// 불변의 Set
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set = Collections.unmodifiableSet(set);

// 불변의 List
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list = Collections.unmodifiableList(list);
```

Java8 부터 Stream API 사용하면 좀더 직관적인 코드로 구현할수 있다.

```
Set<String> set = Collections.unmodifiableSet(Stream.of("a", "b", "c").collect(toSet()));
List<Integer> list = Collections.unmodifiableList(Stream.of(1, 2, 3).collect(toList()));
```

### [#](https://www.didispace.com/java-features/java9/jep269-convenience-factory-methods-for-collections.html#java9%E7%9A%84%E5%86%99%E6%B3%95)Java9的写法 <a href="#java9-de-xie-fa" id="java9-de-xie-fa"></a>

Java 9 이런 부분이 간소화 되었고 아래와 같이 작성하면 됩니다.

```java
Set<String> set = Set.of("a", "b", "c");
List<Integer> list = List.of(1, 2, 3);
```

마찬가지로 아래와 같이 조금 더 복잡한 collenction 도 동일하게 지원 됩니다.&#x20;

```
Map<String, String> map = Map.of("a", "1", "b", "2", "c", "3");
```

유의해야 될 부분은 Map.of는 파라미터가 key와 value 로 무조건 쌍으로 이루어 집니다.

```
Map.of()
Map.of(k1, v1)
Map.of(k1, v1, k2, v2)
Map.of(k1, v1, k2, v2, k3, v3)
...
```

## asList와의 차이점

`List.of 와 Arrays.asList 들의 차이점:`&#x20;

1. Java 9 의 `List.of 변경할수 없는 List이며 Arrays.asList 는 변경 가능.`
2. `List.of 와 Arrays.asList 모두` add와remove를 할수 없지만, `Arrays.asList는` set을 이용하여 아이템을 변경할수 있지만 `List.of 안됨.`
3. 강제로 변경 시도시 `java.lang.UnsupportedOperationException 발생.`
4. `List.of`null 허용하지 않음，`Arrays.asList null 허용`

<br>
