Jieunny์˜ ๋ธ”๋กœ๊ทธ

S4) Unit 5. [์ปดํ“จํ„ฐ ๊ณตํ•™] ์šด์˜์ฒด์ œ & ๋ฌธ์ž์—ด๊ณผ ๊ทธ๋ž˜ํ”ฝ & ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋ณธ๋ฌธ

CodeStates/learning contents

S4) Unit 5. [์ปดํ“จํ„ฐ ๊ณตํ•™] ์šด์˜์ฒด์ œ & ๋ฌธ์ž์—ด๊ณผ ๊ทธ๋ž˜ํ”ฝ & ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

Jieunny 2023. 3. 27. 16:00

๐Ÿ“ฃ  ์šด์˜์ฒด์ œ

๐Ÿญ. ์šด์˜์ฒด์ œ๋ž€?

โœ”๏ธ ํ•˜๋“œ์›จ์–ด์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๋Š” ์ฃผ์ฒด

 

๐Ÿฎ. ์šด์˜์ฒด์ œ์˜ ๋ชฉ์  ๋ฐ ๊ธฐ๋Šฅ

โœ”๏ธ ๋ชฉ์ 

โžฐ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ ํ–ฅ์ƒ

โžฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ๋„ ํ–ฅ์ƒ

โžฐ ์‹ ๋ขฐ๋„ ํ–ฅ์ƒ

โžฐ ๋ฐ˜ํ™˜ ์‹œ๊ฐ„ ๋‹จ์ถ• ๋“ฑ

 

โœ”๏ธ ๊ธฐ๋Šฅ

โžฐ ํ”„๋กœ์„ธ์„œ, ๊ธฐ์–ต์žฅ์น˜, ์ž…์ถœ๋ ฅ์žฅ์น˜, ํŒŒ์ผ ๋ฐ ์ •๋ณด ๋“ฑ์˜ ์ž์›์„ ๊ด€๋ฆฌ

โžฐ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž์›์˜ ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณต(์–ด๋–ค ์ž์›์„ ๋ˆ„๊ฐ€, ์–ธ์ œ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ• ์ง€๋ฅผ ๊ฒฐ์ •)

โžฐ ์‚ฌ์šฉ์ž์™€ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํŽธ๋ฆฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต

โžฐ ์‹œ์Šคํ…œ์˜ ๊ฐ์ข… ํ•˜๋“œ์›จ์–ด์™€ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ œ์–ด

 

๐Ÿฏ. ์šด์˜์ฒด์ œ์˜ ์‹œ์Šคํ…œ ์ž์› ๊ด€๋ฆฌ

โœ”๏ธ ์šด์˜์ฒด์ œ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋“œ์›จ์–ด์—๊ฒŒ ์ผ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

โžฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ : ์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

โžฐ CPU, RAM, ๋””์Šคํฌ ๋“ฑ ์‹œ์Šคํ…œ ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์šด์˜์ฒด์ œ ์ด๋‹ค.

์šด์˜์ฒด์ œ์˜ ๊ตฌ์กฐ ๋ชจ์‹๋„

โœ”๏ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€๋ฆฌ

โžฐ ํ•ด์ปค์˜ ๊ณต๊ฒฉ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๊ถŒํ•œ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

โžฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ณ , ์‹œ์Šคํ…œ ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก '๊ถŒํ•œ'๊ณผ '์‚ฌ์šฉ์ž'๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

 

โœ”๏ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ: ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๋Š” ๊ฒƒ

โžฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๋ ค๋ฉด, ์ปดํ“จํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ถ€์—ฌ๋ฐ›์•„์•ผ ํ•˜๋ฉฐ ๊ถŒ๋ž€์„ ๋ฐ›๊ณ  ๋‚˜๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โžฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์™€ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์šด์˜์ฒด์ œ๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

    ใ„ด ์ด๋ฅผ ์œ„ํ•ด ์šด์˜์ฒด์ œ ์ฐจ์›์—์„œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ '์‹œ์Šคํ…œ ์ฝœ' ์ด๋ผ๊ณ  ํ•œ๋‹ค.


๐Ÿ“ฃ  ํ”„๋กœ์„ธ์Šค

 

๐Ÿญ. ํ”„๋กœ์„ธ์Šค๋ž€?

