ahn heejong

ํƒ€์ž…๊ณผ ํƒ€์ž… ์‹œ์Šคํ…œ : ๊ธฐ๋ณธ ๊ฐœ๋…

2017-10-24
ํƒ€์ž…
ํƒ€์ž… ์‹œ์Šคํ…œ

ํƒ€์ž…๊ณผ ํƒ€์ž… ์‹œ์Šคํ…œ : ๊ธฐ๋ณธ ๊ฐœ๋…

๋“ค์–ด๊ฐ€๋ฉฐ

๋จผ์ € ์ฒซ ๊ธ€์„ ์ฝ๊ณ  (ํ˜น์€ ์ฝ๋Š” ๋„์ค‘์—) ์ฐฝ์„ ๊บผ๋ฒ„๋ฆฌ๊ฑฐ๋‚˜ ๊ธฐ์–ต ์†์—์„œ ์ง€์›Œ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ , ๋‘ ๋ฒˆ์งธ ๊ธ€์„ ์ฐพ์•„์ฃผ์‹  ๋…์ž ์—ฌ๋Ÿฌ๋ถ„๊ป˜ ๊ฐ์‚ฌ์˜ ๋งˆ์Œ์„ ํ‘œํ•œ๋‹ค.

โค๏ธ๐Ÿ™‡โค๏ธ

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

  • ๊ฐ•ํƒ€์ž…๊ณผ ์•ฝํƒ€์ž…
  • ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ์™€ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ
  • ์ ์ง„์  ํƒ€์ดํ•‘
  • ํƒ€์ž… ์„ ์–ธ
  • ํ˜•๋ณ€ํ™˜
  • ์•ˆ์ „์„ฑ๊ณผ ์™„์ „์„ฑ

๋…์ž๋ถ„๋“ค๊ป˜

ํ‰์–ด์ฒด๋กœ ์จ๋†“์œผ๋‹ˆ ์™œ์ธ์ง€ ์–ด์ƒ‰ํ•˜์—ฌ ์ด ๋ถ€๋ถ„๋งŒ ๊ฒฝ์–ด์ฒด๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ด ์ฃผ์ œ๋กœ ํ•™์œ„๋ฅผ ๋ฐ›์€ ์ ๋„ ์—†๊ฑฐ๋‹ˆ์™€ ๊ฐ€์ง„ ๊ฒฝ๋ ฅ๋„ ๊ทธ๋‹ค์ง€ ๊ธธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธ€์„ ์จ๋‚˜๊ฐ€๋ฉฐ ๊ณต๋ถ€๋ฅผ ๊ฒŒ์„๋ฆฌํ•˜์ง€ ์•Š๊ฒ ์œผ๋‚˜ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธ€์—์„œ ์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ๋ฐœ๊ฒฌํ•˜์‹ ๋‹ค๋ฉด ๋ถ€๋”” ๋ฉ”์ผ ๋“ฑ์˜ ์ˆ˜๋‹จ์œผ๋กœ ์•Œ๋ ค์ฃผ์‹œ๊ธธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด์–ด์งˆ ๊ธ€๋“ค์ด ์ฒซ ์„ ๋ณด์ž„ ์ดํ›„์—๋„ ๋…์ž๋ถ„๋“ค๊ป˜์„œ ์ง€์ /๋ณด์ถฉํ•ด ์ฃผ์‹  ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊พธ์ค€ํžˆ ๋‚˜์•„์ง€๋Š” ๊ฒƒ์ด ์ €์˜ ๋ฐ”๋žŒ์ž…๋‹ˆ๋‹ค. ๊ผญ ์ง€์ ์ด ์•„๋‹ˆ๋”๋ผ๋„ ์—ฐ์žฌ์— ๊ด€ํ•œ ์–ด๋–ค ์˜๊ฒฌ์ด๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. โค๏ธ

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


๊ฐ•ํƒ€์ž…๊ณผ ์•ฝํƒ€์ž…

