๋˜‘๋˜‘ํ•˜์ง€ ๋ชปํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ Go๊ฐ€ ๋‚˜์œ ์ด์œ 

์ด ๊ธฐ์‚ฌ๋Š” ์ด์ „์— ๊ฒŒ์‹œ๋œ ๊ธ€์— ๋Œ€ํ•œ ๋‹ต๋ณ€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ฒ™์ง€ ๊ธฐ์‚ฌ.

๋˜‘๋˜‘ํ•˜์ง€ ๋ชปํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ Go๊ฐ€ ๋‚˜์œ ์ด์œ 

์ง€๋‚œ XNUMX๋…„ ๋„˜๊ฒŒ ์ €๋Š” Go๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋œ ์ฒญ๊ตฌ ์‹œ์Šคํ…œ์„ ๊ฐ–์ถ˜ ํŠน์ˆ˜ RADIUS ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ๋‚˜๋Š” ์–ธ์–ด ์ž์ฒด์˜ ๋ณต์žก์„ฑ์„ ๋ฐฐ์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋ฉฐ ์ด ๊ธฐ์‚ฌ์˜ ๋ชฉ์ ์€ ์•„๋‹ˆ์ง€๋งŒ Go ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์€ ์ด๋ฅผ ์˜นํ˜ธํ•˜๋Š” ๋ฐ ๋ช‡ ๋งˆ๋”” ๋งํ• ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Go๋Š” ์‹ฌ๊ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์ ์  ๋” ์ฃผ๋ฅ˜ ์–ธ์–ด๊ฐ€ ๋˜์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” Google์—์„œ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ ์ €๋Š” ์†”์งํžˆ Go ์–ธ์–ด์˜ ๋””์ž์ธ์ด UNintelligent ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ข‹์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•ฝํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์•ฝํ•œ ์‚ฌ๋žŒ์€ ๋ฌธ์ œ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์•„์ด๋””์–ด์™€ ๊ฟˆ์— ๋Œ€ํ•œ ๊ฐ•๋ ฌํ•œ ์ด์•ผ๊ธฐ..

Go๋Š” ๋ฐฐ์šฐ๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฌ์šฐ๋ฏ€๋กœ ์‹ค์ œ๋กœ ์ „ํ˜€ ๊ต์œก์„ ๋ฐ›์ง€ ์•Š๊ณ ๋„ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด ๊ธฐ๋Šฅ์€ ๋งŽ์€ ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—…์—์„œ ๋น„ํ•ต์‹ฌ ์ „๋ฌธ๊ฐ€(๊ด€๋ฆฌ์ž, ๊ณ ๊ฐ ๋“ฑ)์™€ ํ•จ๊ป˜ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋””์ž์ธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋ก ์— ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ดˆ๋ณด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋„ XNUMX~XNUMX์ฃผ ํ›„์—๋Š” ๊ฝค ๊ดœ์ฐฎ์€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๊ณต๋ถ€ํ•œ ์ฑ…์€ "Go ํ”„๋กœ๊ทธ๋ž˜๋ฐ"(๋งˆํฌ ์„œ๋จธํ•„๋“œ ์ง€์Œ)์ž…๋‹ˆ๋‹ค. ์ด ์ฑ…์€ ๋งค์šฐ ํ›Œ๋ฅญํ•˜๋ฉฐ ์–ธ์–ด์˜ ๋งŽ์€ ๋‰˜์•™์Šค๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Java, PHP ๋“ฑ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•œ ์–ธ์–ด์— ์ด์–ด ๋งˆ๋ฒ•์˜ ๋ถ€์กฑํ•จ์ด ์ƒ์พŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์กฐ๋งŒ๊ฐ„ ๋งŽ์€ ์ œํ•œ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์ƒˆ๋กœ์šด ๋ถ„์•ผ์—์„œ ์˜ค๋ž˜๋œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์•„์ด๋””์–ด๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ •๋ง๋กœ ํ•„์š”ํ•œ๊ฐ€?

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

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์กŒ๋Š”๊ฐ€? ๋‹ค์Œ์€ Rob Pike์˜ ๋ช‡ ๊ฐ€์ง€ ์ธ์šฉ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์—ฐ๊ตฌ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์•„์ฃผ ์–ด๋ ค์„œ ๊ณต๋ถ€๋ฅผ ๋งˆ์น˜๊ณ  ์šฐ๋ฆฌ์—๊ฒŒ ์™”์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ Java, C/C++ ๋˜๋Š” Python์„ ๊ณต๋ถ€ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ›Œ๋ฅญํ•œ ์–ธ์–ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋™์‹œ์— ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์ด ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์–ด๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