โœ”๏ธ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ๋กœ ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ ์žฌ๋˜๊ณ  CPU ๊ฐ€ ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ

โžฐ ์‹คํ–‰ ์ค‘์ธ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ 'ํ”„๋กœ์„ธ์Šค' ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

โžฐ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‘ ๊ฐœ ์‹คํ–‰ => ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

๐Ÿฎ. ํ”„๋กœ์„ธ์Šค ๊ตฌ์„ฑ ์š”์†Œ

1๏ธโƒฃ ์œ ์ € ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๊ด€๋ฆฌ(Virtual Address Descriptors)

โœ”๏ธ ํ”„๋กœ์„ธ์Šค ๋ณ„๋กœ ๋…๋ฆฝ๋œ ์˜์—ญ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ณณ

โžฐ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ํ•˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ์œ ์ € ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ VAD(Virtual Address Descriptors)๋ผ๋Š” ๊ด€๋ฆฌ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•œ๋‹ค.

 

2๏ธโƒฃ ํ•ธ๋“ค ํ…Œ์ด๋ธ”(Handle Table)

โœ”๏ธ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํ•ธ๋“ค์— ๋Œ€ํ•œ ์ปค๋„ ๊ฐ์ฒด ํฌ์ธํ„ฐ ์ •๋ณด๋ฅผ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„

โžฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๊ฒŒ ๋  ๋•Œ ์ด ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ด ํ”„๋กœ์„ธ์„œ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์ปค๋„ ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

3๏ธโƒฃ ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„

โœ”๏ธ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๋ณ„๋„์˜ ๊ณ ์œ ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

๐Ÿฏ. ํ”„๋กœ์„ธ์Šค ํŠน์ง•

1๏ธโƒฃ ์ž์› ์†Œ์œ ์˜ ๋‹จ์œ„

โžฐ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์˜ ์‹คํ–‰ ์ด๋ฏธ์ง€ ๋กœ๋“œ์™€ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•˜๋ฉฐ, ์ด๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ตฌ๋ณ„๋˜์–ด์•ผ ํ•œ๋‹ค.

โžฐ ์ด ๊ณต๊ฐ„์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํŒŒ์ผ, I/O ์žฅ์น˜๋“ค์— ๋Œ€ํ•ด์„œ๋„ ํ”„๋กœ์„ธ์„œ ๋‹จ์œ„๋กœ ํ• ๋‹น ๋ฐ›์•„ ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

2๏ธโƒฃ ๋””์ŠคํŒจ์นญ์˜ ๋‹จ์œ„

โžฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ CPU ์˜ ์ž์›์„ ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ํ• ๋‹น ๋ฐ›์•„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์šด์˜์ฒด์ œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ CPU ์˜ ์‚ฌ์šฉ ์‹œ๊ฐ„์„ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค์— ๊ณจ๊ณ ๋ฃจ ๋‚˜๋ˆ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

โžฐ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋””์ŠคํŒจ์นญ ๋‹จ์œ„๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๋””์ŠคํŒจ์นญ ๋‹จ์œ„๋ฅผ '์Šค๋ ˆ๋“œ' ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

๐Ÿฐ. ํ”„๋กœ์„ธ์Šค ์ƒํƒœ

โœ”๏ธ ์‹คํ–‰(Run) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์„œ๋ฅผ ์ฐจ์ง€ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋ฐ›๊ณ  ์žˆ๋Š” ์ƒํƒœ

โœ”๏ธ ์ค€๋น„(Ready) : ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„๋˜๋Š” ์ƒํƒœ

โœ”๏ธ ๋Œ€๊ธฐ(Waiting) : CPU ์˜ ์‚ฌ์šฉ์ด ์•„๋‹ˆ๋ผ ์ž…์ถœ๋ ฅ์˜ ์‚ฌ๊ฑด์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ

 

๐Ÿฑ. ํ”„๋กœ์„ธ์„œ VS ํ”„๋กœ์„ธ์Šค

โœ”๏ธ ๋‘˜์€ ์—„์—ฐํžˆ ๋‹ค๋ฅธ ๊ฐœ๋…!

 

1๏ธโƒฃ ํ”„๋กœ์„ธ์„œ(Processor)

โœ”๏ธ ํ•˜๋“œ์›จ์–ด์ ์ธ ์ธก๋ฉด

โžฐ ์ปดํ“จํ„ฐ ๋‚ด์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์œ ๋‹›

