ComputerProgrammingwithGNUSmalltalk:2.3
첫 프로그램
이제는 첫 번째 프로그램을 두 가지 방법으로 작성해보도록 합시다. 먼저 작성하기 전에, 프로그래밍 환경이 설치되었는지 확인해야 할 것입니다. 만약 설치하지 않았다면, 부록 A의 내용을 읽고 지금 당장 설치하십시오.
첫 프로그램은 컴퓨터가 터미널 (윈도우즈에서의 용어로는 커맨드 프롬프트, cmd) 에 문자를 출력하도록 만들 것입니다. 이제 여러분의 터미널을 열어서 다음과 같이 입력하십시오.
gst
st>
GNU 스몰토크 인터프리터를 실행하면, 인터프리터가 실행할 명령을 기다리고 있습니다. 이 상태를 인터렉티브 모드interactive mode(상호작용 모드) 라고 합니다. 이제 프로그래밍할 준비가 되었습니다. 아래의 코드를 입력하고 <Enter> 키를 입력하십시오.
(역주 : 아래 코드 중에 printNl의 Nl은 대문자 N과 소문자 L입니다. Newline을 의미합니다.)
'Hello World!' printNl
'Hello World!'
오래된 버전의 GNU 스몰토크를 사용한다면, 다음과 같이 코드의 끝에 느낌표 부호를 붙여줘야 합니다.
'Hello World!' printNl!.
출력에서도 보셨다시피, 컴퓨터는 문자열 'Hello World!'를 (프로그래밍 용어에서는 표준 출력standard output이라 불리는) 터미널에 두 번 출력하였습니다. 이제 이 코드에 대해 설명하고, 왜 컴퓨터가 두 번이나 출력했는지 알아보도록 하겠습니다.
설명했다시피, 스몰토크에서 모든 것은 객체입니다. 그리고 객체에 메시지를 전달하고, 각각의 객체에서 응답을 받는 것으로 대화가 이루어집니다. 위의 코드에서는 문자열 객체와 메시지가 있었습니다. 문자열 객체는 작은 따옴표로 문자들을 감싸서 만듭니다. 따라서 'Hello World!'는 문자열 객체입니다. 우리는 이 객체에게 스스로 터미널에 출력되기를 원합니다. 따라서 우리는 메시지를 전달해야 합니다. printNl은 이러한 목적의 메시지입니다. "print" 부분은 아실테고, "Nl"은 출력 후에 개행문자를 붙이라는 내용입니다.
내용을 이해하셨어도, 왜 한 번이 아닌 두 번 출력하였는가를 알아야 할 것입니다. 첫 번째 출력한 내용은 우리가 프로그래밍 했기 때문에 그러한 것이고, 두번째 출력한 내용은 인터렉티브 모드에서 ‘Hello World!’ 값에 대해 전체적으로 수식 표현을 확인하기 위한 것입니다. 보통 터미널 상에 마지막으로 수식 적용이 끝난 결과값을 출력합니다. 만약 바로 값을 썼다면, 그대로 출력될 것입니다. 왜냐하면 값 자체도 수식이기 때문에 항상 확인하는 차원에서 출력을 합니다. 명령어로 수를 입력하는 것도 시도해 볼 수 있습니다. 실제로 수 또한 객체이며, 명백히 그 자체의 값도 확인할 수 있습니다. 명령행에 3을 입력해보도록 합시다.
3
보셨습니까? 여러분이 제 말을 믿어주실 수 있길 바랍니다.
즉, 우린 이미 두 개의 컴퓨터 프로그램을 작성하였던 것입니다. 그러나 예전에 말하였듯이 프로그램을 작성하는 방법은 두 가지가 있다고 하였습니다. 그래서 이번엔 다른 방법을 시도하도록 하겠습니다. 이제 텍스트 파일에 프로그램을 기록하고, GNU 스몰토크 인터프리터가 텍스트 파일을 읽어서 프로그램을 실행하도록 해볼 것입니다. 그래서, 이번에는 인터렉티브 모드가 아닌 셈입니다. 여기서 텍스트 파일들을 소스코드source code라고 부릅니다. 이제 여러분이 좋아하는 텍스트 에디터를 열고, 다음 코드를 새 파일로 저장하시기 바랍니다.
"hello_world.st"
"A program to print 'Hello World!' to the terminal."
'Hello World!' printNl
이제 hello_world.st 로 파일을 저장하십시오. 이것은 프로그램의 소스코드입니다. 큰 따옴표 안의 내용은 주석 comment 입니다. 주석은 두 가지 목적이 있습니다. 하나는 소스코드를 읽는 사람들이 빠르게 이해할 수 있도록, 소스코드의 내용을 깔끔하게 만드는 것입니다. 따라서, 인터프리터는 주석을 생략합니다. 또 다른 목적은 문서화입니다. 어떨 때 주석이 되고 어떨 때 문서화가 되는지는 나중에 설명하겠습니다. 지금은 그냥 주석문으로 이해하시면 됩니다. 소스코드의 첫번째 줄은 권장파일명입니다. 따라서 여러분이 소스코드 파일이름을 뭘로 지을까 걱정하지 않으셔도 됩니다. (배려심 깊죠?) 두 번째 행의 내용은 이후 프로그램이 어떤 작업을 수행할지 설명한 부분입니다. 이 주석으로 프로그램이 어떤 일을 하는지 상기할 수 있습니다. 주석문은 부가적인 부분이라는 것을 알아 주십시오. 원하신다면 안 쓰셔도 상관 없습니다. 하지만 소스코드에 주석을 남기는 것이 좋은 습관이라는 것을 잊지 말아 주십시오. 왜냐하면 프로그램 작성 후에, 프로그램 제작자로서 몇 달 동안이나 유지보수할 경우에, 프로그램을 왜 그렇게 짰었는지 기억해내야 하는 어려움이 있을 수도 있습니다. 또한 큰 프로젝트에서 다른 사람들과 같이 코딩을 할 때가 있을 때에, 각자에게 소스코드의 내용을 쉽게 이해하기 위해서라도 주석이 필요합니다.
자, 인터프리터가 프로그램을 어떻게 수행할까요? 만약 GNU 스몰토크(GST) 프로그램이 아직 실행중이라면, 다른 말로 터미널에서 다음과 같이 표시되고 있다면
st>
리눅스 사용자는 <CTRL> + d를, 윈도우즈 사용자는 <CTRL> + z를 누른 다음 <Enter>키를 눌러서 프로그램을 종료합니다. 다시 GST 프로그램을 시작할 예정이지만, 이번엔 소스코드를 명령행의 인자로 주어 실행할 것입니다. hello_world.st 파일이 있는 디렉터리로 이동하여서, 다음 명령어를 입력하시기 바랍니다.
gst hello_world.st
소스코드에 작성한 코드를 수행한 후, GST 프로그램은 여러분을 텅 빈 터미널에 남겨두고 알아서 자동으로 종료할 것입니다. 알아두실 것은 이번엔 인터렉티브 모드에서 나왔기 때문에, 문자열이 한 번만 출력된다는 것입니다.
소스코드를 파일에 저장하는 데에는 많은 잇점이 있는데, 여러분이 원하는 만큼 실행할 수 있고, 놔뒀다가 다시 실행 할 수 있기 때문에, 프로그램을 모두 다시 타이핑 하지 않아도 된다는 것입니다. 그러나 짧은 작업이나 실험적인 코딩을 하기에는 명령행에 프로그램을 입력하는 것이 간단하기 때문에 배우는 동안 자주 사용할 것입니다.
다음 장에서는 객체, 메시지, 클래스의 개념을 설명할 것입니다.