์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
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์ ๊ฐ์ ๊ฐ๋ ฅํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์๋ ์์ฆ์ ์ ์ฐ์ด์ง๋ ์์ ๋ฟ๋๋ฌ, ์ด์ฐจํผ ๊ฐ๋ฐ ๋ชฉ์ ์์ฒด๊ฐ ์๋ก์ด ๊ฐ๋ ์ ์ ์ฉ์ด๋ผ๋ ์ฑ๊ฒฉ์ด ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ธ๊ตฌ๋ ๋งค์ฐ ์์์ ๋ถ๊ณผํ๋ค. ๊ทธ๋๋ ๋ถ๋ช ์ญ์ฌ์ ์๋ฏธ๊ฐ ์๋ ์ธ์ด์์ ํ๋ฆผ์์ผ๋ฉฐ, ํ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ง์ ์ํฅ์ ๋ผ์น ์ธ์ด์์ ํ์คํ๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP; Object-Oriented Programming)์ ๋น์์๋ ์์ ํ ์๋ก์ด, ํ๋ช ์ ์ธ ๊ฐ๋ ์ด์๋๋ฐ ์ฝ๊ฒ ๋งํด์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ด์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ ๊ฒ์ด๋ค. ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ ๋ฉ์ธ์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
Smalltalk๋ ์๋ฐ ์ผ์ด(Alan Kay)๋ฅผ ์์ํ PARC์ ์ฐ๊ตฌ์๋ค์ด OOP์ ๊ฐ๋ ์ ์ง์ํ๊ธฐ ์ํด, ์ฆ OOP๋ ์ด๊ฑฐ์ผ! ๋ผ๋ ์ํ์ ๋ง๋ค๊ธฐ ์ํด์ ๊ฐ๋ฐํ ์ฑ๊ฒฉ์ด ๊ฐํ๋ฉฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ง๋ค์ด์ง ๊ฒ์ด ํน์ง์ด๋ค. ๋ฐ๋ผ์ OOP๊ฐ ๊ฐ์ง๋ ๋๋ถ๋ถ์ ์ฅ์ ๊ณผ ๋จ์ ์ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ์๋๋ฐ, ๊ฐ๋ฐ์๊ฐ ๋จ์ถ, ์ข๋ ์ ํํ ์ฝ๋ฉ, ๋์ ๋ณด์ ์์คํ ๊ฐ์ ์ฅ์ ์ ์ง๋ ๋ฐ๋ฉด ์ค์ ์ธ๊ณ์ ๋ชจ์ต์ ๊ทธ๋๋ก ๋ฐ์ํ์ง ๋ชปํ๋ค๋ ๋นํ์ ๋ฐ๊ธฐ๋ ํ๋ค. Smalltalk์์๋ ์ ์ํ ๋ฑ์ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ ๋ชจ๋ ๊ฐ์ฒด์๋ ๋ฑ์ ๋ฌธ์ ๋ก ์ธํด Smalltalk๋ก ๋ง๋ ํ๋ก๊ทธ๋จ์ C๋ก ๋ง๋ ํ๋ก๊ทธ๋จ๋ณด๋ค 10๋ฐฐ ์ด์ ๋๋ฆฌ๋ค๋ ๊ฒ์ด ์ ํ์ด์๊ณ , Smalltalk์ ์์ฒด๊ฐ ํ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๊ธฐ๋ณด๋ค ์์คํ ์ ์ฒด๋ฅผ ํฌ๊ดํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ์ ๋ ์ธ์ด์ ํ์ฐ์ ์ ์ฝ์ด ๋์๋ค. ์ด ๋ถ๋ถ์ ํ์ฌ์ Java์ ๋น์ทํ ๊ฐ๋ ์ด๋ผ๊ณ ๋งํ ์๋ ์์ง๋ง, 70~80๋ ๋์ ์ปดํจํฐ ์ฑ๋ฅ์ ์๊ฐํ๋ฉด ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด ๊ฐ์๋จธ์ ์ ์ด์ฉํด์ผํ๋ค๋ ๊ฒ์ ๋ค์ ๋นํ์ค์ ์ธ ๊ฒ์ด์๋ค.
Java์ ๊ฐ์ ๊ฐ๋ ฅํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์๋ ์์ฆ์ ์ ์ฐ์ด์ง๋ ์์ ๋ฟ๋๋ฌ, ์ด์ฐจํผ ๊ฐ๋ฐ ๋ชฉ์ ์์ฒด๊ฐ ์๋ก์ด ๊ฐ๋ ์ ์ ์ฉ์ด๋ผ๋ ์ฑ๊ฒฉ์ด ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ธ๊ตฌ๋ ๋งค์ฐ ์์์ ๋ถ๊ณผํ๋ค. ๊ทธ๋๋ ๋ถ๋ช ์ญ์ฌ์ ์๋ฏธ๊ฐ ์๋ ์ธ์ด์์ ํ๋ฆผ์์ผ๋ฉฐ, ํ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ง์ ์ํฅ์ ๋ผ์น ์ธ์ด์์ ํ์คํ๋ค.
2. ํ์ฌ์ํฉ[ํธ์ง]
Smalltalk๋ ํ์ฌ 3๊ฐ์ง ๋ฒ์ ์ ๋๊ฐ ์ต์ ์ผ๋ก ์ ์ง๋๊ณ ์๋ค.
- ์จ๋ฐ์ผ์ด์๊ฒ์ ์์๋ squeak ์ business ์ฉ ๋ฒ์ ์ธ pharo. 2019๋ 1์ ํ์ฌ 7.0๊น์ง ์ถ์๋์๋ค.
- Cincom ์์ ๋ง๋ค์ด์ง๊ณ ์๋ Visual Smalltalk ๊ณผ Object Studio.
- 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๋ผ๋ ์๋ฎฌ๋ ์ด์
์ ์ฉ ์ธ์ด๊ฐ ๊ฐ์ฒด์งํฅ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
์ ์ ์ํ๊ธฐ๋ ํ๋ค.