์–ธ์–ด์˜ ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์„ค๋ช…ํ•˜๋Š” ๊ธ€์„ ์ฝ๋‹ค ๋ณด๋ฉด โ€œ๊ฐ•ํƒ€์ž…strong typeโ€, ๊ทธ๋ฆฌ๊ณ  โ€œ์•ฝํƒ€์ž…weak typeโ€์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ๋งž๋‹ฅ๋œจ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์ข…์ข…, ์ด ์šฉ์–ด๋“ค์€ ์–ธ์–ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ํƒ€์ž… ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, ๊ฐ•ํƒ€์ž… ์–ธ์–ด๋Š” ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ž์ฒด๋ฅผ ๋ง‰์ง€๋งŒ, ์•ฝํƒ€์ž… ์–ธ์–ด๋Š” ๋Ÿฐํƒ€์ž„์— ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚˜๋Š” ํ•œ์ด ์žˆ๋”๋ผ๋„ ์‹คํ–‰์„ ๋ง‰์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

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

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


์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ์™€ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ

ํƒ€์ž… ์‹œ์Šคํ…œ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜๋Š” ์‹œ์ ์ด ์–ธ์  ์ง€์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ํฌ๊ฒŒ ๋‘ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌstatic type checking๋ฅผ ์‹œํ–‰ํ•˜๋Š” ์–ธ์–ด์™€ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌdynamic type checking๋ฅผ ์‹œํ–‰ํ•˜๋Š” ์–ธ์–ด๊ฐ€ ๋ฐ”๋กœ ๊ทธ ๋‘ ๊ฒฝ์šฐ๋‹ค.

์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ

์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํƒ€์ž…์ด ์˜ฌ๋ฐ”๋ฅธ์ง€์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์‹œํ–‰ํ•œ๋‹ค. ๋•Œ๋ฌธ์— ์•ž์„œ ์–ธ๊ธ‰ํ•œ ์˜ˆ์ œ๋“ค์—์„œ ๋“œ๋Ÿฌ๋‚ฌ๋“ฏ, ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด๋ณด์ง€ ์•Š๊ณ ๋„ ํŠน์ •ํ•œ ์ข…๋ฅ˜์˜ ์˜ค๋ฅ˜(ํƒ€์ž… ์—๋Ÿฌtype error)๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์™ธ๊ฐ€ ๋ฐ”๋กœ 0์œผ๋กœ ๋‚˜๋ˆ”(divide-by-zero)์ด๋‹ค. ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ์–ธ์–ด๋ฅผ ์ •์  ํƒ€์ž… ์–ธ์–ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๋ฉฐ, ์ •์  ํƒ€์ž… ์–ธ์–ด์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ C, C++, Go, Haskell, Java, Kotlin, Rust, Scala ๋“ฑ์ด ์žˆ๋‹ค.

๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ

๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํƒ€์ž…์ด ์˜ฌ๋ฐ”๋ฅธ์ง€์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰ํ•œ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด๋ณด๊ธฐ ์ „๊นŒ์ง€๋Š” ์–ด๋– ํ•œ ํƒ€์ž… ์—๋Ÿฌ๋„ ์ ๋ฐœํ•  ์ˆ˜ ์—†๊ณ , ๋งŒ์•ฝ ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•œ๋‹ค. ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ๋งŒ์„ ์‹œํ–‰ํ•˜๋Š” ์–ธ์–ด๋ฅผ ๋™์  ํƒ€์ž… ์–ธ์–ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๋ฉฐ, ๋™์  ํƒ€์ž… ์–ธ์–ด์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ Javascript, Lisp, Lua, Perl, PHP, Python, Ruby ๋“ฑ์ด ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์ 

๋‘ ๊ฐ€์ง€ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ์ ์ด ์žˆ๋‹ค.

