Frontend๐ŸŽจ/JavaScript๐Ÿ’›, TypeScript๐Ÿ’™

[JavaScript, TypeScript] ์œ ์‚ฌ ๋ฐฐ์—ด, ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด, Array.from()

JanuDev 2025. 9. 18. 16:29

๊ฐ ํ”„ํ•˜๋ฉด์„œ Array.from()์„ ์“ธ์ผ์ด ๊ฝค ๋งŽ์ด ์ƒ๊ฒผ๋Š”๋ฐ, ์ด๊ฑฐ ์„ค๋ช…์„ ๋“ฃ์ž๋‹ˆ ์ง„์งœ ๋ฌด์Šจ์†Œ๋ฆฐ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์ •๋ฆฌํ•œ๋‹ค.

 

1. ์ •์˜

Array.from()์€ '์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋‚˜ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜'๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด์™€ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

 

(1) ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด

'์ฐจ๋ก€๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ'์„ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿฌ ์ง€ํ”ผํ‹ฐ์˜ ์˜ˆ์‹œ ๐Ÿ‘ฝ
  • ๋„ค๊ฐ€ ์‚ฌํƒ•์ด 5๊ฐœ ๋“ค์–ด ์žˆ๋Š” ๋ด‰์ง€๋ฅผ ๋“ค๊ณ  ์žˆ์–ด.
  • ๋ด‰์ง€๋ฅผ ๋œฏ์–ด์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์ง€?
  • ์ด ๋ด‰์ง€ = ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด
  • ์‚ฌํƒ• ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋Š” ๊ณผ์ • = ๋ฐ˜๋ณต(iteration)

์ฆ‰, ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋Š” ‘๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ’ ๋ผ๋Š” ๋œป์ด์•ผ.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ผ ํ•˜๋ฉด

  • ๋ฌธ์ž์—ด(String) : "hello"๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด h, e, l, l, o
  • ๋ฐฐ์—ด(Array) : [1, 2, 3] ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด 1, 2, 3
  • Set, Map๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค
  • NodeList : document.querySelectorAll()์˜ ๊ฒฐ๊ณผ
  • arguments : ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ž ๋ชจ์Œ

์ด ์นœ๊ตฌ๋“ค์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค. 

์ด ์นœ๊ตฌ๋“ค์€ ํŠน์ •ํ•œ ์ˆœํšŒ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š”๋ฐ, ๊ทธ ๊ทœ์น™์„ ์ˆœํšŒ ๊ทœ์•ฝ(Iteration Protocols)๋ผ๊ณ  ํ•œ๋‹ค.

์ˆœํšŒ ๊ทœ์•ฝ์— ๋”ฐ๋ผ ์ดํ„ฐ๋Ÿฌ๋ธ”๋“ค์€ for ... of ๋ฌธ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ๊ฑด ๋’ค์—์„œ!

(2) ์ˆœํšŒ ๊ทœ์•ฝ 

์œ„ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋“ค์ด ๋”ฐ๋ฅด๊ธฐ๋„ ํ•˜๊ณ , ์ˆœํšŒ๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™(protocols)๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

 

1๏ธโƒฃ Iterable interface

๐Ÿ‘‰ "์ด ๊ฐ์ฒด๋Š” ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค"๋Š” ๊ทœ์น™

๊ฐ์ฒด๊ฐ€ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

  • ๊ฐ์ฒด์— @@iterator(์ฆ‰ [Symbol.iterator] ๋ฉ”์†Œ๋“œ)๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. → @@iterator = "์ด ๊ฐ์ฒด์˜ ๋ฐ˜๋ณต ๋ฉ”์„œ๋“œ ํ‚ค๋Š” Symbol.iterator์˜ˆ์š”" ๋ผ๋Š” ์˜๋ฏธ. ์‹ค์ œ ์ฝ”๋“œ์—์„  ๋ฌด์กฐ๊ฑด Symbol.iterator๋ฅผ ์จ์•ผ ํ•œ๋‹ค.
    • Symbol.iterator๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด Iterator ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.,
  • for ... of ๋ฌธ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

2๏ธโƒฃ Iterator interface

๐Ÿ‘‰ "์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ผ ๊ฒƒ์ธ๊ฐ€"์— ๋Œ€ํ•œ ๊ทœ์น™

์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์‹ค์ œ๋กœ ์ˆœํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜

  • ๊ฐ์ฒด๊ฐ€ next() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ด ๋•Œ next()๋Š” {value, done}์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. 

์†”์งํžˆ ๊ธ€๋กœ๋งŒ ๋ณด๋ฉด ๋ฌด์Šจ ์†Œ๋ฆฐ์ง€ ์ ˆ๋Œ€ ๋ชจ๋ฅด๋‹ˆ๊นŒ ์ฝ”๋“œ ์˜ˆ์‹œ๋ฅผ ๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

