์์ ๋ค์ด์ค๋ ํจ์ํ ์ฝ๋ฉ Chapter 6
๐ ์์ ๋ค์ด์ค๋ ํจ์ํ ์ฝ๋ฉ - ์ฌํํ ์ฝ๋๋ก ๋ณต์กํ ์ํํธ์จ์ด ๊ธธ๋ค์ด๊ธฐ
์ด ๊ธ์ ์์ ๋ค์ด์ค๋ ํจ์ํ ์ฝ๋ฉ - ์ฌํํ ์ฝ๋๋ก ๋ณต์กํ ์ํํธ์จ์ด ๊ธธ๋ค์ด๊ธฐ๋ฅผ ์ฝ๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ํจ์ํ๋ ํจ์ํ์ด์ง๋ง, ์ด ์ฑ ์ ํตํด ์ข๋ ๊น๋ํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ ๊ฒ์ด๋ ํ์๋ค์ ์๊ฒฌ์ ํ ๋๋ก ์ด๋ฒ ์คํฐ๋ ์์ ์ผ๋ก ์ ์ ํ์์ต๋๋ค.
Chap 6. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ธ์ด์์ ๋ถ๋ณ์ฑ ์ ์งํ๊ธฐ(feat. JS)
- ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ง ์๋๋ก
์นดํผ-์จ-๋ผ์ดํธ
์ ์ฉํ๊ธฐ - ๊น์ด ์ค์ฒฉ๋ ๋ฐ์ดํฐ์๋
์นดํผ-์จ-๋ผ์ดํธ
์ ์ฉํ๊ธฐ ๋ถ๋ณ์ฑ
์ดํดํ๊ธฐ
1) ๋์์ ์ฝ๊ธฐ, ์ฐ๊ธฐ ํน์ ๋ ๋ค๋ก ๋ถ๋ฅํ๊ธฐ
์ฝ๊ธฐ(Read)
: ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ ๋ณด๋ฅผ ๊บผ๋ด๋ ๊ฒ- ์ธ์์๋ง ์์กดํด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๊ธฐ๋
์์ ํจ์
์ฆ,๊ณ์ฐ
์ด ๋๋ค.
- ์ธ์์๋ง ์์กดํด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๊ธฐ๋
์ฐ๊ธฐ(Write)
: ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ- ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๊ฐ ์ด๋์์ ์ฌ์ฉ๋ ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์
๋ถ๋ณ์ฑ ์์น(์นดํผ-์จ-๋ผ์ดํธ)
์ด ํ์ํ๋ค.
- ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๊ฐ ์ด๋์์ ์ฌ์ฉ๋ ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์
์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋ ๋ค
: ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๋ฉด์ ์ ๋ณด๋ฅผ ๊บผ๋ด๋ ๊ฒ
2) ์นดํผ-์จ-๋ผ์ดํธ ์์น ์ธ ๋จ๊ณ
- ๋ณต์ฌ๋ณธ ๋ง๋ค๊ธฐ
- ๋ณต์ฌ๋ณธ ๋ณ๊ฒฝํ๊ธฐ
- ๋ณต์ฌ๋ณธ ๋ฐํํ๊ธฐ
2-1) ๋ฐฐ์ด์ ์นดํผ-์จ-๋ผ์ดํธ
- push() ์์
const getAddedArray = (array, value) => {
const newArray = [...array];
newArray.push(value);
return newArray;
};
const array = [1, 2, 3];
const newArray = getAddedArray(array, 4); // [1, 2, 3, 4]
2-2) ๊ฐ์ฒด์ ์นดํผ-์จ-๋ผ์ดํธ
- Object.assign() ์์
const getAddedObject = (object, value) => {
const newObject = Object.assign({}, object);
newObject.value = value;
return newObject;
};
3) ๋ถ๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฝ๋ ๊ฒ์ ๊ณ์ฐ์ด๋ค.
- ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ =>
์ก์
์ฐ๊ธฐ
๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๋ง๋ ๋ค.- ์ด๋ค ๋ฐ์ดํฐ์
์ฐ๊ธฐ๊ฐ ์๋ค๋ฉด
๊ทธ ๋ฐ์ดํฐ๋๋ถ๋ณ ๋ฐ์ดํฐ
์ด๋ค. - ๋ถ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ =>
๊ณ์ฐ
์ฐ๊ธฐ
๋ฅผ์ฝ๊ธฐ
๋ก ๋ฐ๊พธ๋ฉด์ก์
์ ์ค๊ณ๊ณ์ฐ
์ด ๋ง์์ง๋ค.
4) ๋ถ๋ณ์ฑ๋ ์ข์ง๋ง, ๋น์ฐํ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ ํ์ํ๋ค.
ex) ์ฅ๋ฐ๊ตฌ๋๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ์ง ์๋ค๋ฉด, ์ฅ๋ฐ๊ตฌ๋์ ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
5) ๋ถ๋ณ ๋ฐ์ดํฐ๋ ๋๋ฆฌ์ง ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๊ฑด, ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ๋ณด๋ค๋ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ๋๋ฆฌ๋ค.
๋ค๋ง,
- ๋๋ฆฐ ๋ถ๋ถ์ ์ธ์ ๋ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค.
- ํ๋ ๋๋ถ๋ถ์ ์ธ์ด์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋ถ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ต์ ํ๋์ด ์๋ค.
- ์ฐ๋ฆฌ์ ์๊ฐ๋ณด๋ค ๋ง์ด ๋ณต์ฌํ์ง ์๋๋ค.
- ex) [1, 2, 3, โฆ, 100]์ด๋ ๋ฐฐ์ด์ ๋ณต์ฌ => 1๋ถํฐ 100๊น์ง์ ์ซ์๋ ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ณต์ฌํ์ง ์๋๋ค. ๋จ์ง ๋ฐฐ์ด์ ์ฐธ์กฐ๋ง ๋ณต์ฌํ๋ค.(100๊ฐ์ ์ซ์๋ฅผ ๋ณต์ฌํ ๊ฒ ๊ฐ์ง๋ง, ์๋๋ผ๋ ์ด์ผ๊ธฐ)
6) ์ ๋ฆฌ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์
๋ถ๋ณ ๋ฐ์ดํฐ
๋ ํ์ํ๋ค. - ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ์ฐ๊ธฐ๋ฅผ ํ๋ ๊ฒ์
๊ณ์ฐ
์ด ์๋๋ผ์ก์
์ด๋ค. ์นดํผ-์จ-๋ผ์ดํธ
: ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ณํ์ผ๋ก ์ ์งํ ์ ์๋ ์์น. ์ฆ, ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ ๋ณต์ฌ๋ณธ์ ๋ณ๊ฒฝํ ํ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ ๊ฒ.
์ค์ฒฉ ๋ฐ์ดํฐ(nested data): ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋ ๋ฐ์ดํฐ
์์ ๋ณต์ฌ(shallow copy): ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ณต์ฌํ์ง ์๊ณ ์ฐธ์กฐ๋ง ๋ณต์ฌํ๋ ๊ฒ(์ต์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ง ๋ณต์ฌํ๋ค.)
๊ตฌ์กฐ์ ๊ณต์ (structural sharing): ๋ ๊ฐ์ ์ค์ฒฉ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ๊ทธ ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