명령형과 함수형

변수와 대입문 없이도 프로그램을 짤 수 있을까?

화면을 누르면 다음 장으로 넘어갑니다

익숙한 방식

지금까지는 변수 칸을 바꿔 가며 계산했습니다

변수에 값을 넣는 문장이 대입문입니다. 줄이 실행될 때마다 칸 t의 값이 12, 17, 34로 바뀝니다. 이렇게 변수와 대입문으로 짜는 언어가 명령형 언어(imperative language)입니다.

예시 코드입니다. C, 파이썬, Java가 모두 이런 식으로 씁니다.

왜 이런 모양일까

명령형 언어는 컴퓨터 구조를 본떴습니다

1강에서 본 폰 노이만 구조(von Neumann architecture)는 메모리에 든 값을 CPU(계산하는 장치)가 가져와 계산하고, 결과를 다시 메모리에 넣는 구조입니다. 명령형 언어는 이 구조를 그대로 반영했습니다. 그 기계에서 빨리 도는 것이 중요했기 때문에, 가장 큰 관심사는 효율입니다.

칸의 값 17과 34는 앞 장의 예를 이은 것입니다.

다른 방식

같은 계산을 식 하나로 적으면

오른쪽에는 변수 칸이 없습니다. 식의 안쪽부터 값으로 바뀌어 가다가 답 34만 남습니다. 함수형 언어(functional language)는 이렇게 식을 평가해서, 곧 식의 값을 구해서 계산합니다.

두 쪽 모두 예시입니다. 답은 같고 가는 길이 다릅니다.

두 갈래의 바탕

기계에서 출발했나, 수학에서 출발했나

함수형 언어는 수학적 함수(mathematical function)를 바탕으로 설계됐습니다. 이론적 토대가 탄탄하고 쓰는 사람에게 더 친숙하지만, 프로그램을 실행하는 기계의 구조와는 비교적 무관합니다.

이번 강의

함수형 언어 다섯을 차례로 봅니다

2편에서 수학적 함수가 무엇인지 먼저 보고, 언어를 하나씩 봅니다. 9편에서는 명령형 언어에 들어온 함수형 기능을 보고 두 갈래를 견줍니다.

방언은 한 언어에서 갈라져 나온 변종입니다.

다음 편

먼저, 수학의 함수가 프로그램의 함수와 어떻게 다른지 봅니다

2편같은 함수를 두 번 부르면 답도 같을까? 14강 목록