์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
1. ๊ฐœ์š”2. ํ˜„์žฌ์ƒํ™ฉ3. ์ฐธ์กฐ๋„์„œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

1970๋…„๋Œ€ ์ดˆ, ๋ฏธ๊ตญ ์ œ๋ก์Šค(XEROX)์‚ฌ์˜ ํŒฐ๋Ÿฌ ์•จํ†  ์—ฐ๊ตฌ ์„ผํ„ฐ(PARC)์—์„œ ๊ฐœ๋ฐœํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด. C++, Java์™€ ๊ฐ™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ดˆ์ด๋‹ค.[1] ์ด ์™ธ์—๋„ Ruby, Python, AppleScript, Dylan, Perl, Scala ๊ฐ™์€ ์ˆ˜๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ์˜ํ–ฅ์„ ์ฃผ์—ˆ์œผ๋ฉฐ, ๊ทธ ์™ธ์— ์ตœ์ดˆ๋กœ GUI(๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์ œ๊ณตํ•˜๋Š” ์–ธ์–ด๋กœ ๋งคํ‚จํ† ์‹œ์˜ GUI์— ์˜ํ–ฅ์„ ์ค€, ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•œ ํš์„ ๊ทธ์€ ์–ธ์–ด.

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP; Object-Oriented Programming)์€ ๋‹น์‹œ์—๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด, ํ˜๋ช…์ ์ธ ๊ฐœ๋…์ด์—ˆ๋Š”๋ฐ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ช…๋ น์–ด์˜ ๋ชฉ๋ก์œผ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๋‹จ์œ„, ์ฆ‰ "๊ฐ์ฒด"๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•œ ๊ฒƒ์ด๋‹ค. ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Smalltalk๋Š” ์—˜๋Ÿฐ ์ผ€์ด(Alan Kay)๋ฅผ ์œ„์‹œํ•œ PARC์˜ ์—ฐ๊ตฌ์ž๋“ค์ด OOP์˜ ๊ฐœ๋…์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด, ์ฆ‰ OOP๋ž€ ์ด๊ฑฐ์•ผ! ๋ผ๋Š” ์ƒ˜ํ”Œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๊ฐœ๋ฐœํ•œ ์„ฑ๊ฒฉ์ด ๊ฐ•ํ•˜๋ฉฐ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ˆ˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ๋”ฐ๋ผ์„œ OOP๊ฐ€ ๊ฐ€์ง€๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐœ๋ฐœ์‹œ๊ฐ„ ๋‹จ์ถ•, ์ข€๋” ์ •ํ™•ํ•œ ์ฝ”๋”ฉ, ๋†’์€ ๋ณด์•ˆ ์‹œ์Šคํ…œ ๊ฐ™์€ ์žฅ์ ์„ ์ง€๋‹Œ ๋ฐ˜๋ฉด ์‹ค์ œ ์„ธ๊ณ„์˜ ๋ชจ์Šต์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๋น„ํŒ์„ ๋ฐ›๊ธฐ๋„ ํ–ˆ๋‹ค. Smalltalk์—์„œ๋Š” ์ •์ˆ˜ํ˜• ๋“ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋„ ๋ชจ๋‘ ๊ฐ์ฒด์˜€๋˜ ๋“ฑ์˜ ๋ฌธ์ œ๋กœ ์ธํ•ด Smalltalk๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์€ C๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ๋ณด๋‹ค 10๋ฐฐ ์ด์ƒ ๋А๋ฆฌ๋‹ค๋Š” ๊ฒƒ์ด ์ •ํ‰์ด์—ˆ๊ณ , Smalltalk์˜ ์ž์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ผ๊ธฐ๋ณด๋‹ค ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํฌ๊ด„ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์ ๋„ ์–ธ์–ด์˜ ํ™•์‚ฐ์— ์ œ์•ฝ์ด ๋˜์—ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ํ˜„์žฌ์˜ Java์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, 70~80๋…„๋Œ€์˜ ์ปดํ“จํ„ฐ ์„ฑ๋Šฅ์„ ์ƒ๊ฐํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒ๋จธ์‹ ์„ ์ด์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ๋น„ํ˜„์‹ค์ ์ธ ๊ฒƒ์ด์—ˆ๋‹ค.

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

2. ํ˜„์žฌ์ƒํ™ฉ[ํŽธ์ง‘]

