본문으로 이동

즐겁게 배우는 하스켈 튜토리얼/2 당신의 첫걸음

위키책, 위키책

하스켈을 배우는 여정을 간단한 프로그램으로 시작해 봅시다. 이 프로그램은 화면에 메시지를 출력할 것입니다.

처음은 단순하게 시작하는 것이 중요합니다. 작은 단계를 거쳐 나가면 좌절을 피할 수 있고, 학습의 즐거움도 커지기 때문입니다!

이번 강의에서는 매우 간단한 프로그램을 함께 살펴보고, 이를 분석하여 이해할 것입니다. 아직은 아래 문장이 무슨 뜻인지 모르겠지만, 강의가 끝날 때쯤이면 이해할 수 있을 것입니다. 우리의 첫 번째 프로그램은 main이라는 진입점을 정의하는 하나의 문장으로 구성되며, putStrLn이라는 내장 함수를 사용하고, String 타입의 값을 출력할 것입니다.

따라서 먼저 하스켈에서 값, 타입, 정의, 함수가 무엇을 의미하는지 설명한 뒤, 프로그램을 직접 보여주고 이를 하나씩 해석해 나갈 것입니다.

2.1 값

[+/-]

하스켈에서 값은 모든 데이터를 의미합니다. 예를 들어 "Step"이라는 단어도 하나의 값입니다.

모든 값에는 타입이 존재하며, 이는 해당 값이 어떤 종류의 데이터인지 하스켈과 우리에게 알려줍니다.("Step"의 타입은 String이다.)

2.2 타입

[+/-]

타입은 유사한 값들의 집합 또는 그룹을 나타내는 이름입니다.

예를 들어, 534와 같은 값을 표현하는 타입이 있으며, 이것을 Integer라고 합니다.

대부분의 경우, 프로그램에서 값의 타입을 명시적으로 작성하지 않아도 됩니다. 하스켈이 자동으로 타입을 추론해 주기 때문입니다. 하지만 원한다면 타입을 직접 명시할 수도 있습니다. 예를 들면 다음과 같습니다.

5  :: Integer
34 :: Integer

타입에 대해서는 앞으로 더 많이 배울 것이니 지금은 너무 걱정하지 않아도 됩니다.

하지만 흥미를 돋우기 위해 한 가지 알려주자면, 하스켈에서는 사용자 정의 타입을 만들 수도 있습니다. 그렇기 때문에 존재하는 모든 타입을 여기에서 나열하는 것은 불가능하지만, 대부분의 프로그램은 몇 가지 타입만으로도 충분히 작성할 수 있어 크게 부담을 가질 필요는 없습니다.

타입이 중요한 이유는 프로그램의 구성 요소들이 어떻게 맞춰질 수 있는지 결정하고, 어떤 값이 어디에 들어갈 수 있는지를 정의하기 때문입니다.

2.3 정의

[+/-]

= 기호를 사용하면 하스켈에게 어떤 이름을 표현식과 연결하도록 지시할 수 있습니다.

이름은 = 기호의 왼쪽에, 표현식은 오른쪽에 위치합니다.

표현식이란 간단히 말해, 여러 값을 서로 관계짓는 방식입니다.

즉, = 기호는 왼쪽의 이름(또는 패턴)과 오른쪽의 표현식을 연결(또는 바인딩)하는 역할을 합니다.

예를 들어,

five = 5

라고 하면, 하스켈은 five라는 이름이 5라는 값을 의미한다는 것을 기억하게 됩니다.

2.4 함수

[+/-]

함수는 한 타입에서 다른 타입으로의 관계를 나타내며, 값과 함께 표현식에서 사용됩니다. 하스켈에서 함수 자체도 하나의 값입니다. 어떤 함수에 입력값을 제공하면(즉, 함수를 값에 적용하면), 평가가 이루어진 후 해당 입력값에 대응하는 출력값을 반환합니다.

여기서 주의해야 할 점이 있습니다! 하스켈에서의 함수는 대부분의 프로그래밍 언어에서 말하는 “함수”와 개념이 다릅니다. 하스켈의 함수는 컴퓨터가 따라야 하는 명령어의 집합이 아닙니다.

이제 곧 우리가 작성할 첫 번째 프로그램에서 함수 적용(function application)의 예제를 살펴볼 것입니다. 계속 읽어 봅시다!

2.5 우리의 첫 번째 프로그램

[+/-]

여기, 우리가 처음으로 살펴볼 프로그램이 있습니다. 단 한 줄뿐입니다. 이 코드에서는 “main”이라는 이름을 가진 표현식이 정의되어 있습니다. 이 표현식에서는 함수가 값에 적용되고 있으며, 타입은 명시되지 않았습니다.

main = putStrLn "Polly wants a cracker"

이 프로그램을 실행하면 "Polly wants a cracker"라는 문장이 화면에 출력될 것입니다.

처음 보면 다소 헷갈릴 수도 있지만 걱정할 필요 없습니다. 이제 이 코드의 다섯 가지 요소를 나누어 설명해 보겠습니다.

2.5.1 정의

[+/-]

이 전체 줄을 정의라고 부릅니다. 이 줄은 다음과 같이 세 부분으로 구성됩니다.

  • 변수 또는 용어 이름
  • "=" 기호
  • 표현식

하스켈 프로그램은 정의와 표현식을 작성하고, 다른 정의와 표현식 안에 표현식을 포함시킴으로써 만들어집니다.

여기서 "=" 기호가 우리가 무언가를 설정하거나 다른 것에 무언가를 넣는다는 의미가 아니라는 점을 인식하는 것이 중요합니다. 우리는 단지 표현식에 이름을 붙이기 위해 이 기호를 사용할 뿐입니다. 이름은 그 값을 포함하지 않으므로, 프로그램의 다른 지점에서 동일한 이름을 다시 정의할 수 없으며, 한 번 정의된 이름의 내용이나 정의를 변경할 수도 없습니다.