Variable(변수)와 Function(함수)는 programming을 하는 사람이라면, 누구에게나 익숙한 개념이다.

 그렇지만, 조금 더 살펴보면 흥미로운 요소들을 많이 찾을 수 있다.


 먼저, Variable에 대해서 이야기해 보자.

 거의 모든 programming language에서, variable은 type과 name 두 가지로 구성된다.

 비록 Static/Dynamic typing, 혹은 Strong/Week typing 등의 차이는 있으나, 기본적으로 type과 name이 존재한다는 점에서는 차이가 없다.

 그럼, 혹시 "variable은 왜 필요하지?", "왜 거의 모든 programming language에서 변수는 type과 name으로 구성되어 있지?"등의 의문을 가져본 적이 있는가?

 이는 분명 한번 쯤은 생각해 볼 문제이다.


 사실 이런 의문들에 대한 대답은 programming 발전의 역사와 함께한다고 할 수 있다.

 따라서, 이런 부분에 대한 자세한 내용은 넘어가고, 간략하게, "왜 type과 name"으로 나뉘어지는 지를 고민해보는 것으로 대체하기로 하자.

 

이런저런 자세한 내용은 차치하고, 기본적으로 Programming이란 MCU(혹은 CPU)가 메모리에서 data를 읽어서 그것으로 연산을 수행하고 다시 그 결과를 메모리에 저장하는 일련의 과정이다. 이때 메모리에서 데이타를 읽고 그것을 가공하기 위해서는, 두 가지가 필수적으로 필요하다. "어디서 data를 읽고, 그 data가 어떻게 해석되어야 할 것인가?"가 그것이고, 그것이 바로, "메모리 주소" 와 "메모리 data type"이다.

그 결과, "메모리 주소 = Symbol Address"이고, "data type = Symbol Type"으로 해석되는 것이다.
 또한, 변수, 함수 모두 memory address의 alias 역할을 하는 symbol + memory data의 해석 방법을 알려주는 type, 두 가지로 이루어져 있다는 측면에서 보면 근본적으로 같은 개념이다. 단, variable은 data이고, function은 execution code라는 측면이 다를 뿐인데, 특정언어 - ex. LISP(data와 code가 구분되지 않는다.) - 에서는 이것 마저도 구분하지 않는 경우도 있다.

 즉, 함수라는 것 역시 일련의 데이터를 execution code로 해석하는 것! 그 이상도 그 이하도 아니다 (일반적인 Programming lanuage에서는 함수의 type이란, 함수의 signature로 표현된다.)

 

요점은 다음과 같다.

오늘날 사용되는 거의 모든 programming이 CPU, memory구조를 가지는 (넓은 의미의)폰-노이만(Von-Neumann)방식에 근간을 둔 하드웨어 구조위에서 이루어지고 있다. 그리고, 이를 전제한 programming language는 memory address의 alias인 'symbol'과 memory data의 해석 방식인 'type' 두 가지에 기반한 형태로 자연스럽게 발전하게 되었다...라는 개인적인 의견을 피력해본다. ^_^


+ Recent posts