๐คWeakMap..?
WeakMap์ Javascript์ ๊ฐ์ฒด ํ์ ์ ๋๋ค. Map๊ณผ์ ์ฐจ์ด์ ์ ํค ๊ฐ์ด ๊ฐ๋ ฅํ ์ฐธ์กฐ(strong reference)๋ฅผ ํ์ง ์๊ณ , ์ฝํ ์ฐธ์กฐ(weak reference)๋ฅผ ํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
โ๊ฐ๋ ฅํ ์ฐธ์กฐ(strong reference)์ ์ฝํ ์ฐธ์กฐ(weak reference)๋ ๋ฌด์์ธ๊ฐ์?
๊ฐ๋ ฅํ ์ฐธ์กฐ์ ์ฝํ ์ฐธ์กฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์์ ์ฌ์ฉ๋๋ ์ฉ์ด์ ๋๋ค.
**๊ฐ๋ ฅํ ์ฐธ์กฐ(strong reference)**๋ ํด๋น ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋์ง ์๋๋ก, ๋ฌด๊ธฐํ์ผ๋ก ์ ์ง๋๋๋ก ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ณณ์์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ผ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋์ง ๋ชปํฉ๋๋ค.
๋ฐ๋ฉด **์ฝํ ์ฐธ์กฐ(weak reference)**๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์๋ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋ ์ ์์ต๋๋ค!
โ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฌด์์ธ๊ฐ์?
๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๊ฑฐ๋ ์ฌ์ฉ๋์ง ์๋ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณด๊ดํ๋ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ์์คํ ์ฑ๋ฅ์ ์ํฅ์ผ๋ก ๋ฏธ์น ์ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ผ๋ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
- ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด, ๋ฐ์ดํฐ๋ฅผ ์๋ณํฉ๋๋ค.
- ์๋ณ๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ฒดํ๊ณ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ง๋ญ๋๋ค.
๐คWeakMap๊ณผ Map๊ฐ์ฒด์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
WeakMap์ด ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ด๋ จ๋ ์ด์ ์ ์ ๊ณตํด์ฃผ๋ ๊ฐ์ฒด๋ผ๋ ๊ฒ์ ์์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด… Map๊ฐ์ฒด์ ๋น๊ต๋ฅผ ํตํด ์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค!
์์์ ์ค๋ช ํ๋ฏ ๊ฐ๋ ฅํ ์ฐธ์กฐ์ ์ฝํ ์ฐธ์กฐ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค!
- Map๊ฐ์ฒด๋ ๊ฐ๋ ฅํ ์ฐธ์กฐ๋ฅผ ์ ์งํฉ๋๋ค. ๋ฐ๋ผ์ ํค๋ ๊ฐ์ผ๋ก ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ ํ, ๊ทธ ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๋ ์ ๊ฑฐ๋์ง ์์ต๋๋ค! ๋ฐ๋ฉด WeakMap์ ์ฝํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ์, ํค, ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋์ง ์๋๋ค๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋ฉ๋๋ค!
WeakMap์ ์ด๊ฑฐํ ์ ์์ต๋๋ค!
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ํค ๋ชฉ๋ก์ ๊ฐ์ง๊ณ ์ถ๋ค๋ฉด, Map๊ฐ์ฒด์ keys()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ์ผ ํฉ๋๋ค.
- Map๊ฐ์ฒด์ ๊ฒฝ์ฐ ์ดํฐ๋ฌ๋ธ(Iterable) ๊ฐ์ฒด๋ก, for …of์ ๊ฐ์ ๋ฃจํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณตํ ์ ์์ต๋๋ค! ํ์ง๋ง WeakMap์ ๊ฒฝ์ฐ ์์๊ฐ ์๋ ๋ ผ-์ดํฐ๋ฌ๋ธ(Non-Iterable) ๊ฐ์ฒด์ ๋๋ค!
WeakMap์ ํค ๊ฐ์ ๊ฐ์ฒด๋ง์ ํ์ฉํฉ๋๋ค!
- WeakMap์ ํค ๊ฐ์ผ๋ก ์์๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค! ์ ํํ๊ฒ๋ ๊ฐ์ฒด์ ๋ฑ๋ก๋์ง ์์ ์ฌ๋ณผ์ ํค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๊ฐ๋ฅํ ๊ฐ๋ง์ด ํค๊ฐ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ ํฉ๋๋ค! ๋๋ถ๋ถ์ ์์ ๊ฐ์ ์์๋ก ์์ฑ๋ ์ ์๊ณ , ์๋ช ์ฃผ๊ธฐ๊ฐ ๋ฐ๋ก ์์ผ๋ฏ๋ก ํค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค!
โ๊ทธ๋ฌ๋๊น...
WeakMap์ ์ด๊ฑฐํ ์ ์๊ณ , key๊ฐ์ผ๋ก “๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๊ฐ๋ฅํ ๊ฐ”๋ง ์ฌ์ฉํ ์ ์์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ด๋ จ๋ ์ด์ ์ด ์๊ธฐ์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ ์ ํ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค!
WeakMap์ ์บ์ฑ์ ์ด์ฉํ ๋ฉ๋ชจ์ด์ ์ด์ , Private Filed๋ฅผ ์์ฑํ๋ ๋ฑ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ด๋ จ๋ ๊ณณ์์ ๋ค์ํ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค! ์ด ๋ถ๋ถ์ ์์ง ์ค๋ ฅ์ด ๋ถ์กฑํ ์ ๋ก์จ ์ดํดํ๊ธฐ ์ํด์ ๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ๊ฒ ๋ค์..๐ฃ