const arr = [10, 20, 30]
const iterator = arr[Symbol.iterator]()

console.log(iterator.next()) // { value: 10, done: false }
console.log(iterator.next()) // { value: 20, done: false }
console.log(iterator.next()) // { value: 30, done: false }
console.log(iterator.next()) // { value: undefined, done: true }

1๏ธโƒฃ ์—ฌ๊ธฐ์„œ arr[Symbols.iterator] → ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ๊ณ„

= ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ’(10, 20, 30)์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์—ญํ• .

arr์€ ์ด๋ฏธ Iterable์ด๊ณ (๋ฐฐ์—ด์ด๋‹ˆ๊นŒ), arr[Symbol.iterator]()์„ ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ๋‚ด๋ถ€์—์„œ Iterator์„ ๋ฝ‘์•„์•ผ ํ•œ๋‹ค.

 

2๏ธโƒฃ iterator.next() → ๊ธฐ๊ณ„๋ฅผ ๋Œ๋ ค์„œ ๊ฐ’ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๊ธฐ

next()๋Š” ํ•ญ์ƒ { value, done } ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ,

  • value: ํ˜„์žฌ ๊ฐ’
  • done: ๋๋‚ฌ๋Š”์ง€ ์—ฌ๋ถ€ (true๋ฉด ์ˆœํšŒ ์ข…๋ฃŒ)

์ด๋‹ค.

 

(3) ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด

์ง„์งœ ๋ฐฐ์—ด์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ  length์†์„ฑ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด. 

๋Œ€ํ‘œ์ ์œผ๋กœ

  • ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” argument 
  • DOM ๊ด€๋ จ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด(NodeList, HTMLCollection)
    • NodeList : document.querySelectorAll()์˜ ๊ฒฐ๊ณผ. ์œ ์‚ฌ๋ฐฐ์—ด + ์ดํ„ฐ๋Ÿฌ๋ธ”(for...of ๊ฐ€๋Šฅ)
    • HTMLCollection : document.getElementsByTagName(), getElemetsByClassName() ๊ฐ™์€ ๊ฒฐ๊ณผ, ์œ ์‚ฌ๋ฐฐ์—ด์€ ๋งž์ง€๋งŒ ์ดํ„ฐ๋Ÿฌ๋ธ”์€ ์•„๋‹˜(for...of ๋ถˆ๊ฐ€)
  • ๋ฌธ์ž์—ด String

๊ฐ™์€๊ฒŒ ์žˆ๋‹ค.

 

โœ… argument ์˜ˆ์‹œ

function test(a, b, c){
  console.log(arguments) // Arguments(3) [10, 20, 30, callee: ƒ, Symbol(Symbol.iterator): ƒ]
  console.log(arguments[0]) // 10
  console.log(arguments.length) // 3
}

test(10, 20, 30)

โœ… NodeList ์˜ˆ์‹œ

<ul>
    <li>๊น€๋ฐฅ</li>
    <li>๋ผ๋ฉด</li>
    <li>๋–ก๋ณถ์ด</li>
</ul>

์—ฌ๊ธฐ์„œ li์— ์žˆ๋Š” ๊ฐ’๋“ค์€ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด ์ค‘ NodeList ์ด๋‹ค.

const liElements = document.querySelectorAll("li")
console.log(liElements) // NodeList(3) [li, li, li]

for (let i = 0; i < liElements.length; i++) {
    console.log(liElements[i].textContent)
    // ์ถœ๋ ฅ: "๊น€๋ฐฅ" "๋ผ๋ฉด" "๋–ก๋ณถ์ด"
}

๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์ด

  • length ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ 
  • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(ex. obj[0], obj[1])
  • for๋ฌธ์œผ๋กœ ๋ฐ˜๋ณตํ•  ์ˆœ ์žˆ๋‹ค.

์ง„์งœ ๋ฐฐ์—ด์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— map(), filter(), push()์™€ ๊ฐ™์€ ์ง„์งœ ๋ฐฐ์—ด ์ „์šฉ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆœ ์—†๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ง„์งœ ๋ฐฐ์—ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, Array.from()์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค!

 

2. Array.from()์ด๋ž€

์ด๊ฑฐ ์„ค๋ช…ํ•˜๋ ค๊ณ  ์•ž์— ์žˆ๋Š” ๊ฒƒ๋“ค ์‹น ๋‹ค ์„ค๋ช…ํ•œ๊ฑฐ๋‹ค...

์ด ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์‹ค์ œ ๋ฐฐ์—ด์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฐ์ฒด๋“ค์„ ์ง„์งœ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

