기계와의 대화, 프로그래밍 언어와 발전 과정 no.28

프로그래밍 언어를 얘기하기 전에, 우리가 알고 있는 인간이 사용하는 언어의 탄생에 대해서는 여러 이론이 있을 것입니다. 아마도, 사회적 인간으로써 필요 때문이었을 것이고 또, 개인적 인간으로써 필요였을 것입니다. 다른 말로 하면, 사회적 소통으로 대화가 필요했을 것이고, 개인적 인간의 감정을 표현하기 위해 필요했을 것입니다. 그리고, 이러한 것들을 기록하기 위한 문자의 발명과 함께 발달하게 되었을 것입니다.

인간의 언어와 프로그래밍 언어


기계 언어

컴퓨터, 이 계산할 줄 아는 기계가 이해할 수 있는 문자라고는 0과 1만 이해할 수 있습니다. 아니 사람보다 계산 능력이 더 출중한 이 기계는 왜 이해할 수 있는 문자가 고작 0과 1뿐일까요? 그 답은 너무나 당연하게도 전기로 동작하는 기계이기 때문이죠. 즉, 전기가 ON일 때와 OFF 일 때인거죠. 아니 전기가 ON일때는 켜지는거고 OFF일때는 꺼진는건데 전기가 꺼지면 컴퓨터가 꺼지는거 아닙니까? 라고 하신다면 컴퓨터의 구조에 대해 백과사전 정도는 읽어 보시고 오시기를 추천드립니다.

각설하고, 다시 돌아와서 기계 언어는 컴퓨터 하드웨어와 직접적으로 소통하기 위해 설계된 언어라고 할 수 있습니다. 그리고 이러한 언어(또는 문자)는 순전히 0과 1로만 구성되어 있습니다. 예를 들어 1940년대 초기 컴퓨터인 에니악(ENIAC)은 매우 원시적인 형태의 기계 언어를 사용했습니다.

컴퓨터 기술이 발전함에 따라서 기계 언어도 더욱 복잡하고 다양한 기능이 추가되어 여러가지 역할을 할 수 있도록 발전하였습니다. 컴퓨터의 발전에 따라 기계언어 역시 점점 복잡해지게 되어 사람이 이해하고 사용하기에 매우 어렵고 힘든 상황이 되어 가고 있었습니다. 때문에 사람에게는 이해하기 쉽고 작성하기 쉬우며 컴퓨터에게는 여전히 기계언어로 인식될 수 있는 새로운 언어 체계가 필요했습니다. 때문에 프로그래밍 언어라는 새로운 언어 체계가 개발되었습니다.

프로그래밍 언어

프로그래밍 언어는 크게 두 가지 유형으로 저급 프로그래밍 언어와 고급 프로그래밍 언어로 나뉩니다. 저급 언어로는 ‘어셈블리’라는 언어가 있고 고급 언어로는 ‘포트란(FORTRAN)’, ‘베이직(BASIC)’, ‘C’, ‘C++’, ‘자바(JAVA)’, ‘파이썬’ 등이 있으며, 기술의 발전에 따라 시대적인 배경이나 특정한 기술적인 요구 상황에 따라 새로운 고급언어들이 개발되어 나타나고 있습니다.

어셈블리 언어

이 언어는 기계언어의 명령어를 사람이 읽고 이해하기 쉽도록 기호화한 언어 체계로 낮은 수준의 프로그래밍 언어입니다. ‘낮다’ 표현이 수준이 낮거나 하는 것을 말하려는게 아니라 ‘사람보다는 조금 더 기계와 친화적인’ 또는, ‘기계의 언어에 가까운’의 뜻으로 이해하시면 됩니다. 예를 들어, 이 언어는 기계언어의 이진코드(0과 1) 대신 ‘ADD’나 ‘SUB’같은 명령어를 사용합니다. 어셈블리 언어는 기계언어보다는 조금 추상적이지만, 여전히 하드웨어와 매우 밀접한 관련을 가지고 있습니다. 때문에 어셈블리 언어는 특정 하드웨어에 특화되어 있어서 각각의 하드웨어 마다 어셈블리 언어를 새롭게 작성해야만 하는 어려움이 있습니다.

고급 프로그래밍 언어

이들은 사람이 이해하고 사용하기 휠씬 쉬운 언어입니다. 고급 언어로 작성된 코드는 컴퓨터가 직접 이해할 수 없으므로, 이를 기계가 이해할 수 있는 형태로 변환하는 과정이 필요합니다. 1950년대 이후 포트란, 베이직을 시작으로 다양한 고급 언어들이 등장하고 있습니다.

저급 언어와 고급 언어의 가장 큰 차이점은 기계언어로 바로 변환이 되는지 여부에 차이가 있습니다. 즉, 고급 언어는 기계언어로 변환하기 위해서는 번역자 또는 통역자를 거쳐야만합니다. 이러한 통번역자에는 컴파일러 또는 인터프리터라 불리는 기계언어 변환 프로그램이 있습니다.

  • 컴파일러 : ‘C’언어와 같은 경우 기계언어로 변환하기 위해서는 컴파일러라는 특별한 프로그램을 사용해야만 합니다. 때문에 C언어같은 류의 언어를 컴파일 언어라고도 부릅니다. 이 컴파일 언어들은 프로그램 코드를 다 작성하고 나서 한꺼번에 컴파일러 프로그램으로 번역되어야 합니다. 따라서, 수정이 필요할 경우 수정 후 전체 코드를 다시 컴파일러 프로그램으로 번역해야만 합니다. 한 줄 또는 한 단어만 수정해도 이 과정을 반복해야만 합니다. 이에 따라 컴파일러를 사용하면 일반적으로는 실행 속도가 빠릅니다. 그 이유는 모든 코드들을 미리 기계언어로 번역해 놨기 때문에 기계가 바로 이해하여 수행할 수 있기 때문입니다.

※ 코드(code) : 프로그래밍 언어로 작성된 문서

  • 인터프리터 : 자바나 파이썬과 같은 언어들은 언터프리터 언어라고도 합니다. 이들은 컴파일러처럼 인터프리터라는 특별한 프로그램을 사용하여 기계 언어로 번역됩니다. 컴파일러의 경우는 전체 코드들을 한번에 번역해야만 하지만, 인터프리터는 코드를 한 줄씩 읽어가며 즉시 기계언어로 번역하고 실행합니다. 때문에 이러한 인터프리터 언어는 코드 수정이 쉽고 빠르며 개발 완성도를 높이기에 용이하며 다양한 운영 체제에서 쉽게 실행 할 수 있습니다.

결론적으로, 기계언어는 컴퓨터 과학의 발전과 더불어 진화해 왔으며, 이는 프로그래밍의 복잡성을 줄이고, 더 효율적이고 강력한 컴퓨팅을 가능하게 했습니다. 오늘날 컴퓨터 시스템은 여전히 기계언어를 사용하지만, 개발자들은 훨씬 직관적이고 고급 기능을 갖춘 프로그래밍 언어를 사용하여 이러한 기계어 코드를 작성합니다. 현대의 프로그래밍 언어들은 더욱 사용자 친화적이고 강력한 기능을 갖추고 있습니다. 이러한 고급 언어들은 계속 발전하고 있으며, 다양한 용도로 사용되고 있습니다.

답글 남기기