โžฐ ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜(CPU)๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ ์–ด๋„ ํ•˜๋‚˜ ์ด์ƒ์˜ ALU์™€ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋‹ค.

 

โœ”๏ธ ์†Œํ”„ํŠธ์›จ์–ด์ ์ธ ์ธก๋ฉด

โžฐ ๋ฐ์ดํ„ฐ ํฌ๋งท์„ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์„ ์˜๋ฏธ

โžฐ ์›Œ๋“œํ”„๋กœ์„ธ์„œ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ ๋“ฑ์ด ์žˆ๋‹ค.

 

2๏ธโƒฃ ํ”„๋กœ์„ธ์Šค(Process)

โžฐ ํ”„๋กœ์„ธ์Šค๋Š” ํŠน์ • ๋ชฉ์ ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์—ด๋œ ์ž‘์—…์˜ ๋ชฉ๋ก์„ ์˜๋ฏธ

โžฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ ๋˜์–ด ํ”„๋กœ์„ธ์„œ์— ์˜ํ•ด ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ฃ  ์Šค๋ ˆ๋“œ

๐Ÿญ. ์Šค๋ ˆ๋“œ๋ž€?

โœ”๏ธ ๋ช…๋ น์–ด๊ฐ€ CPU ๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ฐ์ฒด์˜ ๋‹จ์œ„

โžฐ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—๋Š” ๋ฐ˜๋“œ์‹œ 1๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

โžฐ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์— ์žˆ๋Š” ์ž์›๊ณผ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

    ใ„ด ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋Š” ๊ฐ™์€ ์ฃผ์†Œ ๊ณต๊ฐ„์— ์กด์žฌํ•˜๊ฒŒ ๋˜๋ฉฐ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    ใ„ด ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์Šค๋ ˆ๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

 

๐Ÿฎ. ์Šค๋ ˆ๋“œ๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€?

โœ”๏ธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

๐Ÿฏ. ์Šค๋ ˆ๋“œ์˜ ๊ตฌ์„ฑ์š”์†Œ

1๏ธโƒฃ ๊ฐ€์ƒ CPU : ์ธํ„ฐํ”„๋ฆฌํ„ฐ, ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฐ€์ƒ ์ฝ”๋“œ

2๏ธโƒฃ ์ˆ˜ํ–‰ ์ฝ”๋“œ : Thread Class์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” run() Method ์ฝ”๋“œ

3๏ธโƒฃ ์ฒ˜๋ฆฌ ๋ฐ์ดํ„ฐ : Thread์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ

 

๐Ÿฐ. ์Šค๋ ˆ๋“œ์˜ ํŠน์ง•

1๏ธโƒฃ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ํ๋ฆ„์˜ ๋‹จ์œ„์ด๋‹ค.

โžฐ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋Š” ์‹œ์ž‘ํ•ด์„œ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ช…๋ น๋“ค์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

2๏ธโƒฃ ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค call stack์ด ์กด์žฌ(call stack: ์‹คํ–‰ ์ค‘์ธ ์„œ๋ธŒ๋ฃจํ‹ด์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ)ํ•˜๋ฉฐ, ๋‚˜๋จธ์ง€ Code, Data, Heap ์˜์—ญ์€ ์Šค๋ ˆ๋“œ ๋ผ๋ฆฌ ๊ณต์œ ํ•œ๋‹ค.

โžฐ ๋ฐ˜๋Œ€๋กœ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

 

3๏ธโƒฃ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

โžฐ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ž‘๋˜๋Š” ๊ฒฝ์šฐ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰ ๋ฐ ์ข…๋ฃŒ์ˆœ์„œ๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋‹ค.


๐Ÿ“ฃ  ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ

๐Ÿญ. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ž€?

โœ”๏ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ผ๋ จ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋งŒ์œผ๋กœ ์ง๋ ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•

โžฐ ํ•˜๋‚˜์˜ ๋ ˆ์ง€์Šคํ„ฐ, ์Šคํƒ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด๋‹ค.

 

๐Ÿฎ. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์˜ ์žฅ์ 

1๏ธโƒฃ ์ž์› ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋™๊ธฐํ™”๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

โžฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์„ ๊ณต์œ ํ•  ๊ฒฝ์šฐ์—๋Š” ์Šค๋ ˆ๋“œ๋“ค์ด ๋™์‹œ์— ๊ฐ™์€ ์ž์›์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œ์–ดํ•ด์ค˜์•ผ ํ•œ๋‹ค.

2๏ธโƒฃ ์ž์› ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋™๊ธฐํ™”๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ๋ฌธ๋งฅ ๊ตํ™˜(context switch) ์ž‘์—… ๋˜ํ•œ ์š”๊ตฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

โžฐ ๋ฌธ๋งฅ ๊ตํ™˜ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…์œผ๋กœ ๋งŽ์€ ๋น„์šฉ์„ ํ•„์š”๋กœ ํ•œ๋‹ค.

3๏ธโƒฃ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋‚œ์ด๋„๊ฐ€ ์‰ฝ๊ณ , CPU ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿฏ. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์˜ ๋‹จ์ 

1๏ธโƒฃ ์—ฌ๋Ÿฌ ๊ฐœ์˜ CPU๋ฅผ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.

โžฐ  ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ์ฝ”์–ด๋ฐ–์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•ด ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋จธ์‹ ์—์„œ CPU ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์—†๋‹ค.

2๏ธโƒฃ ์—ฐ์‚ฐ๋Ÿ‰์ด ๋งŽ์€ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด์•ผ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

3๏ธโƒฃ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค.

 


๐Ÿ“ฃ  ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

๐Ÿญ. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ž€?

โœ”๏ธ ๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

โžฐ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค : ์—ฌ๋Ÿฌ ๊ฐœ์˜ CPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

 

๐Ÿฎ. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์˜ ์žฅ์ 

1๏ธโƒฃ ์ž‘์—…์„ ๋ถ„๋ฆฌํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค.

2๏ธโƒฃ ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์„œ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํšจ์œจ์ ์ด๋‹ค.

 

๐Ÿฏ. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์˜ ๋ฌธ์ œ์ 

1๏ธโƒฃ ์ฃผ์˜ ๊นŠ์€ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ๋””๋ฒ„๊น…์ด ๊นŒ๋‹ค๋กญ๋‹ค.

2๏ธโƒฃ ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ํšจ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†๋‹ค.

โžฐ ํ”„๋กœ์„ธ์Šค ๋ฐ–์—์„œ ์Šค๋ ˆ๋“œ ๊ฐ๊ฐ์„ ์ œ์–ดํ•  ์ˆ˜ ์—†๋‹ค.

3๏ธโƒฃ ์ž์› ๊ณต์œ ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โžฐ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ „์ฒด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

4๏ธโƒฃ ๋ฌธ๋งฅ ๊ตํ™˜ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

โžฐ ๋ฌธ๋งฅ ๊ตํ™˜ : CPU์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ์•„๊ฐ€๋ฉด์„œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •

    ใ„ด ๋‹ค๋ฅธ ํƒœ์Šคํฌ(ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ)๊ฐ€ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํƒœ์Šคํฌ(ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ)๋ฅผ ๋ฉˆ์ถ”๋Š” ๊ฒƒ

 

๐Ÿฐ. ๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์„ฑ์˜ ์ฐจ์ด

1๏ธโƒฃ Concurrency(๋™์‹œ์„ฑ, ๋ณ‘ํ–‰์„ฑ) : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ๋ถ„ํ•  ๋ฐฉ์‹์œผ๋กœ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฐฉ๊ฐ์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚จ๋‹ค.

โžฐ ์‹œ๋ถ„ํ•  : ์šด์˜์ฒด์ œ(๋˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ )๋Š” ๊ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ถ„ํ• ํ•˜์—ฌ, ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ๋Œ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค.

2๏ธโƒฃ Parallelism(๋ณ‘๋ ฌ์„ฑ) : ๋ฉ€ํ‹ฐ ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ๋™์‹œ์— ์ˆ˜ํ–‰๋œ๋‹ค.


๐Ÿ“ฃ  ๋ฌธ์ž์—ด

๐Ÿญ. ์œ ๋‹ˆ์ฝ”๋“œ๋ž€?

โœ”๏ธ ์œ ๋‹ˆ์ฝ”๋“œ ํ˜‘ํšŒ(Unicode Consortium)๊ฐ€ ์ œ์ •ํ•˜๋Š” ์ „ ์„ธ๊ณ„์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ปดํ“จํ„ฐ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ์‚ฐ์—… ํ‘œ์ค€