์ฒซ์งธ๋กœ, ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ์™€ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ๋Š” ๊ต‰์žฅํžˆ ๊ฑฐ๋Œ€ํ•œ ๋ฒ”์œ„์˜ ๊ฐœ๋…์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด C์™€ Haskell์€ ๋ชจ๋‘ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜์ง€๋งŒ, ๋‘ ์–ธ์–ด์˜ ํƒ€์ž… ์‹œ์Šคํ…œ์€ ๊ทธ ์™ธ์—๋Š” ๋‹ฎ์€ ๋ถ€๋ถ„์„ ์ฐพ๊ธฐ ํž˜๋“ค ์ •๋„๋กœ ๋‹ค๋ฅด๋‹ค. ๋”ฐ๋ผ์„œ โ€œ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ์–ธ์–ด๊ฐ€ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ์–ธ์–ด๋ณด๋‹ค ๋‚ซ๋‹คโ€์™€ ๊ฐ™์€ ์ฃผ์žฅ์€ ๋ฐ˜๋ก€๋ฅผ ๋งž๋‹ฅ๋œจ๋ฆฌ๊ธฐ ์‰ฌ์šด ์ทจ์•ฝํ•œ ์ฃผ์žฅ์ด๋‹ค. ํƒ€์ž… ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ ์ƒ์‚ฐ์ ์ธ ์ฃผ์žฅ์„ ์œ„ํ•ด์„œ๋Š” ๊ตฌ์ฒด์ ์ธ ์–ธ์–ด์˜ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋Šฅ์„ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋‹ค์Œ์œผ๋กœ, ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ์™€ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ์ ์ธ ๊ฐœ๋…์ด ์•„๋‹ˆ๋‹ค. ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ๋งŽ์€ ์–ธ์–ด๊ฐ€ ๋Ÿฐํƒ€์ž„์—๋„ ์–ด๋Š ์ •๋„์˜ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•œ๋‹ค. ๋Ÿฐํƒ€์ž„์—๋งŒ ์กด์žฌํ•˜๋Š” ์ •๋ณด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ทธ ์ ๋ฒ•์„ฑ์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํƒ€์ž… B๊ฐ€ ํƒ€์ž… A์˜ ์„œ๋ธŒํƒ€์ž…์ผ ๋•Œ, A ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ B ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๋Š” ๋‹ค์šด์บ์ŠคํŒ…downcasting์ด ๊ทธ๋Ÿฐ ์˜ˆ์ด๋‹ค.


์ ์ง„์  ํƒ€์ดํ•‘

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

์ด๋Ÿฐ ์ƒํ™ฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฐ ์‹œ๋„ ์ค‘ ๋‹ค์ˆ˜๊ฐ€ ์ ์ง„์  ํƒ€์ดํ•‘gradual typing์„ ์ง€์›ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ช…์‹œํ•œ ์ผ๋ถ€ ๋ถ€๋ถ„๋งŒ ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ๊ฑฐ์น˜๊ฒŒ ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๊ทธ๋Œ€๋กœ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋„๋ก ํ•˜์—ฌ, ๋ง ๊ทธ๋Œ€๋กœ ์ ์ง„์ ์ธ ๊ฐœ์„ ์„ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ ์ง„์  ํƒ€์ดํ•‘์ด ๊ฐ€๋Šฅํ•œ ๋Œ€ํ‘œ์ ์ธ ๋™์  ํƒ€์ž… ์–ธ์–ด๋กœ Closure, TypeScript, Hack ๋“ฑ์ด ์žˆ๋‹ค. ๋˜ํ•œ, C#์˜ ๊ฒฝ์šฐ ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ ์–ธ์–ด๋กœ ์‹œ์ž‘ํ–ˆ์œผ๋‚˜ ํ›„์— dynamic ํ‚ค์›Œ๋“œ๋กœ ๋™์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ๊ฑฐ์น  ๋ถ€๋ถ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ ์ ์ง„์  ํƒ€์ดํ•‘์„ ๋„์ž…ํ–ˆ๋‹ค.


ํƒ€์ž… ์„ ์–ธ

๋งŽ์€ ์ •์  ํƒ€์ž… ์–ธ์–ด๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ๋ชจ๋“  ๊ฐ’ ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ํƒ€์ž…์— ์†ํ•˜๋Š”์ง€ ๋ช…์‹œํ•˜๋Š” ๋ช…์‹œ์  ํƒ€์ž… ์„ ์–ธexplicit type declaration์„ ์ž‘์„ฑํ•  ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, C์—์„œ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜๋ช… ์•ž์— ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (int i) ์ด๋Ÿฐ ์–ธ์–ด์—์„œ๋Š” ํƒ€์ž… ์„ ์–ธ์ด ์ˆ˜๋ฐ˜๋˜์ง€ ์•Š๋Š” ๊ฐ’ ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•œํŽธ, Haskell์„ ๋น„๋กฏํ•œ ์ผ๋ถ€ ์–ธ์–ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋ช…์‹œ์  ํƒ€์ž… ์„ ์–ธ ์—†์ด๋„ ์ด๋ฏธ ํƒ€์ž…์ด ์•Œ๋ ค์ง„ ๊ฐ’, ๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ์˜ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ถ”๋ก  ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๋“ฏ, ๋ณ„๋„์˜ ํƒ€์ž… ์„ ์–ธ ์—†์ด ํƒ€์ž… ์ •๋ณด๋ฅผ ๊ทœ๋ช…ํ•˜๋Š” ์ผ์„ ํƒ€์ž… ์‹œ์Šคํ…œ์—๊ฒŒ ๋งก๊ธฐ๋Š” ๋ฐฉ์‹์„ ์•”์‹œ์  ํƒ€์ž… ์„ ์–ธimplicit type declaration์ด๋ผ ๋ถ€๋ฅธ๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์—์„œ ํƒ€์ž… ์ •๋ณด๋ฅผ ์–ผ๋งˆ๋‚˜ ์ •ํ™•ํ•˜๊ฒŒ ์ถ”๋ก ํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋Š๋ƒ๋Š” ํƒ€์ž… ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๊ทน๋ช…ํ•˜๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค.

