์์ ๋ค์ด์ค๋ ํจ์ํ ์ฝ๋ฉ Chapter 7
๐ ์์ ๋ค์ด์ค๋ ํจ์ํ ์ฝ๋ฉ - ์ฌํํ ์ฝ๋๋ก ๋ณต์กํ ์ํํธ์จ์ด ๊ธธ๋ค์ด๊ธฐ
์ด ๊ธ์ ์์ ๋ค์ด์ค๋ ํจ์ํ ์ฝ๋ฉ - ์ฌํํ ์ฝ๋๋ก ๋ณต์กํ ์ํํธ์จ์ด ๊ธธ๋ค์ด๊ธฐ๋ฅผ ์ฝ๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ํจ์ํ๋ ํจ์ํ์ด์ง๋ง, ์ด ์ฑ ์ ํตํด ์ข๋ ๊น๋ํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ ๊ฒ์ด๋ ํ์๋ค์ ์๊ฒฌ์ ํ ๋๋ก ์ด๋ฒ ์คํฐ๋ ์์ ์ผ๋ก ์ ์ ํ์์ต๋๋ค.
Chap 7. ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ์ฐ๋ฉด์ ๋ถ๋ณ์ฑ ์งํค๊ธฐ
- ๋ ๊ฑฐ์ ์ฝ๋ ํน์ ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ๋ฐฉ์ด์ ๋ณต์ฌ
- ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ์ ์ฐจ์ด
์นดํผ-์จ-๋ผ์ดํธ
์๋ฐฉ์ด์ ๋ณต์ฌ
๊ตฌ๋ถ
์ฐ๋ฆฌ๊ฐ ์ ๋ขฐํ ์ ์๋ ์ฝ๋์ ์ํตํ ๋, ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํ๋ค.
์์์ ๋ฐฐ์ด ์นดํผ-์จ-๋ผ์ดํธ
๋ ์์ ํ ์ฝ๋ ๋ด์์ ๋ถ๋ณ์ฑ์ ์งํค๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ง์ ๋ด๋ถ ์ฝ๋๋ฅผ ์นดํผ-์จ-๋ผ์ดํธ
๋ก ๋ณ๊ฒฝํ์ฌ ๋ถ๋ณ์ฑ์ ์งํค๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง, ๊ทธ๋ ์ง ๋ชปํ ์ํฉ๋ค์ด ์๋ค. ์๋ฅผ ๋ค๋ฉด์ฐ๋ฆฌ๊ฐ ์ง์ ์ฝ๋๋ฅผ ์์ ํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ผํ ๋์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ถ๋ณ์ฑ์ ์งํจ ์์ ํ ์ฝ๋์์ ๋ถ์์ ํ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๊ณ ๊ฐ ๋, ์ด๋ป๊ฒ ๋ถ๋ณ์ฑ์ ์งํฌ ์ ์์๊น?
๊ทธ ํด๋ต์ด ๋ฐฉ์ด์ ๋ณต์ฌ์ ์๋ค. ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๊ฐ์ฒด์ ๋ํ ๊น์ ๋ณต์ฌ
๋ฅผ ํตํด ๋ถ์์ ํ ์ฝ๋๋ก ์ ๋ฌํ ๋๋ ๋ณต์ฌ๋ฅผ ํด์ ์ ๋ฌํ๊ณ , ๋ถ์์ ํ ์ฝ๋๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋๋ ๋ณต์ฌ๋ฅผ ํด์ ๋ฐ๋ ๊ฒ์ด๋ค. ์๋๋ ์์ฃผ ๊ฐ๋จํ ์์ ์ด๋ค.
// ์ฌ๊ธฐ์ push() ํจ์๋ ๊ธฐ์กด์ array๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์๋ค.
function push(array, value) {
array.push(value);
}
const nums = [1, 2, 3, 4, 5];
push(nums, 6); // ๊ธฐ์กด nums ๋ฐฐ์ด์ 6์ด ์ถ๊ฐ๋๋ค. => ๋ถ๋ณ์ฑ์ด ๊นจ์ง๋ค.
// ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ํตํด ๋ถ๋ณ์ฑ์ ์งํค๋ ๋ฐฉ๋ฒ
const numsCopy = deepCopy(nums);
push(numsCopy, 6); // ๋ถ๋ณ์ฑ์ ์งํค๊ธฐ ์ํด deepCopy๋ฅผ ์ฌ์ฉํ๋ค.
const newNums = deepCopy(numsCopy); // ๋ถ๋ณ์ฑ์ ์งํค๊ธฐ ์ํด deepCopy๋ฅผ ์ฌ์ฉํ๋ค.
// ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ํตํ ๋ฐฉ๋ฒ์ ํจ์๋ก ๋ง๋ค๊ธฐ
function pushSafe(array, value) {
const copy = deepCopy(array);
copy.push(value);
return deepCopy(copy);
}
๊น์ ๋ณต์ฌ ๊ตฌํํด๋ณด๊ธฐ
ํ์ ๊น์ง ๊ณ ๋ คํ๋ฉด ์๋ฒฝํ์ง ์์ง๋ง ์ฌ๊ท๋ฅผ ํตํด ๊น์ ๋ณต์ฌ๋ฅผ ๊ตฌํํ ์ ์๋ค.
const getDeepCopy = (target) => {
if (target === null) return null;
if (target === undefined) return undefined;
if (Array.isArray(target)) return target.map((item) => getDeepCopy(item));
if (typeof target === 'object') {
const copy = {};
for (const key in target) {
copy[key] = getDeepCopy(target[key]);
}
return copy;
}
return target;
์นดํผ-์จ-๋ผ์ดํธ
์ ๋ฐฉ์ด์ ๋ณต์ฌ
๋น๊ตํด๋ณด๊ธฐ
์นดํผ-์จ-๋ผ์ดํธ
- ์ฃผ๋ก ํต์ ํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ๋ ์ฌ์ฉ
- ์์ ํ ์ฝ๋์์ ๋ถ๋ณ์ฑ์ ์งํค๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ฌ์ค ์นดํผ-์จ-๋ผ์ดํธ๋ฅผ ํตํด ์์ ํ ์ฝ๋๊ฐ ๋ง๋ค์ด ์ง๋ค.
์์ ๋ณต์ฌ
๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋น๊ต์ ๋น์ฉ์ด ์ ๊ฒ ๋ ๋ค.
1. ๋ฐ๊ฟ ๋ฐ์ดํฐ์ ์์ ๋ณต์ฌ๋ณธ์ ๋ง๋ ๋ค.
2. ๋ณต์ฌ๋ณธ์ ๋ณ๊ฒฝํ๋ค.
3. ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ค.
๋ฐฉ์ด์ ๋ณต์ฌ
- ์ฃผ๋ก ์ ๋ขฐํ ์ ์๋ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ
- ์์ ํ ์ฝ๋์ ๋ถ์์ ํ ์ฝ๋์ ๊ฒฝ๊ณ์์ ์ฌ์ฉํ๋ค.
๊น์ ๋ณต์ฌ
๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋น๊ต์ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
1. ์์ ์ง๋์์ ๋๊ฐ๋ ๋ฐ์ดํฐ์ ๊น์ ๋ณต์ฌ๋ฅผ ํด์ ๋ด๋ณด๋ธ๋ค.
2. ์์ ์ง๋๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ์ ๊น์ ๋ณต์ฌ๋ฅผ ํด์ ๋ค์ฌ์จ๋ค.