ํ˜„๋ช…ํ•œ ๋ง์ด์ง€, ๊ทธ๋ ‡์ง€?

๋‹จ์ˆœํ•จ์˜ ์œ ๋ฌผ

๋‹จ์ˆœํ•จ์€ ์•„๋ฆ„๋‹ค์›€์˜ ํ•„์ˆ˜ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. ๋ ˆํ”„ ํ†จ์Šคํ† ์ด.

๋‹จ์ˆœํ•จ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ๋””์ž์ธ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์•„์‹œ๋‹ค์‹œํ”ผ ์™„๋ฒฝํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์ถ”๊ฐ€ํ•  ๊ฒƒ์ด ์—†๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ œ๊ฑฐํ•  ๊ฒƒ์ด ์—†๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์€ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ(๋˜๋Š” ํ‘œํ˜„)ํ•˜๋ ค๋ฉด ๋ณต์žกํ•œ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PERL ์–ธ์–ด๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ์ด๋ฐ์˜ฌ๋กœ๊ธฐ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ ์–ด๋„ ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋ฏฟ์—ˆ์Šต๋‹ˆ๋‹ค. Go ์–ธ์–ด์˜ ์ด๋ฐ์˜ฌ๋กœ๊ธฐ๋Š” ๋‹ค๋ฅธ ๊ธธ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์ •๋ง ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ฉด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—๋Š” ์‹ฌ๊ฐํ•œ ๊ธฐ๋ฐ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

ํ‘œํ˜„๋ ฅ์ด ๋ณ„๋กœ ์ข‹์ง€ ์•Š์Œ

์˜ˆ์ˆ ์€ ์ž์œ ๊ฐ€ ์ œํ•œ๋˜๋Š” ๊ฒƒ์„ ์šฉ๋‚ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•์„ฑ์€ ๊ทธ์˜ ์ฑ…์ž„์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

