Map ์ธํฐํ์ด์ค์์ Java 8 ๋ฒ์ ์ ์ถ๊ฐ๋ ์ผ๋ถ API์ ๋ํด ์ดํด๋ด ๋๋ค.
- putIfAbsent()
- compute()
- computeIfPresent()
- computeIfAbsent()
- getOrDefault()
ํด๋น ์ฝ๋๋ Map ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ธ HashMap์ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ์์ต๋๋ค.
1. putIfAbsent(K key, V value)
putIfAbsent() ๋ฉ์๋๋ ๋ค์ด๋ฐ์์ ์ ์ถํ ์ ์๋ฏ์ด, ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
- Key๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ: Value ๋ณ๊ฒฝ ์์ด ๊ธฐ์กด์ ์กด์ฌํ๋ Key์ Value๋ฅผ ๋ฆฌํดํฉ๋๋ค.
- Key๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ: Key์ ํด๋นํ๋ Value๋ฅผ ์ ์ฅํ ํ null์ ๋ฆฌํดํฉ๋๋ค.
Map์ ๊ตฌํ์ฒด์ธ HashMap์ ๋ณด๋ฉด putVal() ๋ฉ์๋๋ฅผ ํตํด ์งํ๋๊ณ , Key๊ฐ ์กด์ฌํ๋ฉด oldValue๋ฅผ ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฆฌํดํฉ๋๋ค.
- map์ key=20, value=5 ์ธ ๋ฐ์ดํฐ๋ฅผ put ํฉ๋๋ค.
- map.putIfAbsent(20, 10): Key๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ Value์ ์์ ์์ด 5๋ฅผ ๋ฆฌํดํฉ๋๋ค.
- map.putIfAbsent(10, 5): Key๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ 5๋ฅผ ์ ์ฅํ ํ null์ ๋ฆฌํดํฉ๋๋ค.
2. compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
compute() ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
- Key์ ์ฌ๋ถ์ ์๊ด์์ด ์ ๋ฌ๋ฐ์ ์ธ์๋ฅผ ํตํ์ฌ ๋๋ค ํจ์๋ฅผ ์ ์ฉํ๊ณ , ๊ฒฐ๊ณผ์ ๋ฐ๋ผ key๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์๋ก์ด value๋ฅผ ์ ์ฅ
- Key๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ NullPointerException์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ 8๋ฒ์งธ ๋ผ์ธ์์ ์กด์ฌํ์ง ์๋ Key์ ๋ํด์๋ NullPointerException ์์ธ๊ฐ ๋ฐ์ํ๋๋ฐ์, ์ด๋ ๋๋ค ํจ์์์ ๋ ๋ฒ์งธ value๊ฐ null๋ก ์ ๋ฌ์ด ๋๊ณ , null์ธ ์ํ์์ intValue() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๊ธฐ์ NPE ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ผ์ ์์ ๊ฒฝ์ฐ function์ ์ฐ์ฐ์ ํ๊ธฐ ์ value์ ๊ฐ์ ์ฒดํฌํ์ฌ ์ค์ ํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
3. computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction
computeIfAbsent() ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
- Key๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ: ์๋ฌด๋ฐ ์์ ์ ํ์ง ์๊ณ ๊ธฐ์กด์ ์กด์ฌํ๋ Key์ Value๋ฅผ ๋ฆฌํด
- Key๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ: ๋๋ค์์ ์ ์ฉํ ๊ฐ์ ํด๋น key์ ์ ์ฅํ ํ newValue๋ฅผ ๋ฐํ
computeIfAbsent() ๋ฉ์๋๋ ์์์ ์ดํด๋ณธ putIfAbsent() ๋ฉ์๋์ ๋น์ทํ๊ฒ ๋์์ ํฉ๋๋ค.
Key๊ฐ ์กด์ฌํ๋ฉด ๊ธฐ์กด์ ์กด์ฌํ๋ Value๋ฅผ ๋ฆฌํดํ๊ณ , Key๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ก์ด ๊ฐ์ ์ ์ฅํ ํ null์ ๋ฐํ(putIfAbsent) ํ๊ฑฐ๋ ์๋ก์ด ๊ฐ(newValue, computeIfAbsent()์ ๋ฆฌํดํ๋ค๋ ์ฐจ์ด์ ๋ง ์กด์ฌํฉ๋๋ค.
4. computeIfPresent(K key, Function<? super K, ? extends V> mappingFunction
computeIfPresent() ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
- Key๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ: ๋๋ค์์ ์ ์ฉํ ๊ฐ์ด null์ด ์๋๋ฉด ํด๋น key์ ์ ์ฅํ ํ ๋ฐํ, null์ด๋ฉด key ์ ๊ฑฐ ํ null ๋ฐํ
- Key๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ: null ๋ฐํ
computeIfPresent() ์์
์ ์ฝ๋๋ key์ value๊ฐ 1์ด๋ฉด key๋ฅผ ์ ๊ฑฐํ๊ณ , 1์ด ์๋ ๊ฒฝ์ฐ(1๋ณด๋ค ํฐ ๊ฒฝ์ฐ) -1์ ํ๋ ๊ฐ๋จํ ๋ก์ง์ ๋๋ค.
after ์ฝ๋์์๋ value๊ฐ 1์ผ ๊ฒฝ์ฐ ๋๋ค์ ๊ฒฐ๊ณผ๊ฐ์ null๋ก ์ค์ ํ๊ณ , 1์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด value - 1์ ํฉ๋๋ค.
(์ computeIfPresent() ๋ฉ์๋์์ ๋๋ค์ ๊ฒฐ๊ณผ๊ฐ์ด null์ด๋ฉด key๋ฅผ ์ ๊ฑฐํ ํ null์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.)
5. getOrDefault(Object key, V defaultValue)
getOrDefault() ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
- key๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ: key์ ์กด์ฌํ๋ value๋ฅผ ๋ฐํํฉ๋๋ค.
- Key๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ: ๋ ๋ฒ์งธ ์ธ์๋ก ์ค์ ํ defaultValue๋ฅผ ๋ฐํํฉ๋๋ค.
getOrDefault() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ๊ฐ๋ ์ฑ์ด ๋์์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ๋ฉ์๋ ์ค ํ๋์ ๋๋ค.
getOrDefault() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด before ์ฝ๋์ฒ๋ผ ๋งค๋ฒ Map์ key๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
ํ์ง๋ง getOrDefault() ๋ฉ์๋๋ key๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ defaultValue๋ฅผ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ํด๋์ค ์ค๊ณ ์์ ํ๊ฒ ์ ํ๊ธฐ (feat. ์์ง๋) (0) | 2023.12.20 |
---|---|
Java ํด๋์ค ์ค๊ณ ์์ ํ๊ฒ ์ ํ๊ธฐ (1) | 2023.12.16 |
EasyRandom - Java beans๋ฅผ ๋๋ค์ผ๋ก ์์ฑํด ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2023.01.27 |
[Java DeepDive] - Map(HashMap) 1. ๊ฐ๋ , ํ๋, ์์ฑ์ (2) | 2022.11.27 |
[Java DeepDive] - List (ArrayList) (2) | 2022.10.29 |
๋๊ธ