하스켈 문자열 출력

어떤 언어를 배우건 간에

문자열을 콘솔에 출력하는

것 부터 시작합니다.

 

이는 C언어의 창시자 데리스 리치가

70년대에 작성한 C언어 교본에서

"Hello World" 를 콘솔에 출력하는

것에서 유래한 전통입니다.

 

이는 아주 좋은 관습으로

프로그래머는 자신이 작성한

프로그램이 제대로 동작하고 있는지

콘솔에 계속적으로 출력함으로써

코드를 완성해 나갑니다.

 

IDE 등 도구의 발달과 함께

점점 프로그래밍이 쉬워지는

추세이긴 하지만 단 한개의

오타도 허용하지 않는

컴퓨터이기 때문에

중간중간에 콘솔에 내용을

출력하면서 확인이 필요합니다.

 

따지고 보면 디버거는

오류의 내용을 좀 더

자세히 콘솔에 출력하는

도구이고 사람이 결과값을

확인한다는 부분에서는

프로그래밍에 입문하여

처음 배우는 콘솔 출력과

다를 바가 없습니다.

 

뭐냐면 문자열을 출력하는 것이

중요하다는 말입니다.

 

사람마다 다르지만 코드를

한줄씩 쓰면서 확인하는 경우도

많기 때문에 문자열은 어떤

언어를 배우더라도 완전히

자기것으로 만들어야 합니다.

 

C언어의 printf 파이썬 print

자바의 System.out.println,

JS의 Console.log 라던가

여튼 모든 언어에는

문자열을 다루는 클래스나

함수가 다 있습니다.

 

종류도 엄청 다양하죠.

 

그들이 궁극적으로 하는 것은

뭐냐? 똑같습니다.

표준 출력(콘솔)으로 문자열을

출력하는 일입니다.

 

대부분 C언어 계열의 문법의

변형이 많은데 하스켈도

나름의 특성이 있습니다.

 

Hello Haskell 문자 출력

 

소스코드 에디터를 열고

아래와 같이 코드를 입력한 후에

hello.hs 로 저장합니다.

 

main = do
    putStrLn "Hello Haskell!"

 

ghci 를 실행하여 hello 모듈을 로드합니다.

:l <파일명> 명령어를 사용합니다.

:load hello 를 해도 동일합니다.

:load -> :l 로 축약한 명령어입니다.

 

그 다음에 main 으로 실행시킵니다.

 

ghci> :l hello
[1 of 1] Compiling Main             ( hello.hs, interpreted )
Ok, one module loaded.
ghci> main
Hello Haskell!

 

여기서 사용한 함수는

putStrLn (문자열) 로 출력합니다.

문자열을 따로 변수로 만들어서

대체하면 아래와 같습니다.

 

main 모듈 do 블록안에서

변수를 사용하려면 let 키워드를

넣어야 컴파일이 됩니다.

main = do
    
    let hello = "Hello Haskell!"
    putStrLn hello

 

소스코드의 내용이 바뀌면

:load 명령어로 컴파일을

다시 해야 합니다.

 

같은 모듈을 로드하는 것이라면

:r 키워드를 사용해서 리로드

할 수 있습니다.

 

ghci> :r
Ok, one module loaded.
ghci> :reload
Ok, one module loaded.

 

다음은 문자열을 분리해서

연결하는 방법입니다.

출력결과는 같습니다.

 

main = do
    let str1 = "Hello"
    let str2 = "Haskell!"
    putStrLn (str1 ++ " " ++ str2)

 

숫자의 출력

putStrLn 은 그 이름 처럼

put String Line - 문자열 출력 후 라인변경

하는 기능의 함수입니다.

여기에 숫자 타입은 출력이 안됩니다.

 

그러면 숫자 타입을 문자열로

변경해서 사용하면 됩니다.

 

숫자를 문자열로 변경하면

연결하는 연산자 ++ 도

