[JS] ์๋ฐ์คํฌ๋ฆฝํธ ES2023 ๋ถ๋ณ์ฑ ๋ฐฐ์ด ๋ฉ์๋ ํบ์๋ณด๊ธฐ
Mutable / Immutable
Array.sort()
, Array.reverse()
, Array.splice()
๊ฐ์ ๋ฐฐ์ด ๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ๋ค. ๊ฐ์ฒด(๋ฐฐ์ด) ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์์ํ์ง ๋ชปํ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ ์ฝ๋์์ reversed
๋ ๊ฒฐ๊ณผ์ ์ผ๋ก regions
๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๊ณ ์๋ค. ์ฆ, regions
reversed
์ด ๋์ ๋์ผํ๋ค.
const regions = ['Seoul', 'Shanghai', 'Tokyo'];
const reversed = regions.reverse();
console.log(regions); // ['Tokyo', 'Shanghai', 'Seoul']
console.log(reversed); // ['Tokyo', 'Shanghai', 'Seoul']
// ๋ ๊ฐ์ด ๋์ผํ์ง ์ฌ๋ถ, ๋น๊ตํ๋ ๊ฐ์ด ๊ฐ์ฒด์ผ ๋ ์ฐธ์กฐ๊ฐ ๋น๊ต
Object.is(regions, reversed); // true
๐ก Immer ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ถ๋ณ์ฑ์ ์ ์งํ ์๋ ์๋ค.
ํํธ, ๋ฆฌ์กํธ์์ ๋ถ๋ณ์ฑ์ ์งํค์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ํ ์ํ๋ฅผ ์ค์ ํ๋ฉด ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์ push
, splice
, reverse
๊ฐ์ mutable ๋ฉ์๋ ๋์ , concat
, ์ ๊ฐ์ฐ์ฐ์
, filter
, slice
, map
๊ฐ์ immutable ๋ฉ์๋ ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์๋ค.
Array.from()
, ์ ๊ฐ ์ฐ์ฐ์
, slice()
๋ฑ์ ํตํด ๋ฐฐ์ด ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ ์์
์ ์ํํ๋ฉด ๋ถ๋ณ์ฑ์ ์งํฌ ์ ์์ง๋ง, ๋งค๋ฒ ๋ฐฐ์ด ๋ณต์ฌ๋ณธ์ ๋ง๋๋๊ฑด ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ค.
ES2023์ ์๋ก ๊ณต๊ฐํ toSorted
, toReversed
, toSpliced
, with
๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด์ ๋ณต์ฌํ๊ณ , ๋ณต์ฌ๋ณธ์ ๋ํด ๋ณ๊ฒฝ์ ์ํํ๋ค. ๋ฐ๋ก ๋ฐฐ์ด ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ง ์์๋ ๋ผ์ ๊ฐ๋
์ฑ๋ ์ข์์ง๋ค.
ES2023 ๋ฐฐ์ด ๋ฉ์๋
์๋ ES2023 ๋ฐฐ์ด ๋ฉ์๋๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ TypedArray์๋ ์ฌ์ฉํ ์ ์๋ค.
(TypedArray์splice
๋ฉ์๋๊ฐ ์์ผ๋ฏ๋กtoSpliced
๋ฉ์๋๋ ์ฌ์ฉ ๋ถ๊ฐ)
Array.toSorted
Array.toSorted()
๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก Array.sort()
๋ฉ์๋์ ๋์ผํ์ง๋ง ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ ์ ์ด ๋ค๋ฅด๋ค. ์๋ณธ ๋ฐฐ์ด์๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ด๋ ์ดํํธ ์์ด ์์ ํจ์์ฒ๋ผ ๋์ํ๋ค.
Array.sort()
์ฌ์ฉ ์ โผ
const numbers = [1, 2, 3, 4, 5];
const descNumbers = numbers.sort((a, b) => b - a); // ์๋ณธ ๋ฐฐ์ด ๋ณ๊ฒฝ
Object.is(numbers, descNumbers); // true
console.log(numbers); // [5, 4, 3, 2, 1]
console.log(descNumbers); // [5, 4, 3, 2, 1]
Array.toSorted()
์ฌ์ฉ ์ โผ
const numbers = [1, 2, 3, 4, 5];
const descNumbers = numbers.toSorted((a, b) => b - a); // ๋ณต์ฌ๋ณธ ์์ฑ
Object.is(numbers, descNumbers); // false
console.log(numbers); // [1, 2, 3, 4, 5]
console.log(descNumbers); // [5, 4, 3, 2, 1]
Array.toReversed
Array.toReversed()
๋ฉ์๋๋ Array.reverse()
๋ฉ์๋์ ์ ์ฌํ๊ฒ ๋์ํ์ง๋ง, ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ ์์๊ฐ ๋ฐ์ ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ค.
Array.reverse()
์ฌ์ฉ ์ โผ
const numbers = [1, 2, 3, 4, 5];
const descNumbers = numbers.reverse(); // ์๋ณธ ๋ฐฐ์ด ๋ณ๊ฒฝ
Object.is(numbers, descNumbers); // true
console.log(numbers); // [5, 4, 3, 2, 1]
console.log(descNumbers); // [5, 4, 3, 2, 1]
Array.toReversed()
์ฌ์ฉ ์ โผ
const numbers = [1, 2, 3, 4, 5];
const descNumbers = numbers.toReversed(); // ๋ณต์ฌ๋ณธ ์์ฑ
Object.is(numbers, descNumbers); // false
console.log(numbers); // [1, 2, 3, 4, 5]
console.log(descNumbers); // [5, 4, 3, 2, 1]
Array.toSpliced
Array.toSpliced(start, deleteCount, item1, item2, itemN)
Array.toSpliced()
๋ Array.splice()
์ ์ด์ง ๋ค๋ฅด๊ฒ ๋์ํ๋ค. splice()
๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ๊ณ , ์ญ์ ํ ์์๋ฅผ ํฌํจํ ๋ฐฐ์ด์ ๋ฐํํ์ง๋ง, toSpliced()
๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์ญ์ ํ์ง ์์ ์์๋ฅผ ํฌํจํ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ค.
const numbers = [1, 2, 3, 4, 5];
const spliced = numbers.splice(0, 1);
console.log(numbers); // [2, 3, 4, 5] -> ์๋ณธ ๋ฐฐ์ด ๋ณ๊ฒฝ
console.log(spliced); // [1] -> ์ญ์ ํ ์์
const numbers = [1, 2, 3, 4, 5];
const spliced = numbers.toSpliced(0, 1);
console.log(numbers); // [1, 2, 3, 4, 5] -> ์๋ณธ ๋ฐฐ์ด ์ ์ง
console.log(spliced); // [2, 3, 4, 5] -> ์ญ์ ํ์ง ์์ ์์
๋ง์ฝ ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์ญ์ ํ ๋จ์ ์์์ ์ญ์ ํ ์์๋ฅผ ๋ชจ๋ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ์๋์ฒ๋ผ slice()
๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์๋ค.
const numbers = [1, 2, 3, 4, 5];
const start = 0, count = 1
const spliced = numbers.toSpliced(start, count) // [2, 3, 4 ,5] -> ์ญ์ ํ ๋จ์ ์์
const removed = numbers.slice(start, start + count); // [1] -> ์ญ์ ํ ์์
Array.with
Array.with(index, value)
๋ฐฐ์ด์์ ํน์ ์ธ๋ฑ์ค์ ์๋ ์์๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ธ๋ผ์ผ ๋ ธํ ์ด์ (Bracket Notation)์ ์ฌ์ฉํ๋ค. ์๋ณธ ๋ฐฐ์ด์ ์ง์ ๋ณ๊ฒฝํ๋ mutable ๋ฐฉ์์ด๋ค.
const numbers = [1, 2, 3, 4, 5];
numbers[0] = 100;
console.log(numbers); // [100, 2, 3, 4, 5]
Array.with
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ณธ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ ํน์ ์ธ๋ฑ์ค์ ์์๋ฅผ ๋ณ๊ฒฝํ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ค. ๋ถ๋ณ์ฑ์ ์ ์งํ๋ฉด์ ๋ฐฐ์ด ์์๋ฅผ ๋ณ๊ฒฝํ ๋ ์ ์ฉํ๋ค.
const numbers = [1, 2, 3, 4, 5];
const updated = numbers.with(0, 100);
console.log(numbers); // [1, 2, 3, 4, 5];
console.log(updated); // [100, 2, 3, 4, 5]
Array ์์
extends
ํค์๋๋ก ๋ด์ฅ Array
๊ฐ์ฒด๋ฅผ ์์๋ฐ์ ์ธ์คํด์ค์์ map
, flatMap
, filter
, concat
๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด, ํด๋น ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฐ์ ๊ธฐ์กด ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋๋ค. ์ฆ, ๋์ผํ ํ์
์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค. ๋ฐ๋ฉด toSorted
, toReversed
, toSpliced
, with
๋ฉ์๋๋ Array
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
class MyArray extends Array {}
const numbers = new MyArray(1, 2, 3, 4, 5);
const multiplied = numbers.map(n => n * 2);
console.log(multiplified instanceof MyArray); // true -> MyArray ์ธ์คํด์ค
const reversed = numbers.toReversed();
console.log(reversed instanceof MyArray); // false -> Array ์ธ์คํด์ค
MyArray.from
์ ์ฌ์ฉํ๋ฉด ์๋ก์ด ๋ฐฐ์ด ๋ฉ์๋๋ MyArray
์ธ์คํด์ค๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
class MyArray extends Array {}
const numbers = new MyArray(1, 2, 3, 4, 5);
const reversed = MyArray.from(numbers.toReversed());
console.log(reversed instanceof MyArray); // true
๋ธ๋ผ์ฐ์ ์ง์
- Chrome 110 (Released 2023-02-07)
- Safari 16.3
- Node.js 20
- Deno 1.31
๋ ํผ๋ฐ์ค
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[Vite] ์ด๊ธฐ ๋ก๋ ์๊ฐ ๊ฐ์ ์ ์ํ Vendor Chunk ์ชผ๊ฐ๊ธฐ
[Vite] ์ด๊ธฐ ๋ก๋ ์๊ฐ ๊ฐ์ ์ ์ํ Vendor Chunk ์ชผ๊ฐ๊ธฐ
2024.05.24 -
[Markdown] GitHub ๋งํฌ๋ค์ด ์์ฑ ๊ฟํ ๋ชจ์
[Markdown] GitHub ๋งํฌ๋ค์ด ์์ฑ ๊ฟํ ๋ชจ์
2024.05.23 -
[JS] ์์ด ์ถ์ฝ์ด ๊ด๋ จ ์ ํธ๋ฆฌํฐ ํจ์ ๋ชจ์
[JS] ์์ด ์ถ์ฝ์ด ๊ด๋ จ ์ ํธ๋ฆฌํฐ ํจ์ ๋ชจ์
2024.05.22 -
[Algorithm] ๋ณต์กํ DOM ์์ ๋ก ๋ณด๋ DFS ํ์ ์๊ณ ๋ฆฌ์ฆ
[Algorithm] ๋ณต์กํ DOM ์์ ๋ก ๋ณด๋ DFS ํ์ ์๊ณ ๋ฆฌ์ฆ
2024.05.22