Front End/JavaScript

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

๐Ÿ–ฅ๏ธ

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์–ธ์–ด(ํ˜น์€ ์—”์ง„)์€ Java, C#, JavaScript ๋“ฑ์ด ์žˆ๋‹ค. C์™€ ๊ฐ™์€ ์ €์ˆ˜์ค€ ์–ธ์–ด์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด malloc()๊ณผ free()๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šค์Šค๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ•˜์ง€๋งŒ, JavaScript๋Š” ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋กœ์„œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ž๋™์œผ๋กœ ํ•ด์ œํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

โ“
๊ณ ์ˆ˜์ค€ ์–ธ์–ด์™€ ์ €์ˆ˜์ค€ ์–ธ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ธ๊ฐ„์—๊ฒŒ ์นœํ™”์ ์ธ์ง€, ๊ธฐ๊ณ„์—๊ฒŒ ์นœํ™”์ ์ธ์ง€์— ๋”ฐ๋ผ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์™€ ์ €์ˆ˜์ค€ ์–ธ์–ด๋กœ ๋‚˜๋ˆˆ๋‹ค.
  • ๊ณ ์ˆ˜์ค€ ์–ธ์–ด

    ์ธ๊ฐ„ ์นœํ™”์ ์ธ ์–ธ์–ด๋กœ, ์ธ๊ฐ„์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜์–ด์™€ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์ด ์žˆ์–ด ์ปดํŒŒ์ผ๋Ÿฌ ๋˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ, ํ•˜๋“œ์›จ์–ด์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

  • ์ €์ˆ˜์ค€ ์–ธ์–ด

    ๊ธฐ๊ณ„ ์นœํ™”์ ์ธ ์–ธ์–ด๋กœ ๋ ˆ์ง€์Šคํ„ฐ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋ณด๋‹ค ๋น ๋ฅธ ํŽธ์ด๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋„์™€์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ž˜๋ชป๋œ ์ธ์ƒ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ณ  JavaScript๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ๊ฐœ๋ฐœํ•œ ์•ฑ์˜ ์†๋„ ์ €ํ•˜, ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์ข…๋ฃŒ, ๋Š๋ฆฐ ์‘๋‹ต ์†๋„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ์™œ ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ƒ์กด ์ฃผ๊ธฐ

๋ฉ”๋ชจ๋ฆฌ ์ƒ์กด ์ฃผ๊ธฐ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๊ด€๊ณ„ ์—†์ด ๋น„์Šทํ•˜๋‹ค.

  1. ํ•„์š”ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ• ๋‹นํ•œ๋‹ค.
  1. ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (Read and Write)
  1. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด์ œํ•œ๋‹ค.

2๋ฒˆ์˜ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ JavaScript๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด ๊ฐ’์„ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ชจ๋“  ์–ธ์–ด์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ํ•˜์ง€๋งŒ 1, 3๋ฒˆ ๊ณผ์ •์€ ์ €์ˆ˜์ค€ ์–ธ์–ด์—์„œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์—์„œ๋Š” ์•”๋ฌต์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

let arr = [100, 200, 300, 400]

JavaScript๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋Œ€์‹  ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ค€๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ฐฐ์—ด์„ ํ• ๋‹นํ•  ๋•Œ ๋ฐฐ์—ด์„ ๋‹ด์„ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๊ฐ€ ๋ฐฐ์—ด๊ณผ ๋ฐฐ์—ด์— ๋‹ด๊ธด ๊ฐ’๋“ค์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ํ• ๋‹น์„ ์•Œ์•„์„œ ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋ถ€๋ถ„์€ ์ •์ˆ˜, ๋ฌธ์ž์—ด, ํ•จ์ˆ˜, ๊ฐ์ฒด ๋ชจ๋“  ์ž๋ฃŒํ˜•์—์„œ ์ž๋™์ ์œผ๋กœ ์ผ์–ด๋‚œ๋‹ค.

ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ (๊ฐ’ ์‚ฌ์šฉ)

