waffle
์™€ํ”Œ๊ณต์žฅ
waffle
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (72)
    • ๐Ÿ“’ Daily Log (2)
    • ๐Ÿ”จ Dev_BE (5)
      • ๊ฐœ๋…์ •๋ฆฌ (4)
      • ๊ธฐ๋ก (1)
    • ๐Ÿ”จ Dev_FE (4)
    • ๐Ÿ”จ Dev_DB (1)
    • โš™ Dev_Ops (0)
    • ๐Ÿ”ก Lang (2)
      • Python (2)
    • ๐Ÿ’ก ํ”„๋กœ์ ํŠธ (9)
      • Base (1)
      • ์•„๋Œ€๋ฐ€๋งต (8)
    • ๐Ÿƒ๐Ÿป ์™ธ๋ถ€ํ™œ๋™ (2)
      • [ํ”„๋ฆฌ์ฝ”์Šค] ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 7๊ธฐ - BE (2)
    • ๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ (13)
      • [STUDY] ์•Œ๊ณ ๋ฆฌ์ฆ˜ (9)
      • ๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021) (4)
    • ๐Ÿ“™ [STUDY] AI (2)
      • Tensorflow (2)
    • ๐Ÿ” ๋ณด์•ˆ,์ •๋ณด๋ณดํ˜ธ (32)
      • CTF (2)
      • ๐Ÿ“˜ [STUDY] ํฌ๋ Œ์‹ (15)
      • ๐Ÿ“˜ [STUDY] ์ทจ์•ฝ์  (4)
      • ๐Ÿ“˜ [STYDY] ๋ฆฌ๋ฒ„์‹ฑ (11)
    • ๐Ÿ“” IT ๋ฒ•๋ฅ  (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ๊ฐœ๋ฐœ๋ฐฑ์„œ
  • reversing
  • ์ˆ˜ํ•™_1(์—ฐ์Šต)
  • ๋ฐ์ผ๋ฆฌ์•Œ๊ณ 
  • dopwn
  • sql
  • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
  • Weekly
  • ์—ฐ์Šต_์ž๋ฃŒ๊ตฌ์กฐ
  • scrum
  • write-up
  • ์ˆ˜ํ•™_1
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • ๊ฐœ๋ฐœ
  • ๋ฌธ์ž์—ด
  • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ_๊ณ ๋“์ 
  • ์ž๋ฃŒ๊ตฌ์กฐ
  • API
  • ์šฐํ…Œ์ฝ”_7๊ธฐ
  • javascript
  • ๋ฐฑ์ค€
  • JAVA_API
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ”„๋ฆฌ์ฝ”์Šค
  • ์•„์ฃผ๋Œ€_์•Œ๊ณ ๋ฆฌ์ฆ˜_๊ต์œก
  • js
  • gdb
  • ์šฐํ…Œ์ฝ”
  • til
  • Java

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
waffle

์™€ํ”Œ๊ณต์žฅ

[ JS ] Prototype
๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ/๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021)

[ JS ] Prototype

2022. 1. 6. 17:50
728x90

0. ๊ฐœ์š”

 

js์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๋ฅผ ํ†ตํ•ด ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์›น์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ์–ธ์–ด๋กœ์„œ JS์˜ ๊ธฐ๋ณธ์„ ๊ณต๋ถ€ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.๊ทธ ์‹œ์ž‘์œผ๋กœ js์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” prototype์— ๋Œ€ํ•œ ๊ฐœ๋…๊ณผ ํ™œ์šฉ์— ๋Œ€ํ•˜์—ฌ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

1. ํ•™์Šต๋ชฉ์ 

 

๊ฐœ๋ฐœ์–ธ์–ด์  ๊ด€์ ์—์„œ์˜ javascript ๋ถ„์„

๊นŠ์€ ์ดํ•ด๋ฅผ ํ†ตํ•œ ์ตœ์ ํ™”๋œ js ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€ํ–ฅ

 

2. ํ•™์Šต๋‚ด์šฉ

 

1) Javascript ์†Œ๊ฐœ

 

