๐Ÿ“ฆ Scope

2019. 09.25

Front-end Developer

Seungwoo Hong

@Rodaloft

Compilation(์ปดํŒŒ์ผ๋ ˆ์ด์…˜)

์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ๋งํ•˜๋ฉฐ 3๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

Compilation(์ปดํŒŒ์ผ๋ ˆ์ด์…˜)

  • ํ† ๊ทธ๋‚˜์ด์ง• / ๋ ‰์‹ฑ
  • ํŒŒ์‹ฑ
  • ์ฝ”๋“œ ์ƒ์„ฑ

ย 

๐Ÿ“ฆ Compilation - First step !!

ํ† ํฌ๋‚˜์ด์ง•

ํŠน ๊ตฌ๋ฌธ์— ์–ธ์–ด๋งˆ๋‹ค ํ† ํฐ์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ์กฐ๊ฐ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์ž‘์—…

ํ† ํฌ๋‚˜์ด์ง• (Tokenizing)

  • var
  • a
  • =
  • 2
  • ;

ย 

Tokenizing

๋ ‰์‹ฑ

  • var
  • a
  • =
  • 2
  • ;

ย 

Token

a ๋„ˆ๋Š” ์œ— ๋™๋„ค ์ถœ์‹ ์ด์•ผ

ํ† ํฐ์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์ž‘์—…

Tokenizer

๋ ‰์Šค ํƒ€์ž„

a ๋„ˆ๋Š” ์œ— ๋™๋„ค ์ถœ์‹ ์ด์•ผ

๋ ‰์‹ฑ์ด ์ผ์–ด๋‚˜๋Š” ๊ณผ์ • ๋ฐ ์‹œ๊ฐ„

Tokenizer

๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„(์œ— ๋™๋„ค )

a

a

a

๋ ‰์‹ฑ ๊ฒฐ๊ณผ๋ฌผ๋กœ ๋‚˜์˜จ ์Šค์ฝ”ํ”„๋ฅผ ๋งํ•œ๋‹ค.

๐Ÿ“ฆ Compilation - Second step !!

ํŒŒ์‹ฑ (Parsing)

ํ† ํฐ ๋ฐฐ์—ด์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ ๋œ ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค. ์ด ๊ฒฐ๊ณผ๋ฌผ์ด AST(abstract syntax tree) ์ด๋‹ค.

๐Ÿ“ฆ Compilation - Third step !!

์ฝ”๋“œ ์ƒ์„ฑ(Code-Generation)

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

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๊ธฐ

๐Ÿ“ฆ ์Šค์ฝ”ํ”„ ์ดํ•ดํ•˜๊ธฐ

๐Ÿ“ฆ ๊ทธ ์ „์— ์•Œ์•„ ๋ณผ ๊ฒƒ!

LHS(Left-Hand-Side) ์™€ RHS(Right-Hand-Side)

๐Ÿ“ฆ ๊ทธ ์ „์— ์•Œ์•„ ๋ณผ ๊ฒƒ!

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ฒ€์ƒˆ์„ ํ•˜๋Š”๋ฐ ์ด ๋•Œ ๊ฒ€์ƒ‰ ๋ฐฉ์‹์ด๋‹ค.

ย 

LHS: ์™ผ์ชฝ ๋ฐฉํ–ฅ ๊ฒ€์ƒ‰, ์ฆ‰ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๊ฒ€์ƒ‰

RHS: ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ ๊ฒ€์ƒ‰, ์ฆ‰ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฒ€์ƒ‰

๐Ÿ“ฆ ๊ทธ ์ „์— ์•Œ์•„ ๋ณผ ๊ฒƒ!

console.log์—์„œ์˜ a๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ๋•Œ๋Š” RHS ์ฐธ์กฐ๋ฅผ ํ•œ๋‹ค.

= 2; ์˜ a๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ย ๊ฐ’์„ ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ€์ž… ํ•˜๊ธฐ๋•Œ๋ฌธ์— LHS ์ฐธ์กฐ๋ฅผ ํ•œ๋‹ค.

RHS

LHS

๐Ÿ“ฆ ํ•œ ๋ฒˆ ์ƒ๊ฐํ•ด ๋ณด์ž

๐Ÿ“ฆ ํ’€์ด

LHS

RHS

LHS / RHS

๐Ÿ“ฆ ํ’€์ด

1. foo(2); ๋Š” RHS ์ฐธ์กฐ๋‹ค. ()๋Š” ์‹คํ–‰์„ ๋œปํ•˜๋Š”๋ฐ ๋จผ์ € foo๋ฅผ ๊ฒ€์ƒ‰ ํ•˜์—ฌ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ํ•จ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

