Coding Planet
HashMap / HashTable / ConCurrentHashMap ํ๋ฒ์ ์ ๋ฆฌํ๊ธฐ ๋ณธ๋ฌธ
HashMap / HashTable / ConCurrentHashMap ํ๋ฒ์ ์ ๋ฆฌํ๊ธฐ
jhj.sharon 2024. 2. 29. 14:41HashMap / HashTable / ConCurrentHashMap์ Java์ Map ์ธํฐํ์ด์ค ๊ตฌํ์ฒด์ด๋ค.
| HashMap / HashTable / ConCurrentHashMap ๋น๊ตํ๊ธฐ
ํน์ง/๊ตฌํ์ฒด | HashMap | Hashtable | ConcurrentHashMap |
๋๊ธฐํ (Synchronization) |
๋๊ธฐํ๋์ง ์์ | ๋๊ธฐํ๋จ | ๋ถ๋ถ ๋๊ธฐํ(์ธ๊ทธ๋จผํธ ๋ฝ) |
Null ํ์ฉ | ํค์ ๊ฐ ๋ชจ๋์ null ํ์ฉ | null ํ์ฉํ์ง ์์ | null ํ์ฉํ์ง ์์ |
์ฑ๋ฅ | ๋น ๋ฆ | ๋๋ฆผ | HashMap๋ณด๋ค ๋๋ฆฌ์ง๋ง, Hashtable๋ณด๋ค๋ ๋น ๋ฆ |
Iterator | fail-fast | fail-safe๊ฐ ์๋ | fail-safe |
๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ | ์ ํฉํ์ง ์์(๋๊ธฐํ ์ถ๊ฐ ํ์) | ์ ํฉํ์ง๋ง ์ฑ๋ฅ ์ ํ | ์ ํฉํ๋ฉฐ ์ฑ๋ฅ ์ต์ ํ๋จ |
์ฉ๋ | ๋จ์ผ ์ค๋ ๋ ๋๋ ๋๊ธฐํ ์ธ๋ถ์์ ๊ด๋ฆฌ | ๋ ๊ฑฐ์ ์ฝ๋, ๋จ์ผ ์ค๋ ๋ ๋๋ ์์ ํ ๋ฉ์๋ ๋๊ธฐํ๊ฐ ํ์ํ ๊ฒฝ์ฐ |
๊ณ ์ฑ๋ฅ ๋ฉํฐ ์ค๋ ๋ |
- HashMap: ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ Map ๊ตฌํ์ฒด๋ก, ํค-๊ฐ ์์ ์ ์ฅํ๋ค. ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์์ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ ํฉํ์ง ์์ง๋ง ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์์๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
- Hashtable: HashMap๊ณผ ์ ์ฌํ์ง๋ง, ๋ชจ๋ ๋ฉ์๋๊ฐ ๋๊ธฐํ๋์ด ์๋ค. ์ด๋ก ์ธํด ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ ์ ํ๊ฐ ์๋ค. ๋ํ, Hashtable์ null ๊ฐ์ ํค๋ ๊ฐ์ผ๋ก ํ์ฉํ์ง ์์ต๋๋ค.
- ConcurrentHashMap: ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ค๊ณ๋ Map ๊ตฌํ์ฒด์ด๋ค. ์ ์ฒด ๋งต์ ์ ๊ทธ์ง ์๊ณ ๋ ๋์์ฑ์ ๊ด๋ฆฌํ ์ ์๋ ์ธ๋ถํ๋ ๋ฝ(์ธ๊ทธ๋จผํธ ๋ฝ) ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ค. ์ด๋ฅผ ํตํด ๋์ ๋์์ฑ๊ณผ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๋ค.
| ๊ทธ๋ผ HashTable๊ณผ ์ ์ฐ๋? เฒ ษ เฒ -> ConCurrentHashMap ์จ๋ผ
์ ํ ์ด๋ธ์์ ๋น๊ตํ ๋ ์ฝ๊ฐ์ ์ฑ๋ฅ์ฐจ์ด๋ฅผ ๋นผ๊ณ ๋ ๊ตณ์ด HashTable์ ์ธ ์ด์ ๊ฐ ์๋ค. ํ์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ HashTable์ด ๋จผ์ ๋ฑ์ฅํ๊ณ ์ดํ์ ConcurrentHashMap๊ฐ ๋์์ผ๋ก ๋์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ HashTable์ด ์กด์ฌํ๋ ๊ฒ์ด๋ค.
HashTable์ Java ์ด๊ธฐ ๋ฒ์ ๋ถํฐ ์ ๊ณต๋์ด ์จ thread-safeํ Map ๊ตฌํ์ฒด์ด๋ค. HashTable์ ๋ชจ๋ ๊ณต๊ฐ ๋ฉ์๋๋ 'synchronized'ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐํ๋๋ค(์ ์ฒด ๋ ๋ฒจ์์ lock). ์ด๋ก ์ธํด ํ ์์ ์ ํ๋์ ์ค๋ ๋๋ง์ด ๋งต์ ๋ฉ์๋๋ฅผ ์คํํ ์ ์๊ฒ ๋๋ค.
๋ชจ๋ ๋ฉ์๋๊ฐ ๋๊ธฐํ๋์ด์๊ธฐ ๋๋ฌธ์, ๋ค์์ ์ค๋ ๋๊ฐ ๋์์ ๋งต์ ์ ๊ทผํ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ํ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. ํ ์ค๋ ๋๊ฐ ๋งต์ ๋ฉ์๋๋ฅผ ์คํํ๋ ๋์ ๋ค๋ฅธ ์ค๋ ๋๋ ๋๊ธฐ์ํ๊ฐ ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ HashTable์ ๋ ์ด์ ๊ถ์ฅ๋์ง ์๋๋ค. Java 1.5๋ถํฐ๋ ๋์์ฑ์ ์ํด ConcurrentHashMap์ด ๋์ ๋์๊ณ HashTable์ ๋ ๊ฑฐ์๋ก ๊ฐ์ฃผ๋๋ค.
์ด๋ฌํ ๋งฅ๋ฝ์์ ConcurrentHashMap์ ๋ถ๋ถ ๋ฝ( (Fine-grained Locking) (Fine-grained Locking)์ ์ ๊ณตํ๋ค. ConcurrentHashMap๋ ๋ด๋ถ์ ์ผ๋ก ์ฌ๋ฌ๊ฐ์ ์ธ๊ทธ๋จผํธ๋ค๋ก ๋๋์ด์ ธ ์๋๋ฐ ๊ฐ ์ธ๊ทธ๋จผํธ๋ ๋ณ๋๋ก ๋ฝ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๋งต์ ๋ค๋ฅธ ๋ถ๋ถ์ ์์ ํ ์ ์์ด HashTable์ ๋นํด ํจ์ฌ ๋์ ๋์์ฑ๊ณผ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
๊ฒฝ์์กฐ๊ฑด๊ณผ ๋๊ธฐํ๋ฉ์ปค๋์ฆ(Lock)์ด ๊ถ๊ธํ๋ค๋ฉด ์๋ ํฌ์คํธ ์ฐธ๊ณ !
'๐ป Java Study > Java ์ด๋ก ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฉ์๋์ ํจ์์ ์ฐจ์ด๋? (0) | 2024.03.04 |
---|---|
๊ฒฝ์์กฐ๊ฑด(Race Condition)๊ณผ Lock - ๊ฐ๋ ๊ณผ ์์ ํ๋ฒ์ ์ ๋ฆฌํ๊ธฐ (1) | 2024.02.29 |
ThreadLocal๊ณผ ThreadLocalUtil (0) | 2024.02.28 |
๋ฐ๋ชฌ์ฐ๋ ๋(daemon thread) - ์ฌ์ฉํ๋ ์ด์ ์ java ์ฝ๋ ์ (0) | 2024.02.26 |
๋ฉํฐํ์คํน๊ณผ ๋ฉํฐ์ฐ๋ ๋ฉ์ ์ฐจ์ด - ํ๋ก์ธ์ค์ ์ฐ๋ ๋ (0) | 2024.02.01 |