๊ธฐ๋ณธ์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด ์†์„ฑ์˜ ๊ฐ’์„ ์ฝ๊ณ  ์“ฐ๊ฑฐ๋‚˜, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์— ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ์–ด๋‚œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋”์ด์ƒ ํ•„์š” ์—†๋‹ค๋ฉด ํ•ด์ œ๋ฅผ ํ•ด์•ผ ์•ฑ์˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์—์„œ ์ €์ˆ˜์ค€ ์–ธ์–ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฒฐ์ •ํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ด€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž์˜ ์ œ์–ด ์ •๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋†’์€ ํŽธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋ผ๋Š” ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ถ”์ ํ•˜๊ณ , ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จ๋œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์–ธ์–ด ์Šค์Šค๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ฒฐ์ •์ ์ธ ์˜์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์— ๋‚ด์žฅ๋œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋“ค์€ ์ œํ•œ์ ์ธ ํ•ด๊ฒฐ์ฑ…์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋ฐฉ๋ฒ•

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜์˜ ๋‘๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๋‹ค. ์ด ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋…์€ ์ฐธ์กฐ(reference)์ด๋‹ค.

  • ์ฐธ์กฐ(reference)

    ๋ช…์‹œ์ ์ด๋“ , ์•”๋ฌต์ ์ด๋“  ๊ด€๊ณ„ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ด€์ ์—์„œ ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, JavaScript ๊ฐ์ฒด๋Š” ์ž์‹ ์˜ ํ”„๋กœํ† ํƒ€์ž…(prototype)์— ๋Œ€ํ•ด ์•”๋ฌต์ ์ธ ์ฐธ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ  ์ž์‹ ์˜ ์†์„ฑ (property) ๊ฐ’์— ๋Œ€ํ•œ ๋ช…์‹œ์  ์ฐธ์กฐ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด, ๊ฐ์ฒด๋ž€ ํ˜‘์˜์  ๊ฐœ๋…์œผ๋กœ ์ผ๋ฐ˜์ ์ธ JavaScript ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ ๊ด‘์˜์  ๊ฐœ๋…์œผ๋กœ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„(function scope)๋‚˜ ๊ธ€๋กœ๋ฒŒ ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„(global lexical scope)๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค.

  • ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ•‘(lexical scoping)

    ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜์—์„œ ํ•ด์„๋˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ค‘์ฒฉ๋œ ๋” ์•ˆ์ชฝ์˜ ํ•จ์ˆ˜๋Š” ๋ถ€๋ชจ ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ ๋‹ค์Œ์—๋„ ๋ถ€๋ชจ ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŒ…(์ฐธ์กฐ ํšŸ์ˆ˜ ๊ณ„์‚ฐ)

ํ•œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ˆ˜๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๋Š” ์ฒ˜์Œ์—๋Š” ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํ•˜๋‚˜ ๋ฟ์ด์ง€๋งŒ, ๋ณ€์ˆ˜์˜ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋ณต์‚ฌ๋  ๋•Œ๋งˆ๋‹ค ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋˜ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๋Š” ์ค„์–ด๋“ ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๋ฉด, ๊ทธ ๊ฐ์ฒด์™€ ๊ด€๋ จํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋น„์šธ ์ˆ˜ ์žˆ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๊ฐ€ 0์ด ๋œ๋‹ค๋Š” ๋ง์€ ์•„๋ฌด๋„ ๊ทธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋Š” ๋ง๊ณผ ๊ฐ™๋‹ค.

function reference() {
  var obj1 = {};
  var obj2 = {};
  obj1.p = obj2; 
  obj2.p = obj1; 
}
reference();

๋‹จ, ์ด ๋ฐฉ์‹์€ ์ˆœํ™˜ ์ฐธ์กฐ๋กœ ์ธํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ ๋‘ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๊ฐ์ฒด๋“ค์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋’ค์—๋Š” ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜์–ด ์‹ค์งˆ์ ์œผ๋กœ ์“ธ๋ชจ๊ฐ€ ์—†๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋“ค์ด ์ฐจ์ง€ํ•˜๋˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•˜์ง€๋งŒ, ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ๋‘ ๊ฐ์ฒด๊ฐ€ ์ ์–ด๋„ ํ•œ๋ฒˆ์€ ์ฐธ์กฐํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜ ๋‹ค ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

ํŠธ๋ ˆ์ด์‹ฑ