Javascript๋Š” ๊ฐ€๋ฒผ์šด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ ํ˜น์€ jit (just-in-time) ์ปดํŒŒ์ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์ผ๊ธ‰ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜, ๋‹ค์ค‘ ํŒจ๋Ÿฌ๋‹ค์ž„, ๋‹จ์ผ ์Šค๋ ˆ๋“œ, ๋™์ ์–ธ์–ด ์ž…๋‹ˆ๋‹ค.

- MDN Web Docs 

 

MDN์˜ ์†Œ๊ฐœ์™€ ๊ฐ™์ด js๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€์ง„, ํŠนํžˆ ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ ์•Œ์•„๋ณผ 'ํ”„๋กœํ† ํƒ€์ž…' ๊ธฐ๋ฐ˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

 

2) Javascript ์ž๋ฃŒํ˜•

 

Javascript์—๋Š” ์ž๋ฃŒํ˜•์ด ๋ช‡๊ฐœ ์—†์Šต๋‹ˆ๋‹ค.

boolean, number, string, object์™€ null, undefined์ด ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด์ด๋‚˜ ํ•จ์ˆ˜ ๋“ฑ ์œ„์— ์ ํ˜€์žˆ๋Š” ๊ฒƒ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ „๋ถ€ object, ์ฆ‰ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ๊ฐ์ฒด๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋„:

let test_object = {};

๊ฒฐ๊ตญ ์ด๋Ÿฐ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

 

let test_object = new Object();

 

3) Prototype

ํ•œ๋งˆ๋””๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด "์ƒ์†๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ" ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค.

 

prototype์€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ƒ์† ๊ฐœ๋…๊ณผ ๊ฐ™์ด ํ”„๋กœํผํ‹ฐ(property)๋‚˜ ๋ฉ”์†Œ๋“œ(method)๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฐœ๋…์„ ๋งํ•ฉ๋‹ˆ๋‹ค. '์›๊ธฐ'๋ผ๋Š” ์‚ฌ์ „์  ์ •์˜๋กœ ์ดํ•ดํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.

 

Java ๋“ฑ์˜ ์–ธ์–ด์™€๋Š” ๋‹ฌ๋ฆฌ, js๋Š” ์œ„์—์„œ์˜ ์–ธ๊ธ‰๊ณผ ๊ฐ™์ด prototype ๊ธฐ๋ฐ˜ ์–ธ์–ด๋ผ class๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Class ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ Java์—์„œ ์‚ฌ์šฉํ•˜๋˜ ์ƒ์†๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ฃ .

๋”ฐ๋ผ์„œ ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ƒ์†๊ธฐ๋Šฅ์„ ๋”ฐ๋ผํ•˜๊ธฐ ์œ„ํ•ด ์œ„์— ์ทจ์†Œ์„ ์œผ๋กœ ๊ทธ์–ด๋†“์€ ๋ฌธ์žฅ๊ณผ ๊ฐ™์ด prototype์„ ์‚ฌ์šฉํ•ด ์ƒ์†๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๊ฐ์ฒด์™€ ๊ทธ ๊ฐ์ฒด์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ๋ถ€๋ชจ๊ฐ์ฒด๋Š” ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”๋ฐ, ์ด ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ์ฒด์ธ (Chain)์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์น˜ ์ž๋ฃŒ๊ตฌ์กฐ์˜ LinkedList์™€ ๋น„์Šทํ•œ ๋А๋‚Œ์ž…๋‹ˆ๋‹ค.

 

4) Prototype์˜ ์ข…๋ฅ˜

Prototype์€ 2๊ฐ€์ง€ ๊ฐœ๋…์„ ๋ฌถ์–ด์„œ ๋ถ€๋ฅด๋Š” ๋ง์ž…๋‹ˆ๋‹ค. 

์ฒซ๋ฒˆ์งธ ๋ฌถ์—ฌ์žˆ๋Š” ๊ฐœ๋…์€ Prototype Object ์ž…๋‹ˆ๋‹ค.

 

4-1) Prototype Object

