Thursday, August 2, 2012

Hello World 프로그램(The hello world program)

종류를 막론하고 프로그래밍 서적에서 가장 먼저 볼 수 있는 프로그램은 hello world입니다.
아주 짧고도 간단한 프로그램으로 "hello world"를 출력하고는 종료합니다.
이 프로그램의 몇가지 핵심적인 특징들로부터  hello world 프로그램의 중요성을 알 수 있습니다.

hello world 를  살펴봅시다.
import std.stdio;

void main()
{
    writeln("Hello world!");
}
실행 가능한 프로그램을 만드려면 D 컴파일러로 컴파일을 해야 합니다.

컴파일러 설치하기

이 글을 쓸 당시에는 Digital Mars의 dmd, GCC의 gdc, 그리고 LLVM 를 위한 ldc 즉, 3가지의 D 컴파일러가 존재했습니다.

dmd는 수년간 D 언어를 개발하면서 가장 기본적으로 참조한 컴파일러 입니다. 이 책의 모든 예제들은 dmd로 컴파일 해서 테스트 했습니다. 때문에 dmd로 D언어 공부를 시작하고 필요한 경우 다른 컴파일러를 사용 해 보는것이 가장 쉬운 방법이 될겁니다.

최신 버전의 dmd는 Digital Mars 다운로드 페이지에서 찾을 수 있습니다. 사용하는 운영체제, 그리고 32비트, 혹은 64비트 등의 사용하는 CPU의 종류에 따라 자신에게 알맞는 컴파일러를 선택해야 합니다. D1 컴파일러는 설치하지 마세요. 이 책은 오로지 D2만을 다루고 있습니다.

소스 파일

D 컴파일러로 컴파일 하여 실행파일을 만들고자 할때 프로그래머가 제작하는 파일을 소스 파일이라고 부릅니다. D는 컴파일해야 제기능을 하는 프로그래밍 언어이기 때문에 컴파일러를 통해 꼭 파일을 실행 가능한 프로그램으로 변환해야 합니다.

당연히 소스 파일은 이름이 있어야 합니다. 파일 이름은 파일 운영체제가 지원하는 이름이라면 어떤 이름도 가능합니다만 일반적인 개발 환경과 프로그래밍의 관례상 확장자를 .d로 잡아 주는것이 일반적입니다. 예를 들면 test.d, game.d, invoice.d 등이 적절한 D 소스파일의 이름들입니다.

hello world 프로그램의 컴파일

위에 있는 hello world 프로그램의 코드를 파일이름 hello.d로 저장합니다. 컴파일 작업을 시작하면 컴파일러는 소스 파일이 문법적으로 문제가 없는지 확인 한 다음(즉 프로그래밍 언어의 규칙에 맞는지 확인 한 다음) 소스파일을 기계어로 변환하여 실행파일을 생성합니다. 코드파일을 컴파일 하려면 다음과 같은 절차를 따릅니다.
  1. 콘솔을 실행합니다.
  2. hello.d 가 저장되어 있는 폴더로 이동합니다.
  3. 다음의 명령어를 실행합니다.(이제부터 $ 문자는 콘솔에 입력할 명령어를 가리킵니다. 그러므로 콘솔에 입력할때는 $는 생략해야 합니다.)
$ dmd hello.d
만약 실수없이 코드파일을 작성하였다면 컴파일러는 군말없이 컴파일을 합니다. 컴파일에 성공하면 hello(윈도우즈에서는 hello.exe)라는 파일이 생성됩니다.

만약 컴파일러가 뭔가를 콘솔창에 출력한다면 코드파일 작성에 문제가 있는지 확인해야 합니다. 실수가 없는지 확인하고 수정한 후에 다시 컴파일을 해봅시다. 프로그래밍을 한다면 실수는 피해가기 어렵습니다. 시간이 지나면 오류를 찾고 컴파일을 반복하는 작업이 익숙해 집니다.

실행파일이 성공적으로 생성 되었다면 콘솔창에 실행파일 이름을 입력하여 실행 합니다. 다음과 같은 결과를 보게 된다면 성공입니다.
$ ./hello     ← 프로그램 실행
Hello world!  ← 결과
축하합니다! 첫 프로그램이 성공적으로 작동하였습니다.

컴파일러의 여러 스위치들

컴파일러에는 프로그램을 컴파일 하는 방법에 관한 여러 스위치를 가지고 있습니다.
이러한 스위치들을 확인하려면 다음과 같이 컴파일러의 이름만을 콘솔에 입력합니다.
$ dmd    ← 컴파일러 이름만 입력
DMD64 D Compiler v2.059
Copyright (c) 1999-2012 by Digital Mars written by Walter Bright
Documentation: http://www.dlang.org/index.html
Usage:
  dmd files.d ... { -switch }

  files.d        D source files
...
  -property      enforce property syntax
...
  -unittest      compile in unit tests