โžฐ ISO 10646 ๋ฌธ์ž ์ง‘ํ•ฉ, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ, ๋ฌธ์ž ์ •๋ณด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋ฌธ์ž๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

โžฐ ์œ ํ‹ฐ์ฝ”๋“œ๊ฐ€ ์—†๋˜ ์‹œ์ ˆ์—๋Š” ๊ฐ™์€ ํ•œ๊ธ€์ด ์ ์ธ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋ผ๋„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ ์–ด๋–ค ํŒŒ์ผ์ด ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ์ธ์ฝ”๋”ฉ ํ˜•์‹์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ์„ ์ œ๋Œ€๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์—ˆ๋‹ค.

โžฐ 'ํ˜„์กดํ•˜๋Š” ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ๋ชจ๋‘ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ'์ด ์œ ๋‹ˆ์ฝ”๋“œ์˜ ๋ชฉ์ ์ด๋‹ค.

 

๐Ÿฎ. ASCII ๋ฌธ์ž๋ž€?

โœ”๏ธ ์˜๋ฌธ ์•ŒํŒŒ๋ฒณ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์œผ๋กœ 7 ๋น„ํŠธ๋กœ ๋ชจ๋“  ์˜์–ด ์•ŒํŒŒ๋ฒณ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

โžฐ 52๊ฐœ์˜ ์˜๋ฌธ ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž์™€, 10๊ฐœ์˜ ์ˆซ์ž, 32๊ฐœ์˜ ํŠน์ˆ˜ ๋ฌธ์ž, ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•œ๋‹ค.

 

๐Ÿฏ. UTF-8๊ณผ UTF-16์˜ ์ฐจ์ด์ ์€?

โœ”๏ธ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์˜ ์ฐจ์ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

โžฐ UTF- ๋’ค์— ๋‚˜์˜ค๋Š” ์ˆซ์ž๋ฅผ ๋น„ํŠธ(bit) ์ด๋‹ค.

 

1๏ธโƒฃ UTF-8 : ๊ฐ€๋ณ€ ๊ธธ์ด ์ธ์ฝ”๋”ฉ

โœ”๏ธ ์œ ๋‹ˆ์ฝ”๋“œ ํ•œ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด 1 byte(= 8 bits)์—์„œ 4 bytes๊นŒ์ง€ ์‚ฌ์šฉํ•œ๋‹ค.

โžฐ ๋ฐ”์ดํŠธ ์ˆœ์„œ๋ฅผ ๋”ฐ์ง€์ง€ ์•Š๊ณ  ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค.

let encoder = new TextEncoder(); // ๊ธฐ๋ณธ ์ธ์ฝ”๋”ฉ์€ 'utf-8'
encoder.encode('์ฝ”') // Uint8Array(3) [236, 189, 148]

(236).toString(2) // "11101100"
(189).toString(2) // "10111101"
(148).toString(2) // "10010100"

encoder.encode('b') // Uint8Array [98]
(98).toString(2) // "1100010"

โžฐ ์‚ฌ์šฉ๋œ ๋ฌธ์ž์— ๋”ฐ๋ผ ๋” ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ํ…์ŠคํŠธ๋Š” ์ฃผ๋กœ UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋œ๋‹ค.

โžฐ ASCII ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 1 byte, ํฌ๊ฒŒ ์˜์–ด ์™ธ ๊ธ€์ž๋Š” 2byte, 3byte, ๋ณด์กฐ ๊ธ€์ž๋Š” 4byte๋ฅผ ์ฐจ์ง€ํ•˜๋ฉฐ, ์ด๋ชจ์ง€๋Š” ๋ณด์กฐ ๊ธ€์ž์— ํ•ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— 4byte๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

2๏ธโƒฃ UTF-16 : ์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ๋ฐ”์ดํŠธ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฐ”์ดํŠธ ์ˆœ์„œ๊ฐ€ ๋‹ค์–‘ํ•˜๋‹ค.

โœ”๏ธ ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ๋Œ€๋ถ€๋ถ„(U+0000๋ถ€ํ„ฐ U+FFFF; BMP) ์„ 16 bits๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