์˜ˆ๋ฅผ ๋“ค์–ด ๋ช…๋ น์ค„ ์ธ์ˆ˜์—์„œ stdin ๋˜๋Š” ํŒŒ์ผ์„ ์ฝ๋Š” ์ฝ˜์†” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()

    scanner := newScanner(flag.Args())

    var text string
    for scanner.Scan() {
        text += scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

func newScanner(flags []string) *bufio.Scanner {
    if len(flags) == 0 {
        return bufio.NewScanner(os.Stdin)
    }

    file, err := os.Open(flags[0])

    if err != nil {
        log.Fatal(err)
    }

    return bufio.NewScanner(file)
}

D์˜ ๋™์ผํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์†Œ ์งง์•„ ๋ณด์ด์ง€๋งŒ ์ฝ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

๋ณต์‚ฌ์˜ ์ง€์˜ฅ

์ธ๊ฐ„์€ ์ž์‹  ์•ˆ์— ์ง€์˜ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆํ‹ด ๋ฃจํ„ฐ.

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

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

์–ธ์–ด์—๋Š” ๊ทธ๋Ÿฌํ•œ ๊ตฌ์„ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•œ ์ˆ˜๋‹จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

package main

import "fmt"

func Eval32(list []int32, fn func(a, b int32)int32) int32 {
    var res int32
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int32Add(a, b int32) int32 {
    return a + b
}

func int32Sub(a, b int32) int32 {
    return a + b
}

func Eval64(list []int64, fn func(a, b int64)int64) int64 {
    var res int64
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int64Add(a, b int64) int64 {
    return a + b
}

func int64Sub(a, b int64) int64 {
    return a - b
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(Eval32(list32, int32Add))
    fmt.Println(Eval64(list64, int64Add))
    fmt.Println(Eval64(list64, int64Sub))
}

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๋Š” ์ด์ „ ์‚ฌ๋ก€์— ๋น„ํ•ด ๋‹ค์†Œ ๊ธธ์–ด์กŒ์ง€๋งŒ ์ผ๋ฐ˜ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด D ํ”„๋กœ๊ทธ๋žจ์ด ํ›จ์”ฌ ๋” ์งง์•„ ๋ณด์ธ๋‹ค๊ณ  ๋งํ•  ๊ฒƒ์ด๋ฉฐ, ๊ทธ ๋ง์ด ์˜ณ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

๊ทธ๋Ÿฌ๋‚˜ D ๊ตฌํ˜„์€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๋ฏ€๋กœ ๋” ์งง์„ ๋ฟ ๋” ์ •ํ™•ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

์œ ์ง€๋ณด์ˆ˜์„ฑ, ํ™•์žฅ์„ฑ, ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ๋ณด๋ฉด Go ์–ธ์–ด๊ฐ€ ๋น„๋ก ์žฅํ™ฉํ•จ์—์„œ๋Š” ๋–จ์–ด์ง€์ง€๋งŒ ์Šน๋ฆฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜ํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์šฐ๋ฆฌ์—๊ฒŒ ๋ถ€์ธํ•  ์ˆ˜ ์—†๋Š” ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” sort ํŒจํ‚ค์ง€์— ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชฉ๋ก์„ ์ •๋ ฌํ•˜๋ ค๋ฉด sort.Interface ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

import "sort"

type Names []string

func (ns Names) Len() int {
    return len(ns)
}

func (ns Names) Less(i, j int) bool {
    return ns[i] < ns[j]
}

func (ns Names) Swap(i, j int) {
    ns[i], ns[j] = ns[j], ns[i]
}

func main() {
    names := Names{"London", "Berlin", "Rim"}
    sort.Sort(names)
}

์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  grep "interface{}" -R ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Œ์ด ๊ฐ€๊นŒ์šด ๋™์ง€๋“ค์€ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋„ค๋ฆญ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ฆ‰์‹œ ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. DELPHI๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์ผํ•œ ์ œ๋„ค๋ฆญ์ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ž„์˜์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์„ ์œ„ํ•œ ํŠน์ˆ˜ VARIANT ์œ ํ˜•์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Go ์–ธ์–ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ฐธ์ƒˆ ์ด์—์„œ

๊ทธ๋ฆฌ๊ณ  ๊ตฌ์†๋ณต์€ ๊ด‘๊ธฐ์˜ ํฌ๊ธฐ์— ๋งž์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ€๋‹ˆ์Šฌ๋ผํ”„ ๋ ˆํฌ.

๋งŽ์€ ๊ทน๋‹จ์ ์ธ ํŒฌ๋“ค์€ Go์— ์ œ๋„ค๋ฆญ์„ ์ƒ์„ฑํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ๋ฆฌํ”Œ๋ ‰์…˜์ด ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์˜ ๋ง์ด ์˜ณ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ์•„์ฃผ ๋“œ๋ฌธ ๊ฒฝ์šฐ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

Rob Pike๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์ด๋ ‡๊ฒŒ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Wikipedia๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ์•„์‹œ๋‹ค์‹œํ”ผ ๋ชจ๋“  ๋น„์šฉ์€ ๊ท€ํ•˜๊ฐ€ ์ง€๋ถˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์˜ ์–ด๋ ค์›€
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„

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

์‹œ์ง„ํ•‘์˜ ๋ฌธํ™”์  ์ˆ˜ํ•˜๋ฌผ? ์•„๋‹ˆ์š”, ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค!

์žฌ์‚ฐ๊ณผ ํ•จ๊ป˜ ๋นš๋„ ์ƒ์†์ธ์—๊ฒŒ ๋‚จ์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์–ธ์–ด๊ฐ€ ์ „์ ์œผ๋กœ C ์œ ์‚ฐ์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ๊ณ  ์žˆ์ง€๋งŒ ์‚ฌ์‹ค์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ์ตœ๊ณ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์„ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ

์šฐ์„ , ๋ฌธ๋ฒ• ๊ตฌ์กฐ์˜ ๊ตฌ๋ฌธ์€ C ์–ธ์–ด์˜ ๊ตฌ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DELPHI ์–ธ์–ด๋„ ์ƒ๋‹นํ•œ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€๋…์„ฑ์„ ํฌ๊ฒŒ ์ €ํ•˜์‹œํ‚ค๋Š” ์ค‘๋ณต๋œ ๊ด„ํ˜ธ๊ฐ€ ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด์—๋Š” DELPHI ์–ธ์–ด ๊ณ ์œ ์˜ ":=" ์—ฐ์‚ฐ์ž๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์˜ ๊ฐœ๋…์€ ADA์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ ์ฐจ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์—”ํ„ฐํ‹ฐ์˜ ์„ ์–ธ์€ PROLOG ์–ธ์–ด์—์„œ ์ฐจ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜๋ฏธ๋ก 

ํŒจํ‚ค์ง€๋Š” DELPHI ์–ธ์–ด์˜ ์˜๋ฏธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํŒจํ‚ค์ง€๋Š” ๋ฐ์ดํ„ฐ์™€ ์ฝ”๋“œ๋ฅผ ์บก์Šํ™”ํ•˜๊ณ  ๊ฐœ์ธ ๋ฐ ๊ณต์šฉ ์—”ํ„ฐํ‹ฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์ž„ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ๊ตฌํ˜„ ์ž‘์—…์€ DELPHI ์–ธ์–ด๋ฅผ ์ฐจ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘

๋†๋‹ด์ด ์žˆ๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•ฉ๋‹ˆ๋‹ค. Go๋Š” C ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋˜๋Š” ๋™์•ˆ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด์˜ ๊ฐ•์  ์ค‘ ํ•˜๋‚˜๋Š” ์ดˆ๊ณ ์† ์ปดํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” DELPHI ์–ธ์–ด์—์„œ ์ฐจ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ Go ํŒจํ‚ค์ง€๋Š” DELPHI ๋ชจ๋“ˆ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€๋Š” ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ํŽธ์ง‘ ํ›„์—๋Š” ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋ณ€๊ฒฝ๋œ ํŒจํ‚ค์ง€์™€ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ๋œ ํŒจํ‚ค์ง€์— ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€๋งŒ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ์—๋„ ํŒจํ‚ค์ง€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ).

์ƒ์œ„ ์ˆ˜์ค€ ๊ตฌ์„ฑ

์ด ์–ธ์–ด์—๋Š” C์™€ ๊ฐ™์€ ์ €์ˆ˜์ค€ ์–ธ์–ด์™€ ์ „ํ˜€ ๊ด€๋ จ์ด ์—†๋Š” ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ๊ตฌ์กฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ„๋„์˜ ๊ธฐ์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. C++์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ์ œ์–ด๊ฐ€ ์ „์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งก๊ฒจ์ ธ ์žˆ์ง€๋งŒ DELPHI์™€ ๊ฐ™์€ ์ดํ›„ ์–ธ์–ด์—์„œ๋Š” ์ฐธ์กฐ ๊ณ„์‚ฐ ๋ชจ๋ธ์ด ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ ์•„ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ˜•์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ Go์—๋Š” ์ด๋Ÿฌํ•œ ํด๋Ÿฌ์Šคํ„ฐ(์˜ˆ: C#)์— ๋Œ€ํ•œ ๊ฐ์ง€ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ํ˜„์žฌ ์•Œ๋ ค์ง„ ๋Œ€๋ถ€๋ถ„์˜ ๊ตฌํ˜„๋ณด๋‹ค ๋” ํšจ์œจ์ ์ด๋ฉฐ ์ด๋ฏธ ๋งŽ์€ ์‹ค์‹œ๊ฐ„ ์ž‘์—…์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ์ž์ฒด๋Š” ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•  ๊ฐ’์ด ์Šคํƒ์— ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์˜ ๋กœ๋“œ๊ฐ€ ์ค„์–ด๋“ค๊ณ  ํ”„๋กœ๊ทธ๋žจ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

๋™์‹œ์„ฑ๊ณผ ๋™์‹œ์„ฑ

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

์ถ”๊ฐ€ ํ˜œํƒ

์ด์ต์ด ๋œ๋‹ค๋ฉด ๋ชจ๋‘๊ฐ€ ์ดํƒ€์ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ธ์–ด๋Š” ๋˜ํ•œ ์šฐ๋ฆฌ์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜์‹ฌํ•  ์—ฌ์ง€ ์—†๋Š” ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•œ ํ›„ ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๊ฐ€ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์ •์  ์œ ํ˜• ์ง€์ • ๋ฐ ์œ ํ˜• ์ถ”๋ก ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜ ์ˆ˜๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ „ํ˜€ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํฌ๊ฒŒ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๋Š” ์ผ๋ถ€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํฌ๋กœ์Šค ์ปดํŒŒ์ผ๊ณผ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋›ฐ์–ด๋‚œ ์ด์‹์„ฑ์„ ํ†ตํ•ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • RE2 ์ •๊ทœ์‹์€ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋ฉฐ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํƒ€์‚ฌ ํ”„๋ ˆ์ž„์›Œํฌ ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ์–ธ์–ด๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ๋ฌธ์ œ์— ์ง‘์ค‘ํ•  ๋งŒํผ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋‚ฎ์€ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.
  • Go ์—์ฝ” ์‹œ์Šคํ…œ์—๋Š” ํ…Œ์ŠคํŠธ, ๋ฌธ์„œํ™”, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ, ๊ฐ•๋ ฅํ•œ ๋ฆฐํ„ฐ, ์ฝ”๋“œ ์ƒ์„ฑ, ๊ฒฝ์Ÿ ์กฐ๊ฑด ๊ฐ์ง€๊ธฐ ๋“ฑ ๋ชจ๋“  ์ƒํ™ฉ์— ๋งž๊ฒŒ ๊ฐœ๋ฐœ๋œ ๋„๊ตฌ๊ฐ€ ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Go ๋ฒ„์ „ 1.11์—๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” VCS ํ˜ธ์ŠคํŒ…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ์˜๋ฏธ๋ก ์  ์ข…์†์„ฑ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Go ์ƒํƒœ๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ๋‹ค์šด๋กœ๋“œ, ๋นŒ๋“œ ๋ฐ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ํ›Œ๋ฅญํ•ด์š”. ๋ฒ„์ „ 1.11์ด ์ถœ์‹œ๋˜๋ฉด์„œ ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฌธ์ œ๋„ ์™„์ „ํžˆ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์–ธ์–ด์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๋งˆ์ˆ ์„ ์ค„์ด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์–ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์žฅ๋ คํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹จ์ˆœํžˆ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์™„์ „ํžˆ ์žŠ์–ด๋ฒ„๋ฆด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์ ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋‹จ์ˆœํžˆ ์˜ค๋ฅ˜๋ฅผ ์œ„๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํ˜ธํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์–ธ์–ด๋Š” ์ˆœ์ˆ˜ํ•œ ํ˜•ํƒœ์˜ Go์—๋Š” ๊ฐ€์ƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์ „์ ์ธ OOP ๋ฐฉ๋ฒ•๋ก ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. OOP๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ณด์ž์˜ ์ง„์ž… ์žฅ๋ฒฝ์ด ํฌ๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์ง€์—ญ์‚ฌํšŒ ์ด์ต์„ ์œ„ํ•œ ๋‹จ์ˆœ์„ฑ

๋ณต์žกํ•˜๊ธฐ๋Š” ์‰ฝ๊ณ  ๋‹จ์ˆœํ™”ํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

Go๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ๊ทธ ๋ชฉํ‘œ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒ€์›Œํฌ์˜ ์ด์ ์„ ์ดํ•ดํ•˜๊ณ  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€ ์–ธ์–ด์˜ ๋์—†๋Š” ๊ฐ€๋ณ€์„ฑ์— ์ง€์นœ ๋˜‘๋˜‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๊ธฐ๊ณ ์— ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ๊ตฌ๋ฌธ ๊ตฌ์กฐ ์„ธํŠธ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ์–ธ์–ด ํ˜์‹ ์„ ๋์—†์ด ์—ฐ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—…์€ ๋˜ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์„ ์–ป์Šต๋‹ˆ๋‹ค. ์ง„์ž… ์žฅ๋ฒฝ์ด ๋‚ฎ์•„ ์ „๋ฌธ๊ฐ€๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ , ์–ธ์–ด์˜ ๋ถˆ๋ณ€์„ฑ์œผ๋กœ ์ธํ•ด 10๋…„ ํ›„์—๋„ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋‡Œ๊ฐ€ ํฌ๋‹ค๊ณ  ํ•ด์„œ ์–ด๋–ค ์ฝ”๋ผ๋ฆฌ๋„ ๋…ธ๋ฒจ์ƒ ์ˆ˜์ƒ์ž๊ฐ€ ๋œ ์ ์€ ์—†์Šต๋‹ˆ๋‹ค.

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

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€