Prototype Object๋ž€ ์–ด๋–ค ํ•จ์ˆ˜์˜ ์ •์˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋Š” prototype ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช…์„ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์ด js๋ฅผ ํ•ด์„ํ•  ๋•Œ ์ด๋ฃจ์–ด์ง€๋Š” ์ž‘์—…์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค๋ฉด:

function Laptop() {}

๋ธŒ๋ผ์šฐ์ €๋Š” 2๊ฐ€์ง€ ์ž‘์—…์„ ๋™์‹œ์— ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

1 ) ํ•จ์ˆ˜์— ์ƒ์„ฑ์ž ์ž๊ฒฉ ๋ถ€์—ฌ (Constructor)

 

'new'๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ์  ์žˆ์„๊ฒ๋‹ˆ๋‹ค.

new ํ‚ค์›Œ๋“œ๋Š” ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ '์ƒ์„ฑ์ž (Constructor)'๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ํ•จ์ˆ˜๋Š” ์ •์˜๋  ๋•Œ ์ด ์ž๊ฒฉ์„ ๋ฐ›์•„ new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

2 ) ํ•ด๋‹น ํ•จ์ˆ˜์— ๋Œ€ํ•œ Prototype Object ์ƒ์„ฑ & ์—ฐ๊ฒฐ

 

๋™์‹œ์— ์‹œํ–‰๋˜๋Š” ๋˜๋‹ค๋ฅธ ์ž‘์—…์ค‘ ํ•˜๋‚˜๋Š” ์ง€๊ธˆ ๊ณต๋ถ€์ค‘์ธ Prototype Object์— ๋Œ€ํ•œ ์ƒ์„ฑ๊ณผ ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค.

์ƒ์†๊ด€์ ์—์„œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •์ฒด์„ฑ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Prototype Object๋Š” 'costructor'์™€ '__proto__'๋ผ๋Š” 2๊ฐ€์ง€ ์†์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 

'constructor' ์†์„ฑ์€ ์ด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ๊ทผ์›์ด ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

'__proto__'์†์„ฑ์€ Prototype Link์ž…๋‹ˆ๋‹ค.

(์•„๋ž˜์—์„œ ์ž์„ธํžˆ ๋ณด์ง€๋งŒ, Prototype Link๋Š” ์‰ฝ๊ฒŒ๋งํ•ด ๋‹ค๋ฅธ Prototype Object๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” link๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.)

 

๋™์‹œ์—, ํ•จ์ˆ˜์—์„œ๋„ Prototype Object์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ์ด ํ•œ๊ฐ€์ง€ ์ƒ๊น๋‹ˆ๋‹ค.

์ด ์†์„ฑ์ด ๋ฐ”๋กœ prototype ์ž…๋‹ˆ๋‹ค.

 

์ด 2๊ฐ€์ง€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด, ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Function์™€ Prototype Object์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„

4-1) Prototype Link (=__proto__)

์œ„์—์„œ ์ทจ์†Œ์ค„๋กœ ๊ทธ์–ด๋†“์€ ๋ฌธ์žฅ์„ ๋ณด์‹ ๋ถ„๋“ค์€ ๋Œ€์ถฉ ๊ฐ์„ ์žก์œผ์…จ๊ฒ ์ง€๋งŒ, Prototype Link๋Š” ๋‹ค๋ฅธ Prototype Object๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

์กฐ๊ธˆ ๋” ์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด, Prototype Link๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๊ทธ ์กฐ์ƒ์ด์—ˆ๋˜ ํ•จ์ˆ˜์˜ Prototype Object๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

 

์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” Laptop ํ•จ์ˆ˜์˜ Prototype Object์˜ __proto__ ์†์„ฑ๊ฐ’์€ Object์˜ Prototype Object ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ถ€๋ชจ๊ฐ€ ์•„๋‹Œ ์กฐ์ƒ ํ•จ์ˆ˜์˜ Prototype Object๋ฅผ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ, Laptop ํ•จ์ˆ˜ ๋‚ด๋ถ€์— MacbookAir๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์–ด๋„ ์•„๋ž˜ ๋“ฑ์‹์ด ์„ฑ๋ฆฝํ•ฉ๋‹ˆ๋‹ค. ๋‘˜๋‹ค Object ํ•จ์ˆ˜์˜ Prototype Object๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ฃ .