Smalltalk๋Š” ํ˜„์žฌ 3๊ฐ€์ง€ ๋ฒ„์ „ ์ •๋„๊ฐ€ ์ตœ์‹ ์œผ๋กœ ์œ ์ง€๋˜๊ณ  ์žˆ๋‹ค.
  1. ์•จ๋Ÿฐ์ผ€์ด์—๊ฒŒ์„œ ์‹œ์ž‘๋œ squeak ์˜ business ์šฉ ๋ฒ„์ „์ธ pharo. 2019๋…„ 1์›” ํ˜„์žฌ 7.0๊นŒ์ง€ ์ถœ์‹œ๋˜์—ˆ๋‹ค.
  2. Cincom ์—์„œ ๋งŒ๋“ค์–ด์ง€๊ณ ์žˆ๋Š” Visual Smalltalk ๊ณผ Object Studio.
  3. GNU ์žฌ๋‹จ์˜ ์ผ๋ถ€๋กœ ์œ ์ง€๋˜๊ณ  ์žˆ๋Š” GNU Smalltalk.

Pharo ๋Š” morphic ์ด๋ผ๋Š” ๊ทธ๋ž˜ํ”ฝ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ์„ฑ๋˜์–ด์žˆ์œผ๋ฉฐ jit ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” CogVM ๊ธฐ๋ฐ˜์—์„œ ์œ ์ง€๋˜๊ณ  ์žˆ๋‹ค. ์ตœ๊ทผ์—๋Š” nativeboost ๋“ฑ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ณด๋‹ค ๋น ๋ฅธ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์„ ๊ฒฝ์ฃผํ•˜๋Š” ์ค‘์ด๋‹ค.

Cincom ์˜ Visual Smalltalk ์€ ์œ ์„œ๊นŠ์€ ์‹œ์Šคํ…œ์œผ๋กœ์„œ ํ˜„์žฌ๋„ windows ํ™˜๊ฒฝ์—์„œ .net ์šฉ ์ปค๋„ฅํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋“ฑ ์ตœ์‹ ์˜ ํ™˜๊ฒฝ์„ ์ œ๋Œ€๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ๋Š” ์ค‘์ด๋‹ค. ๋˜ํ•œ Visual Smalltalk ์€ Windows, Linux, Mac os X, Solaris ๋“ฑ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ multi platform system ์œผ๋กœ์„œ MVC ์˜ ๊ฐœ๋…์„ ์ถฉ์‹คํ•˜๊ฒŒ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š” ์‹œ์Šคํ…œ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

GNU smalltalk ์€ linux ์ƒ์—์„œ ์ž‘๋™ํ•˜๋Š” smalltalk ์‹œ์Šคํ…œ์œผ๋กœ์„œ ์ดˆ๊ธฐ์—๋Š” blox ๋กœ ๋Œ€ํ‘œ๋˜๋Š” tk ๊ธฐ๋ฐ˜์˜ GUI ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋ฉฐ XIM ๋“ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š์•„ ํ•œ๊ตญ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํฌ๊ฒŒ ์“ธ๋ชจ๋Š” ์—†์—ˆ์ง€๋งŒ ๋ช‡๋…„์ „๋ถ€ํ„ฐ gtk+2 ๋ฅผ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์œผ๋กœ GUI ์˜ ๊ธฐ๋ฐ˜์„ ์˜ฎ๊ฒจ์„œ ํ˜„์žฌ๋Š” ํ•œ๊ธ€์„ ๋ฌด๋ฆฌ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GUI ์‹œ์Šคํ…œ์ด ๋˜์–ด์žˆ๋‹ค. ๋˜ํ•œ gnu smalltalk ์€ ๋‹ค๋ฅธ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ python ๊ณผ ๊ฐ™์€ interpreter mode ๋ฅผ ์ง€์›ํ•จ์œผ๋กœ์„œ ์†Œ์Šค์ฝ”๋“œ์˜ ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น… ๋ฐ rails ๊ฐ™์€ ๊ฐœ๋ฐœ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

์ด์™ธ์— Amber Smalltalk์ฒ˜๋Ÿผ web browser ์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” smalltalk ์‹œ์Šคํ…œ๋„ ์žˆ์œผ๋ฉฐ F-Script์ฒ˜๋Ÿผ cocoa Framework(libFoundation)์„ smalltalk ์Šคํƒ€์ผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ๋„ ์žˆ์œผ๋‹ˆ ์ฃฝ์–ด๋ฒ„๋ฆฐ ์‹œ์Šคํ…œ์ด๋ผ ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ  ์ฐพ์•„๋ณด๋ฉด ๋ถ„๋ช… ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž๋ฃŒ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ ์™ธ์— ์œ ๋Ÿฝ์—์„œ๋Š” ์ •๊ธฐ์ ์œผ๋กœ ESUG ๊ฐ™์€ ๊ณณ์—์„œ ํ•ด๋งˆ๋‹ค ์ปจํผ๋Ÿฐ์Šค๋ฅผ ๊ฐœ์ตœ์ค‘์ด๋‹ˆ ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์ข€ ๋” ์ฐพ์•„๋ณด๊ธฐ๋กœ ํ•˜์ž.