โžฐ ๋Œ€๋ถ€๋ถ„์— ์†ํ•˜์ง€ ์•Š๋Š” ๊ธฐํƒ€ ๋ฌธ์ž๋Š” 32 bit(4 bytes)๋กœ ํ‘œํ˜„ํ•˜๋ฏ€๋กœ UTF-16๋„ ๊ฐ€๋ณ€ ๊ธธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋Œ€๋ถ€๋ถ„์€ 2 ๋ฐ”์ดํŠธ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

โžฐ ์ด์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„๋œ ๋ฌธ์ž๋ฅผ 16 bits(2 bytes)๋กœ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฐ”์ดํŠธ ์ˆœ์„œ(์—”๋””์–ธ)์— ๋”ฐ๋ผ UTF-16์˜ ์ข…๋ฅ˜๋„ ๋‹ฌ๋ผ์ง„๋‹ค.


๐Ÿ“ฃ  ๊ทธ๋ž˜ํ”ฝ

๐Ÿญ. ๋น„ํŠธ๋งต

โœ”๏ธ ์›น ์ƒ์—์„œ ๋””์ง€ํ„ธ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์— ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๋งท ํ˜•์‹

โžฐ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ž˜์Šคํ„ฐ ๊ทธ๋ž˜ํ”ฝ(์  ๋ฐฉ์‹)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด๋ฏธ์ง€์˜ ๊ฐ ์ ๋“ค์„ ๊ฒฉ์žํ˜•์˜ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

โžฐ ํ•œ ์ง€์—ญ์„ ์ฐจ์ง€ํ•˜๋Š” ์…€์€ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

โžฐ ๋น„ํŠธ๋งต์€ ์‚ฌ๊ฐ์˜ ํ”ฝ์…€ ํ˜•ํƒœ๋กœ ๋ชจ์—ฌ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™•๋Œ€๋ฅผ ํ•˜๋ฉด ‘๊ณ„๋‹จํ˜„์ƒ’ ๋˜๋Š” ‘๊นจ์ง ํ˜„์ƒ’์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ๊ฒฝ๊ณ„๊ฐ€ ๋šœ๋ ทํ•˜์ง€ ์•Š๋‹ค.

โžฐ ํ”ฝ์…€ ํ•˜๋‚˜ ๋‹น ๋ชจ๋‘ ์ƒ‰์ƒ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ์ด๋ฏธ์ง€์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์šฉ๋Ÿ‰ ๋˜ํ•œ ๋ฌด๊ฑฐ์›Œ์ง„๋‹ค.

 

๐Ÿฎ. ๋ฒกํ„ฐ

โœ”๏ธ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜ํ•™์ ์ธ ๊ณต์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ

โžฐ ์ˆ˜ํ•™์  ์›๋ฆฌ๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํŠธ๋งต๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์•„๋ฌด๋ฆฌ ํ™•๋Œ€๋ฅผ ํ•ด๋„ ‘๊ณ„๋‹จํ˜„์ƒ’ ๋˜๋Š” ‘๊นจ์ง ํ˜„์ƒ’์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

โžฐ ๋น„ํŠธ๋งต์— ๋น„ํ•ด ์ปดํ“จํ„ฐ์—๊ฒŒ ๋ถ€๋‹ด์„ ๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ ์ฃผ๋กœ ๋„ํ˜•, ๊ธ€์ž ๋“ฑ์„ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์— ์‚ฌ์šฉ๋œ๋‹ค.

โžฐ ์ˆ˜ํ•™์ ์ธ ์—ฐ์‚ฐ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด์ฆˆ๋ฅผ ํ‚ค์›Œ๋„ ์šฉ๋Ÿ‰์—๋Š” ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.

๋น„ํŠธ๋งต VS ๋ฒกํ„ฐ


๐Ÿ“ฃ  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

๐Ÿญ. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋ž€?

โœ”๏ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ

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

 

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

1๏ธโƒฃ ํ•„์š”ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ• ๋‹นํ•œ๋‹ค.

2๏ธโƒฃ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (Read and Write)

โžฐ  ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด ๊ฐ’์„ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„

3๏ธโƒฃ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด์ œํ•œ๋‹ค.

โžฐ JavaScript์™€ ๊ฐ™์€ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์—์„œ๋Š” ์•”๋ฌต์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

 

๐Ÿฏ. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

โœ”๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋Œ€์‹ , ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ค€๋‹ค.

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