사용할 수 있습니다.

 

putStrLn안에 show 함수를

사용해서 문제를 해결합니다.

 

print 함수를 사용하는 방법도

있는데 숫자만 출력이 됩니다.

 

main = do

    let myNum = 7200
    putStrLn (show 100)
    putStrLn ("Hello World! " ++ show 123)
    putStrLn ("My Number : " ++ show myNum)
    print 7289

 

결과는 아래와 같습니다.

이렇게 하면 숫자와 문자열을

함께 출력해줄 수 있습니다.

 

ghci> main
100
Hello World! 123
My Number : 7200
7289

 

함수밖에서 변수 설정

함수밖에서 변수를 설정하면

함수안에서 사용할 수 있습니다.

 

하스켈은 변수의 타입을

추정하기 때문에 동적 타이핑처럼

보이지만 정적 언어입니다.

 

정적 언어란 컴파일 시간에

변수의 타입이 확정되는 언어를

의미합니다.

 

웬만한 변수는 추정이 가능하지만

혹시 모를 가능성을 방지하기 위해

변수의 타입을 명시해주는 것이 좋습니다.

 

C언어 계열이라면 char myChar = 'A'

와 같이 선언했을 텐데 여기서는

myChar :: Char 처럼 타입을 지정하고

있습니다.

 

문자열 출력에 대해서는 위에서

설명한 것 처럼 putStrLn을 적절히

사용해서 콘솔에 출력할

수 있습니다.

 

숫자형은 print 를 사용하면 됩니다.

 

-- 문자열
myName :: String
myName = "Pascal"

-- 문자형
myChar :: Char
myChar = 'A'

-- Int 형
myInt :: Int
myInt = 98

myMain = do
    putStrLn ("My name is " ++ myName)
    putStrLn (show myChar ++ " is Char type")
    print myInt
ghci> myMain 
My name is Pascal
'A' is Char type
98

 

하스켈 주석

하스켈의 주석은 -- 를 사용합니다.

 

여러줄 주석은 {- -} 을 사용합니다.

 

예시는 다음과 같습니다.

 

-- 주석 {- 주석 -}
{-
    여러줄 주석
    {- 주석 -}
-}

 

요약

하스켈 콘솔 출력의 기초와

주석에 대해서 알아봤습니다.

 

하스켈을 처음 언어로 배우는 것도

아주 어렵지는 않습니다만

역시 다른 언어를 어느정도

학습한 후에 시작하는게

좀더 훨씬 수월하지 않을까

생각이 듭니다.

 

프로그래밍 언어는 이론적인 부분보다

실제로 코드를 작성을 해야지

배울 수 있는 부분이 많습니다.

 

뭐랄까 뇌를 활성화 시킨다고 할까요?

 

아무리 좋은 교재도 본인이

느끼지 못하면 소용이 없습니다.

좋은 교재로 추천하는 것들은

대부분 본인이 그 각 챕터의

주제를 탐구하면서 최대한

많은 것을 느낄 수 있도록

가이드 해주는 것들이지요.

 

애초에 프로그래밍 언어라는 것은

응용 프로그램(Application)을 만드는

목적으로 설계되었기 때문에

프로그래밍을 아무리 열심히 해도

배울 수 있는 것에는 한계가 있습니다.

 

결국 공학적 깊이를 더하기 위해서는

시스템 프로그래밍 수준을 초월하는

단계로 나아가야 합니다.

 

C언어 계열로 시작해서

파이썬과 JS 등 잡다하게 배우다 보면

어느 순간에는 지루하게 됩니다.

 

하스켈은 어떤 면에서 프로그래밍의

새로운 면을 발견하게 해주고

끓임없이 지루한 프로그래밍을

지속할 수 있게 해주는

동기를 주는 것 같습니다.

 

다음 포스팅에서도 당분간

하스켈 기초를 더 다루어 보겠습니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band