const str = "Hello" // ๋ฌธ์ž์—ด, ์œ ์‚ฌ ๊ฐ์ฒด
console.log(Array.from(str)) // ์ถœ๋ ฅ: ['H', 'e', 'l', 'l', 'o']

 

Array.from์˜ ์ƒ๊น€์ƒˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Array.from(arrayLike, mapFn, thisArg)
  • arrayLike : ์œ ์‚ฌ ๊ฐ์ฒด (ํ•„์ˆ˜๊ฐ’)
  • mapFn : ๊ฐ ์š”์†Œ์— ์ ์šฉํ•  ํ•จ์ˆ˜ (์„ ํƒ)
  • thisArg : mapFn ์‹คํ–‰ ์‹œ this๋กœ ์‚ฌ์šฉํ•  ๊ฐ’ (์„ ํƒ)

3. ํŠน์ง•

1๏ธโƒฃ๋งŒ์•ฝ arrayLike ์ธ์ž๊ฐ€ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด ํ˜น์€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉด ๋นˆ ๋ฐฐ์—ด[ ]์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const num = 1 // ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋‚˜ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ์ˆซ์ž

console.log(Array.from(num)) // [] ์ถœ๋ ฅ

 

2๏ธโƒฃ๋‘๋ฒˆ์งธ ์ธ์ž mapFn์—์„œ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•œ ๋ณ€ํ™˜ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

const numArr = [1, 2, 3, 4, 5]
const double = Array.from(numArr, num -> num * 2)

console.log(double) // [2, 4, 6, 8, 10]

 

[์ฐธ๊ณ  ๋ฌธํ—Œ]

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/from

 

Array.from() - JavaScript | MDN

console.log(Array.from("foo")); // Expected output: Array ["f", "o", "o"] console.log(Array.from([1, 2, 3], (x) => x + x)); // Expected output: Array [2, 4, 6] Array.from(arrayLike) Array.from(arrayLike, mapFn) Array.from(arrayLike, mapFn, thisArg) arrayLi

developer.mozilla.org

 

https://codingeverybody.kr/%ec%9e%90%eb%b0%94%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8-array-from-%ed%95%a8%ec%88%98/

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Array.from() ํ•จ์ˆ˜ – ์œ ์‚ฌ ๋ฐฐ์—ด๊ณผ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ - ์ฝ”๋”ฉ์—๋ธŒ๋ฆฌ๋ฐ”๋””

Array.from() ํ•จ์ˆ˜๋Š” ์ง€์ •ํ•œ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋‚˜ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ํ•ด๋‹น ๊ฐ์ฒด๋“ค์„ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๊ณ  ์‹ถ์„ ๋•Œ ์‰ฝ๊ณ  ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

codingeverybody.kr

https://codingeverybody.kr/%ec%9e%90%eb%b0%94%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8-iteration-protocols/

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Iteration Protocols – ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด - ์ฝ”๋”ฉ์—๋ธŒ๋ฆฌ๋ฐ”๋””

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Iteration Protocols๋Š” ์ˆœํšŒ ๊ทœ์•ฝ(protocol, ํ”„๋กœํ† ์ฝœ)์œผ๋กœ, ES6 ์ดํ›„ ๋ฐฐ์—ด, ๋ฌธ์ž์—ด, Map, Set ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ‘œ์ค€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

codingeverybody.kr

https://codingeverybody.kr/%ec%9e%90%eb%b0%94%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8-array-like-objects/

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด(Array-like Objects) – ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• - ์ฝ”๋”ฉ์—๋ธŒ๋ฆฌ๋ฐ”๋””

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด๋Š” ์ง„์งœ ๋ฐฐ์—ด์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์˜ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , length ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์˜ ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

codingeverybody.kr

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%9D%B4%ED%84%B0%EB%9F%AC%EB%B8%94-%EC%9D%B4%ED%84%B0%EB%A0%88%EC%9D%B4%ED%84%B0-%F0%9F%92%AF%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4

 

[JS] ๐Ÿ“š ์ดํ„ฐ๋Ÿฌ๋ธ” & ์ดํ„ฐ๋ ˆ์ดํ„ฐ - ๐Ÿ’ฏ์™„๋ฒฝ ์ดํ•ด

์ดํ„ฐ๋Ÿฌ๋ธ”(interable) ์ดํ„ฐ๋Ÿฌ๋ธ”(interable)์ด๋ž€ ์ž๋ฃŒ๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” ๋ฐฐ์—ด ์—ญ์‹œ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด์ด๋‹ค. ๊ทธ๋Ÿผ ๋งŒ์ผ ์ด ๋ฐฐ์—ด์—๊ฒŒ ์ดํ„ฐ๋Ÿฌ๋ธ” ํ‘œ์‹์„ ์—†์• ๋ฒ„๋ฆฌ๋ฉด ์–ด

inpa.tistory.com