โžฐ JavaScript๊ฐ€ ๋ฐฐ์—ด๊ณผ ๋ฐฐ์—ด์— ๋‹ด๊ธด ๊ฐ’๋“ค์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ํ• ๋‹น์„ ์•Œ์•„์„œ ์ง„ํ–‰ํ•œ๋‹ค.

 

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

โœ”๏ธ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์„ ์˜๋ฏธ

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

 

๐Ÿฑ. ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

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

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

 

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

โœ”๏ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋…์€ '์ฐธ์กฐ' ์ด๋‹ค.

โžฐ ์ฐธ์กฐ : ๋ช…์‹œ์ ์ด๋“ , ์•”๋ฌต์ ์ด๋“  ๊ด€๊ณ„์—†์ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ด€์ ์—์„œ ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

โžฐ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด, ๊ฐ์ฒด๋ž€ ํ˜‘์˜์  ๊ฐœ๋…์œผ๋กœ ์ผ๋ฐ˜์ ์ธ JavaScript ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ ๊ด‘์˜์  ๊ฐœ๋…์œผ๋กœ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„(function scope)๋‚˜ ๊ธ€๋กœ๋ฒŒ ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„(global lexical scope)๊นŒ์ง€๋„ ํฌํ•จํ•œ๋‹ค.

 

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

โœ”๏ธ ํ•œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ˆ˜๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

โžฐ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๋Š” ์ฒ˜์Œ์—๋Š” ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํ•˜๋‚˜๋ฟ์ด์ง€๋งŒ, ๋ณ€์ˆ˜์˜ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋ณต์‚ฌ๋  ๋•Œ๋งˆ๋‹ค ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ , ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋˜ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜, ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๋Š” ์ค„์–ด๋“ ๋‹ค.

โžฐ ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๋ฉด, ๊ทธ ๊ฐ์ฒด์™€ ๊ด€๋ จํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋น„์šธ ์ˆ˜ ์žˆ๋‹ค => ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๊ฐ€ 0์ด ๋œ๋‹ค๋Š” ๋ง์€ ์•„๋ฌด๋„ ๊ทธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋Š” ์˜๋ฏธ

โžฐ ์ˆœํ™˜ ์ฐธ์กฐ๋กœ ์ธํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

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

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

 

2๏ธโƒฃ ํŠธ๋ ˆ์ด์‹ฑ

โœ”๏ธ ํ•œ ๊ฐ์ฒด์— flag๋ฅผ ๋‘๊ณ , ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‚ฌ์ดํด๋งˆ๋‹ค flag์— ํ‘œ์‹œ ํ›„ ์‚ญ์ œํ•˜๋Š” mark and sweep ๋ฐฉ๋ฒ•

โžฐ ๊ฐ์ฒด์— in-use flag๋ฅผ ๋‘๊ณ , ์‚ฌ์ดํด๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ถ”์ ํ•ด์„œ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ‘œ์‹œ(mark) ํ•œ๋‹ค.

โžฐ ๊ทธ ํ›„ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œ(sweep)ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค.

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

    ใ„ด 1. ๋ฃจํŠธ(Roots): ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฃจํŠธ๋Š” ์ฝ”๋“œ์—์„œ ์ฐธ์กฐ๋˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋กœ, ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ๋Š” ๋ชจ๋“  ๋ฃจํŠธ์˜ ์™„์ „ํ•œ ๋ชฉ๋ก์„ ๋งŒ๋“ ๋‹ค.

    ใ„ด 2. ๋ชจ๋“  ๋ฃจํŠธ์™€ ๊ทธ ์ž์‹๋“ค์„ ๊ฒ€์‚ฌํ•ด์„œ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. (ํ™œ์„ฑ์ƒํƒœ์ด๋ฉด ๊ฐ€๋น„์ง€๊ฐ€ ์•„๋‹˜, ๋ฃจํŠธ๊ฐ€ ๋‹ฟ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ๋“ค์€ ๊ฐ€๋น„์ง€๋กœ ํ‘œ์‹œ๋จ)

    ใ„ด 3. ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ๋Š” ํ™œ์„ฑ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ OS์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿณ. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

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

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

1๏ธโƒฃ ์šฐ๋ฐœ์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์ „์—ญ๋ณ€์ˆ˜

2๏ธโƒฃ DOM ์™ธ๋ถ€์—์„œ์˜ ์ฐธ์กฐ

3๏ธโƒฃ ํด๋กœ์ €์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