CS/์ปดํŒŒ์ผ๋Ÿฌ

์ปดํŒŒ์ผ๋Ÿฌ(compiler)

๋ฒผ๋ฆฌ01 2023. 8. 28. 21:31

์‚ฌ๋žŒ์ด ์“ฐ๋Š” ์–ธ์–ด๋ฅผ ์ž์—ฐ์–ธ์–ด, ์ปดํ“จํ„ฐ ์–ธ์–ด๋ฅผ ์ธ๊ณต์–ธ์–ด๋ผ๊ณ  ํ•œ๋‹ค.

์ปดํ“จํ„ฐ๋Š” 0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ 2์ง„๋ฒ• ๊ธฐ๊ณ„์–ด๋งŒ ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ ์‚ฌ๋žŒ์ด ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ์— ๋งค์šฐ ๋ถˆํŽธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์กฐ๊ธˆ ๋” ํŽธ๋ฆฌํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋„ ๊ธฐ๊ณ„์–ด๋ณด๋‹ค ์กฐ๊ธˆ ํŽธ๋ฆฌํ•  ๋ฟ ๋‹ค๋ฃจ๊ธฐ์— ์—ฌ์ „ํžˆ ์–ด๋ ค์› ๋‹ค. ํ•ด์„œ ์‚ฌ๋žŒ๋“ค์€ ์˜์–ด์™€ ์œ ์‚ฌํ•œ ๊ณ ๊ธ‰์–ธ์–ด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค. COBOL, PASCAL, ๊ทธ๋ฆฌ๊ณ  ์ตœ๊ทผ์—๋„ ์‚ฌ์šฉํ•˜๋Š” C, C++, JAVA ๋“ฑ์ด ๋ชจ๋‘ ๊ณ ๊ธ‰์–ธ์–ด๋‹ค.

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

 

์›์‹œํ”„๋กœ๊ทธ๋žจ ๋ฒˆ์—ญ๊ธฐ ๋ชฉ์ ํ”„๋กœ๊ทธ๋žจ 
์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์–ด์…ˆ๋ธ”๋Ÿฌ ๊ธฐ๊ณ„์–ด
๊ณ ๊ธ‰์–ธ์–ด ์ปดํŒŒ์ผ๋Ÿฌ ์ €๊ธ‰์–ธ์–ด
๊ณ ๊ธ‰์–ธ์–ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์‹คํ–‰๊ฒฐ๊ณผ
๊ณ ๊ธ‰์–ธ์–ด ํ”„๋ฆฌํ”„๋กœ์„ธ์„œ  ๊ณ ๊ธ‰์–ธ์–ด

 

 

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

 

๐Ÿ“Œ ์ปดํŒŒ์ผ๋Ÿฌ

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ๋ฒˆ์—ญ ๊ณผ์ •์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์–ดํœ˜๋ถ„์„ ๋‹จ๊ณ„, ๊ตฌ๋ฌธ๋ถ„์„ ๋‹จ๊ณ„, ์˜๋ฏธ๋ถ„์„ ๋‹จ๊ณ„, ์ค‘๊ฐ„์ฝ”๋“œ ์ƒ์„ฑ ๋‹จ๊ณ„, ์ฝ”๋“œ์ตœ์ ํ™” ๋‹จ๊ณ„, ๋ชฉ์ ์ฝ”๋“œ ์ƒ์„ฑ ๋‹จ๊ณ„๋กœ ์ด 6๋‹จ๊ณ„์˜ ๊ณผ์ •์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•œ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ณด๋‹ค ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ ํ•œ ๋ฒˆ ์ „์ฒด์ ์œผ๋กœ ๋””์ฝ”๋”ฉํ•˜๊ณ  ๋‚˜๋ฉด ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์‹คํ–‰๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์‹คํ–‰์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ด๋‹ค. ๋Œ€์‹  ๋ช‡ ์ค„์˜ ์›์‹œ ํ”„๋กœ๊ทธ๋žจ์ด ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋  ๋•Œ ๋ช‡๋ฐฑ ๊ฐœ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๊ธฐ์–ต์žฅ์†Œ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ ๋“ฑ ๋งŽ์€ ํšŸ์ˆ˜๋กœ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ ๊ธฐ๋ฒ•์ด ํฐ ์žฅ์ ์„ ๊ฐ–๋Š”๋‹ค.

