얼마전 썼던 포스트에서 함수형 프로그래밍에 대한 내용이 살짝 나오는데 거기서 함수형 프로그래밍에서의 assignment에 대해서 살짝 얘기를 했었다. 아래 링크에 가면 예전에 썼던 내용이 있다.
https://spongeb0b.tistory.com/277
예전에 이해했던 내용이 살짝 명확하지 않았는데 얼마전에 더 나은 설명을 접할 수 있게 되어서 정리하게 되었다.
함수형 프로그래밍에서의 변수의 의미에 대해서 조금 더 자세히 알게 된 내용은 다음과 같다.
내가 알던 변수의 의미와는 사뭇 다른 개념이었다. 우리는 혹 변수를 얘기할적에 변수이름, 타입, 주소, 바인딩을 말하게 되는데 이중에서 바인딩을 말할적에 정적 바인딩, 동적바인딩을 말하곤 한다. 하지만 함수형 프로그래밍에서의 변수에서는 이런 바인딩자체가 존재할 수 없다. 왜냐면 우리가 알던 변수의 의미가 아니기 때문이다. 즉 기존의 변수처럼 어떤 값을 저장하는 box와 같은 개념이 아니라 순수하게 identifier로써의 기능만 하는 것이라고 볼 수 있겠다. 즉 box가 아니라 이름표라고 보면 된다. <var> = <expression>에서 이때 <expression>의 결과로 나온 것에 이름을 붙이는 것이다. 그러니 당연히 연산과정에서의 최종 결과물에 이름을 붙이는 것이기에 imperative 랭귀지들에서 하는 방식처럼 중간 과정을 메모리에 썼다 다시 가져왔다가 하는 불필요한 과정이 필요없다는 것이다. 여기서의 성능적 이득을 이끌어낼 수 있다는 소리였다. 폰노이만 아키텍처의 작동방식으로 인한 어쩔수 없는 기존의 방식에서 발생하는 오버헤드를 어느정도 줄일 수 있다는 소리다.
굉장히 흥미로운 개념이라고 생각한다. 언어 차원에서의 개선이 폰노이만 아키텍쳐에서의 성능 개선을 이뤄낼 수 있다는 개념 자체가 굉장히 놀랍다.
'Functional Programming' 카테고리의 다른 글
[FP] SICP를 위한 scheme language 세팅 방법 (0) | 2023.12.22 |
---|---|
[Functional Programming ] Functional programming 계산 모델 (0) | 2021.11.26 |