ํƒ€์ž… ์ถ”๋ก ์€ ๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๊ณ  ํฅ๋ฏธ๋กœ์šด ์ฃผ์ œ์ธ ๋งŒํผ, ์ฐจํ›„ ๋ณ„๋„์˜ ํฌ์ŠคํŠธ๋กœ ์ข€ ๋” ๊นŠ์ด ๋‹ค๋ฃฌ๋‹ค.


ํ˜•๋ณ€ํ™˜

์•ž์„  ๊ธ€์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ, ํ•œ ๊ฐ’์€ ์—ฌ๋Ÿฌ ํƒ€์ž…์— ์†ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๊ฐ€๋Šฅ์„ฑ์˜ ๋ฌธ์ œ์ผ ๋ฟ, ์‹ค์ œ๋กœ๋Š” ํŠน์ • ์‹œ์ ์— ์–ด๋–ค ๊ฐ’(๋˜๋Š” ๋ณ€์ˆ˜)์—๋Š” ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ์ด ํ• ๋‹น ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ํ•„์š”๋กœ ์ธํ•ด ์ด ๊ฐ’์˜ ํƒ€์ž…์„ ์ง€๊ธˆ ํ• ๋‹น๋œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฐ”๊พธ์–ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์ˆ˜ ํƒ€์ž…๊ณผ ๋ถ€๋™์†Œ์ˆ˜์  ํƒ€์ž…์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์–ธ์–ด์—์„œ ๋‘ ํƒ€์ž…์— ์†ํ•˜๋Š” ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋Ÿฌํ•˜๋‹ค. ์ด๋•Œ, ์ •์ˆ˜ ๊ฐ’์˜ ํƒ€์ž…์„ ๋ถ€๋™์†Œ์ˆ˜์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ˜น์€ ๊ทธ ๋ฐ˜๋Œ€์˜ ์ž‘์—…์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ’์˜ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ํ˜•๋ณ€ํ™˜type conversion์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

ํ˜•๋ณ€ํ™˜, ํƒ€์ž… ์บ์ŠคํŒ…, ํƒ€์ž… ๊ฐ•์ œ

ํ˜•๋ณ€ํ™˜์— ๊ด€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ์ž์ฃผ ์“ฐ์ด๋Š” ์„ธ ์šฉ์–ด๊ฐ€ ์žˆ๋‹ค.

  • ํ˜•๋ณ€ํ™˜type conversion
  • ํƒ€์ž… ์บ์ŠคํŒ…type casting
  • ํƒ€์ž… ๊ฐ•์š”type coercion

์ด ์„ธ ์šฉ์–ด๋Š” ๊ทธ ์˜๋ฏธ์™€ ๊ด€๊ณ„๊ฐ€ ์ •ํ™•ํžˆ ํ•ฉ์˜๋˜์ง€ ์•Š์•˜๊ณ , ์–ธ์–ด์™€ ํ”Œ๋žซํผ ๋ณ„๋กœ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. ๋ณธ ์—ฐ์žฌ์—์„œ๋Š” ํ˜•๋ณ€ํ™˜๊ณผ ํƒ€์ž… ์บ์ŠคํŒ…์„, ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์—์„œ ์–ธ๊ธ‰ํ•  ์•”์‹œ์  ํ˜•๋ณ€ํ™˜๊ณผ ํƒ€์ž… ๊ฐ•์ œ๋ฅผ ๊ฐ๊ฐ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•œ๋‹ค.