MacbookAir.prototype.__proto__ === Laptop.prototype.__proto__

 

์ฃผ์˜ํ•  ์ ์€ new ํ‚ค์›Œ๋“œ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—” ์ด์•ผ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•œ ํ•จ์ˆ˜์˜ Prototype Object๋ฅผ ์กฐ์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•œ ํ•จ์ˆ˜๊ฐ€ ํŠน์ • ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด, new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์˜ ์กฐ์ƒ Prototype Object๋ฅผ __proto__ ์†์„ฑ๊ฐ’์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

 

์•„๋ž˜๋Š” ์ œ๊ฐ€ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธํ•ด๋ณธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ์„ ์–ธ์œ„์น˜๋Š” __proto__ ์†์„ฑ๊ฐ’์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

5) ํ™œ์šฉ

js์˜ prototype์„ ํ™œ์šฉํ•ด ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

5-1) ์ž๋ฃŒํ˜• ์ „์—ญ ๋ฉ”์†Œ๋“œ ์„ค์ •

ํŠน์ • ์ž๋ฃŒํ˜•์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•œ ์ „์—ญ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ค์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, object array์—์„œ array๋ฅผ ์ „๋ถ€ string์œผ๋กœ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒผ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

Array.toString ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€๊ฐ’์ด string์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ์ ์ธ object ๊ฐ’์ด ์•„๋‹Œ '[ object Object ]'๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Array์˜ prototype ๊ฐ์ฒด์— toJSONString์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฐ์ฒด์—์„œ ๋ณ„๋„์˜ ํ•จ์ˆ˜ ์„ ์–ธ ์—†์ด ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Array.prototype.toJSONString = function() { 
	return this.map(v => JSON.stringify(v)).toString()
}
[{ foo: "bar", admin: "test" },  { foo: "bar2", admin: "test" }].toString()
// '[object Object],[object Object]'
[{ foo: "bar", admin: "test" },  { foo: "bar2", admin: "test" }].toJSONString()
// '{"foo":"bar","admin":"test"},{"foo":"bar2","admin":"test"}'

 

5-2) ๊ฐ์ฒด์˜ ์ž๊ธฐ์ž์‹  ์ฐธ์กฐ

๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ์ž๊ธฐ ์ž์‹ ์˜ ๋‹ค๋ฅธ ์†์„ฑ๊ฐ’์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿด ๋•Œ ๊ฐ์ฒด๋ฅผ ํ•จ์ˆ˜๋กœ ์ƒ์„ฑํ•˜๊ณ  this๋ฅผ returnํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

const obj = new function() {
    this.foo = "bar";
    this.abc = "def";
    this.values = this;
    return this;
}

console.log(obj); // { foo: "bar", abc: "def", values: { ... } }

 

๋‹จ, ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” JSON.stringify ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ > ๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ CSS ] CSS ๋ Œ๋”๋ง ํ๋ฆ„  (0) 2022.02.13
[ JS ] ์•„ํ† ๋ฏน ์ปดํฌ๋„ŒํŠธ ๋””์ž์ธ ๊ฐœ๋ฐœ ํŒจํ„ด  (0) 2022.02.09
[ JS ] Babel & EsLint  (0) 2022.01.24
    '๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ/๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ CSS ] CSS ๋ Œ๋”๋ง ํ๋ฆ„
    • [ JS ] ์•„ํ† ๋ฏน ์ปดํฌ๋„ŒํŠธ ๋””์ž์ธ ๊ฐœ๋ฐœ ํŒจํ„ด
    • [ JS ] Babel & EsLint
    waffle
    waffle
    ๊ฐœ๋ฐœ๊ธฐ์ˆ  ๊ด€๋ จ ๊ธ€๋“ค์€ velog์— ์žˆ์Šต๋‹ˆ๋‹ค :) (https://velog.io/@cm_waffle) Developer waffle = new Waffle();

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”