ํ•œ ๊ฐ์ฒด์— flag๋ฅผ ๋‘๊ณ , ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‚ฌ์ดํด๋งˆ๋‹ค flag์— ํ‘œ์‹œ ํ›„ ์‚ญ์ œํ•˜๋Š” mark and sweep ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ฐ์ฒด์— in-use flag๋ฅผ ๋‘๊ณ , ์‚ฌ์ดํด๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ถ”์ ํ•ด ์‚ฌ์šฉ์ค‘์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ‘œ์‹œ(mark)ํ•œ๋‹ค. ๊ทธ ํ›„ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œ(sweep)ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค. ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด mark and sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์žฅ์ฐฉํ•˜๊ณ  ์žˆ๋‹ค.

mark and sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๊ฐ์ฒด์— ๋‹ฟ์„ ์ˆ˜ ์žˆ๋Š”์ง€(reachable)๋ฅผ ํŒ๋‹จํ•˜๊ณ  3๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.

  1. ๋ฃจํŠธ(Roots) : ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฃจํŠธ๋Š” ์ฝ”๋“œ์—์„œ ์ฐธ์กฐ๋˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฃจํŠธ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋Š”ย windowย ๊ฐ์ฒด์ด๋ฉฐ, Node.js์—์„œ๋Š” global์ด๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ๋ชจ๋“  ๋ฃจํŠธ์˜ ์™„์ „ํ•œ ๋ชฉ๋ก์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.
  1. ๋ชจ๋“  ๋ฃจํŠธ์™€ ๊ทธ ์ž์‹๋“ค์„ ๊ฒ€์‚ฌํ•ด์„œ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ๋ฃจํŠธ๊ฐ€ ๋‹ฟ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ๋“ค์€ ๊ฐ€๋น„์ง€๋กœ ํ‘œ์‹œ๋œ๋‹ค.
  1. ํ™œ์„ฑ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ OS์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์•ž์„  ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŒ… ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ๋‚˜์€๋ฐ, โ€˜์ฐธ์กฐ๋ฐ›์ง€ ์•Š๋Š” ๊ฐ์ฒดโ€™๋Š” โ€˜๋‹ฟ์„ ์ˆ˜ ์—†๋Š” ๊ฐ์ฒดโ€™๋ผ๋Š” ์ „์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

Garbage collected ์–ธ์–ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์˜ ์ฃผ์š” ์›์ธ์€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ฐธ์กฐ์ด๋‹ค.

์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ฐธ์กฐ๋ž€ ๊ฐœ๋ฐœ์ž๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์–ด๋– ํ•œ ์ด์œ ๋กœ ํ™œ์„ฑํ™” ์ƒํƒœ์ธ ๋ฃจํŠธ ํŠธ๋ฆฌ ์•ˆ์— ์กด์žฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ๋“ค์ด๋‹ค. JavaScript์—์„œ๋Š” ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ ์ฝ”๋“œ ์ƒ ์–ด๋”˜๊ฐ€์— ์œ ์ง€๋˜์–ด ํ•ด์ œ๋˜์ง€ ๋ชปํ•œ ๋ณ€์ˆ˜๋“ค์ด๋‹ค. ์–ด๋–ค ์ด๋“ค์€ ์ด๋ฅผ ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋ผ๊ณ  ๋งํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ˜•ํƒœ๋“ค์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ ๊ฐ€์ง€์˜ ํ˜•ํƒœ๊ฐ€ ์žˆ๋‹ค.

  • ์šฐ๋ฐœ์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์ „์—ญ๋ณ€์ˆ˜
  • DOM ์™ธ๋ถ€์—์„œ์˜ ์ฐธ์กฐ
  • ํด๋กœ์ €์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ค‘์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ์™„๋ฒฝํžˆ ๊ตฌ๋ถ„ํ•ด๋‚ด๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น๋‹ค. ์˜ค์ง ๊ทธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๊ฐœ๋ฐœ์ž๋“ค๋งŒ์ด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ์„ ์šด์˜์ฒด์ œ๋กœ ๋ฐ˜ํ™˜์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ถ€๋ถ„๋“ค์„ ์ž˜ ํ™•์ธํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰์„ ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค.


Uploaded by N2T