...
  -w             enable warnings
...
자주 쓰이는 스위치들만을 몇가지 골라봤습니다.  이번 챕터에서의 hello world 프로그램에는 영향을 주지는 않지만 다음과 같은 명령어를 통해 컴파일러 스위치를 적용 할 수 있습니다. 다른 스위치에 대해서는 다른 챕터에서 살펴보도록 하겠습니다.
$ dmd hello.d -w -unittest -property
컴파일러의 다른 스위치에 관한 정보는 DMD 컴파일러 문서에서 확인 할 수 있습니다.

통합 개발 환경(이하 IDE; Integrated Development Environment)

컴파일러를 포함하여 IDE를 설치하는 것 또한 좋은 방법이 될 수 있습니다. 코드를 작성하고 컴파일 하고 디버깅 하는 작업을 IDE를 사용하면 좀 더 쉽게 수행 할 수 있습니다.

IDE를 설치하면 프로그램을 컴파일하고 실행하는 작업이 버튼 하나로 이루어 질 만큼 간단해집니다. 그래도 콘솔에서 직접 손으로 컴파일러를 실행하는 작업에 익숙해 지도록 훈련하였으면 합니다.

IDE를 설치하고자 한다면 Wiki4D의 편집기 지원 페이지에서 추가 정보를 확인하세요.

hello world 프로그램 살펴보기

이번 프로그램에서 사용된 D 언어의 개념들을 정리하면 다음과 같습니다.

중심 규칙: 모든 프로그래밍 언어는 기본적으로 문법과 타입, 키워드, 규칙등을 정의하고 있습니다. 이러한 모든 내용들은 프로그래밍 언어의 주요 특징이 됩니다. 괄호나 세미콜론, main이나 void등과 같은 단어들 또한 모두 D언어의 규칙을 따르고 있습니다. 영어의 문법과도 비슷합니다:주어, 동사, 따옴표, 문장 구조 등등

키워드: 중심 규칙들 중 하나인 특별한 단어들을 의미합니다. 이 프로그램에서는 2개의 키워드가 있습니다: import, 특정 모듈을 불러올때 쓰는 키워드 입니다; void "아무것도 반환하지 않는다"는 의미입니다.  

라이브러리와 함수: 중심 규칙들은 언어의 구조만을 정의합니다. 함수와 사용자가 정의한 타입을 작성하는데 쓰이는데, 이렇게 사용자가 작성한 내용들은 라이브러리가 됩니다. 영어에 빗대어 본다면 영어에는 문법이 정의되어 있지만 화자가 무슨 대화를 해야 한다는 정의되어 있지는 않습니다. 과학 이야기, 스포츠 이야기 등등은 모드 영어의 문법을 따르고는 있지만 경우에 따라서 화자가 만들어 냈을 뿐 영어 문법이 대화를 만들어 내지는 않습니다. 프로그래밍 라이브러리도 이러한 측면에서 영어를 사용하는 화자의 대화 내용과도 비슷하다고 볼 수 있습니다. 
writeln: D언어의 기본 라이브러리에 내장된 함수 중 하나입니다. 이름 그대로 텍스트 한줄을 출력하는데 쓰입니다:write line - 줄을 쓰다

Module: 라이브러리들은 모듈의 형태로 D 프로그램에 제공됩니다. 이 프로그램에서 사용한 모듈은 std.stdio 하나로 D언어의 기본 입출력을 담당하는 모듈입니다.

문자와 문자열: "hello world!"와 같은 표현은 문자열이라고 불립니다. 그리고 문자열을 이루는 각 요소들을 문자라고 부릅니다. 이 프로그램의 유일한 문자열은 'H', 'e', '!' 등으로 이루어 져 있습니다.

연산 순서: 프로그램은 정해진 순서에 따라 연산을 수행합니다. 이러한 작업은 코드파일의 main이라는 이름의 함수에서 부터 시작됩니다. 이번 프로그램에서의 유일한 연산은 "Hello world!"를 출력하는것 하나입니다.

대문자와 소문자의 중요성: 문자열은 어떠한 문자로도 이루어 질 수 있지만 문자와 문자열을 제외한 나머지는 대소문자를 구분해야 합니다. D언어에서는 대문자와 소문자를 구분합니다. 예를 들어서 writelnWriteln은 다른 이름의 함수입니다.

D언에의 다른 특징들은 다음 챕터들에서 모두 다뤄 보도록 하겠습니다. 

연습문제

  1. 무엇이든 출력하는 프로그램을 만들어 봅시다.
  2. 한줄 뿐만 아니라 여러줄을 출력하는 프로그램을 만들어 봅시다.
  3. 완성된 코드에 몇가지 변형을 주고 컴파일을 해봅시다; writeln의 끝의 세미콜론을 지우고 컴파일을 할때 무슨 오류가 발생하는지 살펴봅시다.

No comments:

Post a Comment