본문 바로가기

프로그래밍

[Erlang 일기] Erlang에서의 변수의 의미


Erlang에서의 변수는 기존의 프로그래밍에서의 Assignment가 아닌 Pattern matching의 개념을 쓰고 있다.

자, 쉬운 예를 들면

X = 1 + 3

위의 수식을 C로 해석하자면 '1과 3을 더하여 X변수에 저장한다.' 는 의미가 되겠다. 하지만 Erlang에서는 수학적 해석 그대로 '1과 3을 더한 것은 4와 같다.' 라고 해석할 수 있다.

이해가 잘 안가면 다음 수식을 보자.

X = X + 1

위의 수식은 C코드에서 'X에 1을 더하면 X에 저장한다.' 라고 해석될 것이다. 하지만 Erlang과 같은 함수형 언어에서는 위와 같은 수식이 성립할 수 없다. 어떻게 X와 X+1이 같을 수 있는가??

정리하자면, Erlang에서의 변수는 = 을 이용하여 값을 matching 시킨다고 할 수 있다. 책에서는 이 것을 Binding한다고 한다. 한번 Binding 된 변수는 다시 바꿀 수 없다. 마치, C에서의 Const 변수와도 같다.

예를 들면,

X = 3

X = 2

하면 에러가 난다. 위에서 한번 bind 해줬기 때문이다. 자, C코드와의 이 작은 개념의 차이가 얼마나 무시무시한 결과를 초래할지 생각해보자.

프로그램이 복잡해지면 우리는 디버거를 이용하여 디버깅을 하기에 바쁘다. 어떤 변수에 어떤 값이 들어가서 오류를 일으켰는지 찾아내기에 바쁘다는 것이다. 각 변수의 메모리는 공유될 수 있기 때문에 발생하는 일이다.

하지만 Erlang과 같이 변수의 상태가 절대 바뀌지 않는 코드에서는 이러한 문제가 일어날 일이 없다. 변수의 값은 오직 한 곳에서만 Binding 되기 때문에 코드상으로 어디가 잘못되었는지만을 체크하면 된다.

지금 설명한 것은 'Programming Erlang'이라는 책에 자세히 나와있다. 아직 초반이기 때문에, 책의 내용을 앵무새처럼 적어놓겠지만 나중에 복잡한 프로그램을 짜면서 지금 적은 내용들의 실제적인 사례를 적을 수 있도록 하겠다.