๐ธ11์ฅ. ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต
Last updated
Last updated
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ 7๊ฐ์ง ๋ฐ์ดํฐ ํ์ (์ซ์, ๋ฌธ์์ด, ๋ถ๋ฆฌ์ธ, null, undefined, ์ฌ๋ฒ, ๊ฐ์ฒด ํ์ )์ ํฌ๊ฒ
์์ ํ์ (primitive type)
๊ณผ๊ฐ์ฒด ํ์ (object/reference type)
์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค. ()
์์ ํ์
์ ๊ฐ(==์์ ๊ฐ
)์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ
(immutable value)
๊ฐ์ฒด(์ฐธ์กฐ) ํ์
์ ๊ฐ(==๊ฐ์ฒด
)์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ
(mutable value)
์์๊ฐ์ ๋ณ์์ ํ ๋นํ๋ฉด ๋ณ์์๋ ์ค์ ๊ฐ์ด ์ ์ฅ
๋๋ค.
๊ฐ์ฒด๋ฅผ ๋ณ์์ ํ ๋นํ๋ฉด ๋ณ์์๋ ์ฐธ์กฐ ๊ฐ์ด ์ ์ฅ
๋๋ค.
์์๊ฐ์ ๊ฐ๋ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ฉด โ ์์ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ(๊ฐ์ ์ํ ์ ๋ฌ. pass by value
)
๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ฉด โ ์๋ณธ์ ์ฐธ์กฐ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ(์ฐธ์กฐ์ ์ํ ์ ๋ฌ. pass by reference
)
๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค
๋ ์๋ฏธ ์ดํด๋ณด๊ธฐ
๋ณ์
๋ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ํ๋ณดํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๊ทธ ์์ฒด/๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ณํ๊ธฐ ์ํ ์ด๋ฆ์ด๊ณ ๊ฐ
์ ๋ณ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ก์ ํํ์์ด ํ๊ฐ๋์ด ์์ฑ๋ ๊ฒฐ๊ณผ
๋ฐ๋ผ์, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ณ์๊ฐ ์๋๋ผ ๊ฐ์ ๋ํ ์ง์
์ด๋ค.
์ฆ, "์์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค."
์์ ๊ฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. โ O
๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค. โ X
์์ ๊ฐ number๋ immutableํ ๊ฐ
๋ฐ๋ผ์, score๋ ๊ฐ 80์ 90์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ 90์ด๋ผ๋ ์ซ์๋ก ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ ํ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ ๊ฐ์ ๋ฐ๊ฟ์ค๋ค.
๋ฌธ์์ด์ ๊ตฌ์ฑ๋ ๋ฌธ์์ ๊ฐ์์ ๋ฐ๋ผ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๋ค.
๋ฌธ์์ด์ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
์ด๋ฉด์ ์ดํฐ๋ฌ๋ธ
์ด๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด๊ณผ ์ ์ฌํ๊ฒ ์ ๊ทผํ ์ ์๋ค.
๋ฌธ์์ด์ ํ ๋ฌธ์๋ฅผ ๋ณ๊ฒฝํด ๋ณด๋ฉด?
'string' ์์ ์ฒซ ๋ฒ์งธ 's' ๋ฅผ 'S' ๋ก ๋ณ๊ฒฝํ๋ ค ํ์ง๋ง str ๋ณ์๋ "๋ฌธ์์ด, ์ฆ ์์ ๊ฐ"
์์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ(immutable value) -> ๊ฐ์ด ์ ๋ฐ์ดํธ ๋์ง ์๋๋ค.
์ฐธ๊ณ ๋ก ์๋ฌ๋ ๋ฐ์ํ์ง ์๋๋ค.
ํ์ง๋ง ์๋์ฒ๋ผ ์ฌํ ๋น์ผ๋ก ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค.
@์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
๋ฐฐ์ด์ฒ๋ผ ์ธ๋ฑ์ค๋ก ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผํ ์ ์๊ณ , length ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด
๋ฌธ์์ด : ์ธ๋ฑ์ค๋ฅผ ํตํด ๊ฐ ๋ฌธ์์ ์ ๊ทผ ๊ฐ๋ฅ. length ํ๋กํผํฐ ๊ฐ์ง. for๋ฌธ ์ํ ๊ฐ๋ฅ
1) ๋ณ์์ ๋ณ์๋ฅผ ํ ๋นํ์ ๋ ๋ฌด์์ด ์ด๋ป๊ฒ ์ ๋ฌ๋ ๊น?
copy ๋ณ์์ ์์ ๊ฐ์ ๊ฐ๋ score ๋ณ์๋ฅผ ํ ๋นํ๋ฉด, ํ ๋น๋ฐ๋ ๋ณ์(copy)์๋ ํ ๋น๋๋ ๋ณ์(score)์ ์์ ๊ฐ 80์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค.
โscore๋ณ์์ copy ๋ณ์์ ๊ฐ 80์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ด๋ค.
2) 1 ์ดํ score ๋ณ์์ ์๋ก์ด ์ซ์ ๊ฐ 100์ ์ฌํ ๋นํ๋ฉด copy์ ๊ฐ์ ์ด๋ป๊ฒ ๋ ๊น?
score์ copy ๋ณ์์ ๊ฐ์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์, score ๋ณ์๋ฅผ ๋ณ๊ฒฝํด๋ copy ๋ณ์ ๊ฐ์๋ ์ด๋ ํ ์ํฅ๋ ์ฃผ์ง ์๋๋ค.
๊ฐ์ ์ํ ์ ๋ฌ? ์๋ฐํ ๋งํ๋ฉด, ๊ฐ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ๋ฌ
V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์๋ ํ๋กํผํฐ์ ์ ๊ทผํ๊ธฐ ์ํด ๋์ ํ์ ๋์ ํ๋ ํด๋์ค
๋ผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์๊ฐ ๊ธฐ์ตํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ๋ฉด ์ฐธ์กฐ ๊ฐ
์ ์ ๊ทผํ ์ ์๋ค.
์ฐธ์กฐ ๊ฐ(reference value)
: ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์
์ฆ, ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์์๋ ์ฐธ์กฐ ๊ฐ์ด ์ ์ฅ๋์ด์๊ณ , ๋ณ์๋ ์ด ์ฐธ์กฐ ๊ฐ์ ํตํด ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค.
๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์๋ ์ฌํ ๋น ์์ด ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์๋ค.
์ฆ, ์ฌํ ๋น ์์ด ํ๋กํผํฐ ๋์ ์ถ๊ฐ
, ํ๋กํผํฐ ๊ฐ ๊ฐฑ์
, ํ๋กํผํฐ ์์ฒด ์ญ์
๋ ๊ฐ๋ฅํ๋ค.
๐ญ ๋จ์ : ์ฌ๋ฌ๊ฐ์ ์๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ์
์ฌ๋ฌ๊ฐ์ ์๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ์ ์๋ค.
๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์(์๋ณธ, person)๋ฅผ ๋ค๋ฅธ ๋ณ์(์ฌ๋ณธ, copy)์ ํ ๋นํ๋ฉด ์๋ณธ์ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ
๋๋ค. โ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ
์๋ณธ person๊ณผ ์ฌ๋ณธ copy ๋ชจ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค == ๋ ๊ฐ์ ์๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์
์ฐธ์กฐ์ ์ํ ์ ๋ฌ?
๊ฒฐ๊ตญ, ๊ฐ์ ์ํ ์ ๋ฌ
๊ณผ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ
์ ์๋ณ์๊ฐ ๊ธฐ์ตํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ค๋ ๋ฉด์์ ๋์ผํจ
๋จ, ๋ณ์์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ด ์์๊ฐ์ด๋ ์ฐธ์กฐ๊ฐ์ด๋์ ์ฐจ์ด๊ฐ ์์ ๋ฟ
๋ฐ๋ผ์, ์๋ฐ์คํฌ๋ฆฝํธ์๋ โ์ฐธ์กฐ์ ์ํ ์ ๋ฌโ์ ์กด์ฌํ์ง ์๋๋ค๊ณ ๋งํ ์ ์์
์์ ๋ณต์ฌ(shallow copy) : ๊ฐ์ฒด์ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ ์ฐธ์กฐ ๊ฐ์ ๋ณต์ฌ
๊น์ ๋ณต์ฌ(deep copy) :๊ฐ์ฒด์ ์ค์ฒฉ๋ ๊ฐ์ฒด๊น์ง ์์ ๊ฐ์ฒ๋ผ ์์ ํ ๋ณต์ฌ
์๋๋ score ๋ณ์๊ฐ ์ ์ธ๋๊ณ ํ ๋น ๋ ํ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ณผ์ ์ ๋ํ ๊ทธ๋ฆผ์ด๋ค.
๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์์ ์ฌํ ๋นํ์ง ์์๊ธฐ ๋๋ฌธ์, ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์์ ์ฐธ์กฐ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค. (์๋ ๊ทธ๋ฆผ ์ฐธ๊ณ )