๋Œ€ํ‘œ ์–ธ์–ด๋กœ๋Š” FORTRAN, COBOL, PASCAL, PL/I, C, C++, JAVA ์–ธ์–ด ๋“ฑ์ด ์žˆ๋‹ค. 

 

๐Ÿ“Œ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ

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

๋Œ€ํ‘œ ์–ธ์–ด๋กœ๋Š” Python, Ruby, Javascript, R ๋“ฑ์ด ์žˆ๋‹ค. 

 

 

๐Ÿ“Œ  ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ

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

 

์˜์–ด๋ฌธ์žฅ ์ปดํŒŒ์ผ๋Ÿฌ
๋‹จ์–ด๋ถ„์„ ์–ดํœ˜๋ถ„์„
๋ฌธ์žฅ๋ถ„์„ ๊ตฌ๋ฌธ๋ถ„์„
ํ•ด์„ ์˜๋ฏธ๋ถ„์„

 

์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋Š” 6๋‹จ๊ณ„์˜ ๊ณผ์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

(1) ์–ดํœ˜๋ถ„์„ ๋‹จ๊ณ„

-์›์‹œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฝ์–ด๋“ค์—ฌ์„œ ์–ดํœ˜๋“ค์„ ๋–ผ์–ด๋‚ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ๋ถ„์„.

-์–ดํœ˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๋ฉด *ํ† ํฐ(token)ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ, ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

-์–ดํœ˜๋ถ„์„๊ธฐ(lexical analyzer), ์Šค์บ๋„ˆ(scanner)

*ํ† ํฐ(token): ์˜๋ฏธ ์žˆ๋Š” ์ตœ์†Œ์˜ ๋ฌธ๋ฒ•์  ๋‹จ์œ„.

 

(2) ๊ตฌ๋ฌธ๋ถ„์„ ๋‹จ๊ณ„(Parsing)

-ํ† ํฐ๋“ค์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ํ† ํฐ๋“ค์˜ ์—ด์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์žฅ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ.

-๋ฌธ์žฅ์ด ์˜ฌ๋ฐ”๋ฅด๋ฉด ๊ตฌ๋ฌธ ๊ตฌ์กฐ(๊ตฌ๋ฌธ ํŠธ๋ฆฌ) ์ถœ๋ ฅ, ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

-๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ(syntax), ํŒŒ์„œ(parser)

 

(3) ์˜๋ฏธ๋ถ„์„ ๋‹จ๊ณ„

-๊ตฌ๋ฌธ ํŠธ๋ฆฌ์˜ ์˜๋ฏธ/๊ธฐ๋Šฅ ๋ถ„์„.

-์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•œ๋‹ค. 

-์‹คํ–‰ ์ „ ์‚ฌ์ „์ž‘์—…: ์ž๋ฃŒ ๊ตฌ์กฐ ์ •์˜, ํ˜ผํ•ฉํ˜• ์—ฐ์‚ฐ(์ •์ˆ˜ํ˜•์€ ์ •์ˆ˜ํ˜•๋ผ๋ฆฌ, ์‹ค์ˆ˜ํ˜•์€ ์‹ค์ˆ˜ํ˜•๋ผ๋ฆฌ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋ฃŒํ˜•์„ ๋ฐ”๊ฟ”์ค€๋‹ค.), ๊ธฐํ˜ธํ‘œ

 

(4) ์ค‘๊ฐ„์ฝ”๋“œ ์ƒ์„ฑ ๋‹จ๊ณ„

-์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ค‘๊ฐ„ ๋‹จ๊ณ„.

-ํŒŒ์ŠคํŠธ๋ฆฌ๋ฅผ ๋˜๋Š” ๊ตฌ๋ฌธํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ค‘๊ฐ„์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ex) 3์ฃผ์†Œ์ฝ”๋“œ(์ฟผ๋“œ๋Ÿฌํ”Œ Quadruple), ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•

 

(5) ์ฝ”๋“œ์ตœ์ ํ™” ๋‹จ๊ณ„