ํ˜•๋ณ€ํ™˜์€ ํฌ๊ฒŒ ์•”์‹œ์  ํ˜•๋ณ€ํ™˜๊ณผ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

์•”์‹œ์  ํ˜•๋ณ€ํ™˜

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

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

/* Javascript, the good parts */
console.log(1 + 1)          // 1
console.log(1 + 3.1)        // 4.1
console.log(1 + 3.14)       // 4.140000000000001 (IEEE 754)

/* Javascript, some parts of it... at least */
console.log(1 + []);        // '1'
console.log(1 - []);        // 1
console.log(1 + {});        // '1[object Object]'
console.log(1 - {});        // NaN
console.log([] + []);       // ''
console.log({} + []);       // 0
console.log({} + {});       // NaN

๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜

์•”์‹œ์  ํ˜•๋ณ€ํ™˜๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ฐ’์„ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ํ•ด์„ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ๋ฐํž˜์— ๋”ฐ๋ผ ์ผ์–ด๋‚˜๋Š” ํ˜•๋ณ€ํ™˜์„ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜explicit type conversion์ด๋ผ ๋ถ€๋ฅธ๋‹ค. ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์€ ์–ธ์–ด์— ๋”ฐ๋ผ ํƒ€์ž… ์บ์ŠคํŒ… ์—ฐ์‚ฐ์žtype casting operator, ํƒ€์ž… ๋ณ€ํ™˜ ํ•จ์ˆ˜type conversion function ๋“ฑ์„ ์ด์šฉํ•ด ์ผ์–ด๋‚œ๋‹ค.

// C
double a = 3.3;
int b = (int) a;

// Python
a = 3.3;
b = int(a)

// Haskell
a = 3.3
b = round a

์•ˆ์ „์„ฑ๊ณผ ์™„์ „์„ฑ

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

์•ˆ์ „์„ฑ

์–ด๋–ค ๋…ผ๋ฆฌ ์ฒด๊ณ„์—์„œ ์ฆ๋ช… ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ช…์ œ๋Š” ์ฐธ์ผ ๊ฒƒ์ด ๋ณด์žฅ๋  ๋•Œ, ์ด ๋…ผ๋ฆฌ ์ฒด๊ณ„๋ฅผ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ํƒ€์ž… ์‹œ์Šคํ…œ์ด ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ์ด ํƒ€์ž… ์‹œ์Šคํ…œ์˜ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•œ ํ”„๋กœ๊ทธ๋žจ์€ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์„ ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค(no false positive)๋Š” ์˜๋ฏธ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์•ˆ์ „ํ•œ ํƒ€์ž… ์‹œ์Šคํ…œํ•˜์—์„œ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•œ ํ”„๋กœ๊ทธ๋žจ์€ ๋ชจ๋‘ (ํƒ€์ž… ์‹œ์Šคํ…œ์ด ๋ณด์žฅํ•˜๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ) ์˜ฌ๋ฐ”๋ฅด๋‹ค.

์™„์ „์„ฑ

์–ด๋–ค ๋…ผ๋ฆฌ ์ฒด๊ณ„์—์„œ ๋ชจ๋“  ์ฐธ์ธ ๋ช…์ œ๋Š” ์ฆ๋ช… ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด ๋ณด์žฅ๋  ๋•Œ, ์ด ๋…ผ๋ฆฌ ์ฒด๊ณ„๋ฅผ ์™„์ „ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ํƒ€์ž… ์‹œ์Šคํ…œ์ด ์™„์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์„ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์ด ํƒ€์ž… ์‹œ์Šคํ…œ์˜ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•  ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค(no false negative)๋Š” ์˜๋ฏธ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์™„์ „ํ•œ ํƒ€์ž… ์‹œ์Šคํ…œํ•˜์—์„œ ๋ชจ๋“  (ํƒ€์ž… ์‹œ์Šคํ…œ์ด ๋ณด์žฅํ•˜๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ) ์˜ฌ๋ฐ”๋ฅธ ํ”„๋กœ๊ทธ๋žจ์€ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•œ๋‹ค.

ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

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


๋งˆ์น˜๋ฉฐ

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

์ฐธ๊ณ  ์ž๋ฃŒ