ย 

2. function foo(a) { ์—์„œ์˜ a๋Š” LHS ์ฐธ์กฐ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. ์‹คํ–‰ ์‹œ 2๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š”๋ฐ a๋ฅผ ์„ ์–ธํ•˜๊ณ  2๋ฅผ ๋Œ€์ž…ํ•˜๋Š” ๊ณผ์ •์ด ๋ฐœ์ƒํ•œ๋‹ค.

ย 

3. console.log(a);์—์„œ์˜ a๋Š” ์ธ์ž๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์ด๋‹ค. ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ธฐ ์œ„ํ•ด RHS ์ฐธ์กฐ๋ฅผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  foo(2); ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ console.log์—์„œ๋„ a์˜ ๊ฐ’์„ ๋ฐ›๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ’์„ ๋Œ€์ž…ํ•˜๊ธฐ ์œ„ํ•ด LHS ์ฐธ์กฐ๋ฅผ ํ•œ๋‹ค.

๐Ÿ“ฆ ์ค‘์ฒฉ ์Šค์ฝ”ํ”„

๐Ÿ“ฆ ์ค‘์ฒฉ ์Šค์ฝ”ํ”„

์ค‘์ฒฉ์œผ๋กœ ์Šค์ฝ”ํ”„๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์ด ์ ์šฉ๋œ๋‹ค.

ย 

  • ์—”์ง„์€ ํ˜„์žฌ ์Šค์ฝ”ํ”„์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•˜๊ณ , ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ํ•œ ๋‹จ๊ณ„์”ฉ ์˜ฌ๋ผ๊ฐ„๋‹ค.
  • ์ตœ์ƒ์œ„ ๊ธ€๋กœ๋ฒŒ ์Šค์ฝ”ํ”„์— ๋„๋‹ฌํ•˜๋ฉด ์ฐพ๋“ , ๋ชป ์ฐพ๋“  ๊ฒ€์ƒ‰์„ ๋ฉˆ์ถ˜๋‹ค.

๐Ÿ“ฆ ์ค‘์ฒฉ ์Šค์ฝ”ํ”„

์ƒ๋žต...

์‹คํ–‰

1. console.log( a + b); ์—์„œ b๋ฅผ RHS์ฐธ์กฐ ํ•˜์—ฌ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ คํ•œ๋‹ค.

2. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค์ฝ”ํ”„์—์„œ b๋ฅผ ์ฐพ์ง€๋งŒ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค.

3. ํ•œ ๋‹จ๊ณ„ ์ƒ์œ„ ์Šค์ฝ”ํ”„์ธ ๊ธ€๋กœ๋ฒŒ ์Šค์ฝ”ํ”„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค.

4. b๋ฅผ ์ฐพ์•„ RHS ์ฐธ์กฐํ•˜์—ฌ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

๐Ÿ“ฆ ์˜ค๋ฅ˜

๐Ÿ“ฆ ์˜ค๋ฅ˜

๐Ÿ“ฆ ์˜ค๋ฅ˜

์ƒ๋žต...

์‹คํ–‰

console.log(a + b); ๊ตฌ๋ฌธ์—์„œ b๋ฅผ RHSย  ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค์ฝ”ํ”„์—์„œ b๋ฅผ ์ฐพ์ง€๋ชปํ•œ๋‹ค. ๋ฐ”๊นฅ ์Šค์ฝ”ํ”„์—์„œ ๊ฒ€์ƒ‰์„ ํ•ด๋„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค.ย  ๊ทธ๋ ‡๊ฒŒ ย ์ฐพ์ง€ ๋ชปํ•œ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Œ ๋ณ€์ˆ˜์— ReferenceError ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ LHS ์ฐธ์กฐ ์‹œ์—๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ ํ•˜์ง€ ๋ชปํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๊ธ€๋กœ๋ฒŒ ์Šค์ฝ”ํ”„์— ๋งŒ๋“ค์–ด ์ค€๋‹ค.

ย 

๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜๋Š” ์ฐพ์•˜์ง€๋งŒ ์˜๋„ํ•˜๋Š” ๋™์ž‘์„ ํ•ด๋‹น ๊ฐ’์ด ์‹คํ–‰ ๋ถˆ๊ฐ€ํ•˜๋‹ค๋ฉด TypeError ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ex) ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ, null, undefined

๐Ÿ“ฆ ์ •๋ฆฌํ•˜๊ธฐ

Made with Slides.com