ํ•œ๊ตญ์—์„œ๋Š” ๋ฏธ์•ฝํ•˜์ง€๋งŒ ํ•œ๊ตญ ์Šค๋ชฐํ† ํฌ ์‚ฌ์šฉ์ž๊ทธ๋ฃน์„ ์œ ์ง€์ค‘์ด๋‹ˆ ํ•ด๋‹น๋˜๋Š” ์‚ฌ์ดํŠธ์—์„œ ์ •๋ณด๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ตฌ๊ธ€ ๊ทธ๋ฃน์ค‘์— smalltalk-kr ๊ทธ๋ฃน๋„ ์žˆ์œผ๋‹ˆ ํ•„์š”ํ•œ ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ๊ฐ„๋‹จํ•œ ์ˆ˜์ค€์˜ ์งˆ๋ฌธ์€ ๊ฐ€๋Šฅํ•˜๊ธฐ๋„ ํ•˜๋‹ค. ๋„ค์ด๋ฒ„์—๋Š” Smalltalk ์˜ ๊ฐ์ฒด๋งˆ์„์ด๋ผ๋Š” ์นดํŽ˜๊ฐ€ ์žˆ์ง€๋งŒ ์ •๋ณด๊ฐ€ update ๋˜์ง€ ์•Š์€์ง€ ํ•œ์ฐธ๋˜์—ˆ์œผ๋‹ˆ ์ฃผ์˜ํ•˜์ž. ๋‹ค๋งŒ ์ง€๊ธˆ์€ ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š” dolphin smalltalk ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ•˜๋ คํ•œ๋‹ค๋ฉด ์ด๊ณณ์˜ ์ž๋ฃŒ๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

3. ์ฐธ์กฐ๋„์„œ[ํŽธ์ง‘]

  • Squeak By Exmaple : Squeak ์— ๋Œ€ํ•œ ์ž…๋ฌธ์„œ. ์ตœ์‹ ๋ฒ„์ „์œผ๋กœ๋Š” Pharo By Example ์ด ์žˆ๋‹ค.
  • Deep into Pharo : Pharo system ์— ๋Œ€ํ•ด์„œ ๋ณด๋‹ค ์‹ฌ๋„์žˆ๋Š” ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค.
  • Smalltalk Objects and Design : Smalltalk ์—์„œ Object ์™€ ์ „์ฒด ์‹œ์Šคํ…œ์ด ์–ด๋–ค ๊ฐœ๋…์œผ๋กœ ์„ค๋ช…๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.
  • Smalltalk Best Practice Patterns : Smalltalk ์˜ ํ•˜๋ถ€ ์‹œ์Šคํ…œ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ๋“ค์„ ํŒจํ„ด์œผ๋กœ ์„ค๋ช…ํ•ด๋†“์•˜๋‹ค
  • The Design Patterns Smalltalk Companion: ๋””์ž์ธ ํŒจํ„ด. GoF์˜ ๋””์ž์ธ ํŒจํ„ด๊ณผ ํ•„์ž๊ฐ€ ๊ฒน์น˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ๋‚ด์šฉ๋„ ์ฐธ๊ณ ํ• ๋งŒํ•œ ๋ถ€๋ถ„์ด ๋งŽ๋‹ค. Smalltalk ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด ํ›„๋ฐ˜๋ถ€์— ํ•„ํžˆ ๋ด์•ผํ•˜๋Š”์ฑ…
  • Computer Programming with GNU Smalltalk: ๋ฆฌ๋ˆ…์Šค์˜ Console ์„ ์ข‹์•„ํ•˜๊ณ  gnu smalltalk ์œผ๋กœ ์ž…๋ฌธ์„ ์‹œ์ž‘ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ถ”์ฒœํ•œ๋‹ค.
  • SMALLTALK-80/The Language and It's Implementation :: Smalltalk-80 ์–ธ์–ด์˜ ์‚ฌ์–‘์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€.. Smalltalk ์˜ ์„ค๊ณ„์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ณด๋‹ค ์‹ฌ๋„์žˆ๊ฒŒ ์•Œ๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ฝ์–ด๋ณผ๊ฒƒ์„ ๊ถŒํ•œ๋‹ค.

[1] ๋‹จ, Simula๋ผ๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ „์šฉ ์–ธ์–ด๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ œ์‹œํ•˜๊ธฐ๋Š” ํ–ˆ๋‹ค.