๐ ๊ฐ์
์ ์ฝ๋์์ ๋จ์ํ Member๋ฅผ ๋ง๋ค๊ณ , List์ ๋ด์ stream์ ํตํด ๋ญ๊ฐ ์ฒ๋ฆฌ ํ ๋ค์ toList๋ก ๋ค์ ๋ณํํ๋ค.
๋ณํ๋ List์ add๋ฅผ ํ๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น?
๋ณด๊ธฐ์๋ ํฐ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์ธ๋ค. ํ์ง๋ง jdk 17์์ ์ด๋ค์์ผ๋ก ๋ณํํ๋์ง ์ ์ฌํ ์ดํด๋ณด์ง ์์๋ค๋ฉด ํฐ ๋ฌธ์ ๋ก ์ด์ด์ง๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋ณด์๋ฉด ์๋์ ๊ฐ๋ค. (java.lang.UnsupportedOperationException - UOE ๋ฐ์!!!)
โ ์ ์ด๋ฐ๊ฑธ๊น?
stream ์ธํฐํ์ด์ค์ toList() ๋ฉ์๋๋ฅผ ํ์ธํด๋ณด์. default๋ก ์ ์ธ๋ toList()๋ ๊ธฐ๋ณธ์ ์ผ๋ก Collections.unmodifiableList ์ ํธ์ถํ๋๋ฐ ๋ถ๋ณ๋ฆฌ์คํธ๋ฅผ ํธ์ถํ๋ ๊ฒ ์ด๋ค.
๊ทธ๋ผ ํด๋น ๋ฉ์๋์ ํธ์ถ ๋ถ๋ถ์ ๋ ๋ณด์
์ฌ๊ธฐ์ ์ดํด๋ณด๋ฉด ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ list์ ํด๋์ค๊ฐ UnmodifiableList.class ํน์ UnmodifiableRandomAccessList.class๊ฐ ์๋๋ผ๋ฉด RandomAccess ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ฐ ์ฝ๊ฒ ๋งํ์๋ฉด ๋น ๋ฅธ(์ผ๋ฐ์ ์ผ๋ก ์ผ์ ํ ์๊ฐ) ์์ ์ก์ธ์ค๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ๋ํ๋ด๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
์ฆ, ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ArrayList ๋ํ RandomAccess์ ํฌํจ๋์ด new UnmodifiableRandomAccessList(list) ๊ฐ ๋ฐํ๋๋ค.
๊ทธ๋ผ UnmodifiableRandomAccessList ํด๋์ค๋ฅผ extends ํ๋ UnmodifiableList๋ฅผ ๋ณด๋ฉด ๋๋ค.
UnmodifiableList์ add๋ฅผ ํ์ธํด๋ณด์.
add์ธ์๋ ํด๋น ํด๋์ค ์์ฒด๋ ๋ถ๋ณ ๋ฆฌ์คํธ์ด๊ธฐ ๋๋ฌธ์ ์์ , ์ญ์ , ์ ๋ ฌ ๋ฑ์ ๋์์ ๋ง๊ณ ์๋ค.
jdk๋ฅผ 17๋ก ์ค์ ํ๋ฉด intellij์์ ๊ธฐ์กด์ .collect(Collectors.toList()) ์ฝ๋๋ฅผ .toList()๋ก ์์ ํ๋ผ๋ hint๋ฅผ ์ค๋ค.
ํ์ง๋ง ์ ๋๋ก ํ์ธํ๊ณ ์ค์ ํด์ผ ํ๋ ์ฃผ์ํ๋ฉฐ ์ฌ์ฉํ์.
ํนํ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ๋ฉด์ ๋์์ด ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ด์ ํ์์๋ ๋ถ๋ณ ํด๋์ค๋ก ์ค๊ณํ๋ ์ฐ์ต์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
List.of๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ถ๋ณ ๋ฆฌ์คํธ๋ฅผ returnํ๋ค.
๊ทธ๋ผ List.of๋ก ์์ฑํ ๋ฆฌ์คํธ์ add๋ฅผ ํ๊ฒ ๋๋ค๋ฉด ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
'Languege > Java & Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[String Constant Pool] Heap? PermGen? ์คํด์ ์ง์ค (1) | 2024.01.07 |
---|---|
Stream ์ฌ์ฉ๋ฒ (0) | 2023.11.15 |
RestAssured session ์ฌ์ฉ์ default value ์ ์ฅ (0) | 2023.05.17 |
Junit5 ์์๊ด๊ณ์์ BeforeEach ์์ (0) | 2023.05.17 |