하스켈 언어 소개

여기서 제공되는 강좌는 기본적으로 프로그래밍 경험이 전혀 없는 이들을 대상으로 한다. 사실 프로그래밍 경험이 전혀 없는 이들이 보다 쉽게 하스켈 프로그래밍에 적응할 수 있을 것이다. 이유는 하스켈, ML, 오캐믈(OCaml) 등 함수형 프로그래밍언어는 전혀 모르면서 C, 자바, 파이썬 등 명령형 프로그래밍 언어에 조금이라도 익숙한 이들은 특성이 전혀 다른 프로그래밍 방식에 많이 놀랄 수 있기 때문이다. 하스켈의 특성을 설명하면서 종종 C, 자바, 파이썬 등 명령형 프로그래밍언어의 특성과 비교하기는 하지만 참고일 뿐이지 전체 내용의 이해를 위해 반드시 필요하지는 않다.

하스켈은 순수 함수형(purely functional) 프로그래밍언어이며, C, 자바, 파이썬 등의 명령형 프로그래밍언어와 매우 다른 특성을 갖는다. 정리하면 다음과 같다.

명령형 프로그래밍 언어의 특징

  • 명령문을 이용하여 컴퓨터가 수행해야 할 일을 전달함.
    • 명령문: 특정 연산 실행 또는 컴퓨터의 (메모리)상태 변경을 담음
  • 프로그램: 연속적으로 수행되어야 할 명령문들의 모음집
    • 연산과 (메모리)상태 변경의 효율적인 수행을 위한 제어 흐름(control flow) 구조를 갖추어야 함.

하스켈 함수형 프로그래밍 언어의 특징

  • 컴퓨터가 수행할 명령이 아닌 다룰 대상과 개념, 그리고 특정 함수의 기능을 정의함.
    • 함수의 기능: 데이터 생성 및 변환
  • 참조 투명성(referential transparency)
    • 하스켈의 모든 함수는 부수효과(side-effect)가 없음.
    • 동일한 인자와 함께 호출될 경우 항상 동일한 값을 반환함.
    • 메모리에 저장된 값을 가리키는 변수를 사용하지 않기 때문에 가능함.
  • 프로그램: 데이터 변환을 연속적으로 수행하도록 구성된 함수들의 시리즈
  • 지연 계산(lazy evaluation): 함수의 정의 및 호출 과정에서 특정 값이 실제로 요구될 때까지 값의 계산이 지연됨.
  • 유형 추론(type inference) 지원
    • 하스켈은 정적 유형(statically typed) 언어임.
      • 사용되는 모든 값의 유형이 미리 정해져 있어야 함을 의미함.
      • C, 자바 등도 정적 유형 언어임.
    • 반면에 사용되는 값의 유형을 기본적으로 유추할 수 있음.
      • 즉, 매번 사용되는 값의 유형을 명시할 필요 없음. 이를 유형 추론 이라 함.
      • 하지만 유형 추론이 완벽하지는 않음. 즉, 직접 유형을 지정해야 하는 경우도 발생함.