-ํšจ์œจํ™”, ์ตœ์ ํ™”

-์ˆ˜ํ–‰์‹œ๊ฐ„ ์ตœ์†Œํ™”, ๊ธฐ์–ต ๊ณต๊ฐ„ ์ตœ์†Œํ™”

 

(6) ๋ชฉ์ ์ฝ”๋“œ ์ƒ์„ฑ ๋‹จ๊ณ„

-์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ž๋ฃŒ์— ๊ธฐ์–ต์žฅ์†Œ ์œ„์น˜๋ฅผ ์ •ํ•ด์ค€๋‹ค.

-์ค‘๊ฐ„์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๋ช…๋ น์–ด๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

 

 

๐Ÿ“Œ  ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์€ ์ƒ๊ธฐ 6๋‹จ๊ณ„ ๋…ผ๋ฆฌ์  ์š”์†Œ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ผ ๋ฟ์ด์ง€ ๊ผญ ์ด์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ๋Š” ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ์™€ ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌํ˜„์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๋ชจ์•„ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ ํŒจ์Šค(pass)๋ผ๊ณ  ํ•œ๋‹ค. ํ˜„์žฌ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” 1-ํŒจ์Šค ์ปดํŒŒ์ผ๋Ÿฌ์™€ 2-ํŒจ์Šค ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 1ํŒจ์Šค ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ดˆ์ฐฝ๊ธฐ์— ์‚ฌ์šฉํ–ˆ๋˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ „ ๊ณผ์ •์„ ํ•˜๋‚˜์˜ ํŒจ์Šค๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ , 2-ํŒจ์Šค๋Š” ์ค‘๊ฐ„์ฝ”๋“œ ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๊ธฐ์ ์œผ๋กœ 2ํŒจ์Šค๋กœ ๋‚˜๋ˆ„์–ด ์•ž ๋‹จ๊ณ„๋ฅผ ์ „๋ฐ˜๋ถ€, ๋’ค ๋‹จ๊ณ„๋ฅผ ํ›„๋ฐ˜๋ถ€๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

1ํŒจ์Šค ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ „์ง„๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋นˆ์นธ์œผ๋กœ ๋‚จ๊ฒจ๋‘์—ˆ๋‹ค๊ฐ€ ๊ทธ ์ •๋ณด๋ฅผ ์–ป์—ˆ์„ ๋•Œ ์ฑ„์›Œ ๋„ฃ๋Š” *๋ฐฑํŒจ์นญ(backpatching)์ด ํ•„์š”ํ•˜๋‹ค. ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. 

*๋ฐฑํŒจ์นญ(backpatching): ์˜ˆ๋ฅผ ๋“ค์–ด, if (A or B) and C ์™€ ๊ฐ™์€ if๋ฌธ์„ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ฐ๊ฐ์˜ ๋ถ„๊ธฐ์ (1. A๋Š” ์ฐธ, B๋Š” ์ฐธ/ 2. A๋Š” ์ฐธ, B๋Š” ๊ฑฐ์ง“... ๋“ฑ)์— ๋Œ€ํ•ด์„œ ๋ฒˆ์—ญํ•  ๋‹น์‹œ์—๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜์ค‘์— ๊ฑฐ๊พธ๋กœ ์ฑ„์›Œ๋ด์•ผ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ๋ฐฑํŒจ์นญ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ–ˆ์„ ๋ฟ ์ •ํ™•ํ•˜์ง€ ์•Š์Œ.

 

2ํŒจ์Šค ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ๋กœ ์ง์ ‘ ๋ฒˆ์—ญํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๊ณ„ ์ฝ”๋“œ ํ‘œํ˜„์— ์ œ์•ฝ์„ ๋ฐ›๊ณ  ์‹คํ–‰์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋…๋ฆฝ๋œ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์‹์„ฑ(portability)์ด ์ข‹๊ณ , ์ค‘๊ฐ„ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•œ ์ตœ์ ํ™”์— ๋”ฐ๋ผ ๊ธฐ๊ณ„์™€ ๋…๋ฆฝ์ ์ธ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ํŒจ์Šค๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๊ณต๊ฐ„์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ์–ต์žฅ์†Œ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 2-ํŒจ์Šค ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.