프로그램의 개념과 컴파일이해하기!
● 프로그램
컴퓨터를 움직이게 하려면 명령을 내려야 합니다. 프로그래밍 언어는 인간이 컴퓨터와 의사소통할 수 있도록 컴퓨터에 내리는 명령으로서 프로그램을 처리하도록 기술한 언어를 말합니다. 프로그램을 짜는 이유는 다음과 같습니다. 프로그램을 작성함으로써 '주어진 문제를 보다 쉽고, 빠르게 해결하기 위해서 처리하는 명령어의 묶음을 컴퓨터에게 제시할 수 있습니다.' 프로그램은 인스트럭션(Instruction)이라는 흔히 말하는 명령어로 쓰여져 있으며, 컴퓨터는 이러한 명령어를 논리적 순서에 따라 수행합니다. 이러한 명령어는 2진수 형태의 기계어로 쓰여있기 때문에 인간이 이해하기 힘듭니다. 이 문제를 해결하기 위해서 인간도 쓰기 쉽고 컴퓨터도 기계어로 해석할 수 있는 프로그래밍 언어(Programming Language)를 개발하여 사용하게 된 것입니다.
▶ 저급 언어
저급 언어란 컴퓨터 내부 표현에 가까운 언어로 기계어와 어셈블리어로 나눌 수 있습니다. 기계어는 0과 1로 작성하는 언어이고, 어셈블리어는 기계어를 인간이 이해하기 쉽도록 기호로 표현하여 작성한 언어를 말합니다. 먼저 기계어는 0과 1로 된 2진수 형태의 언어로서 컴퓨터끼리도 잘 호환되지 않아 실제로는 별로 사용되지 않는 언어입니다. 그리고 어셈블리어는 기계어 명령을 알기 쉬운 기호로 표시하기 때문에 기계어는 물론 사용하고자 하는 컴퓨터 내부 구성과도 관계가 깊습니다. 예를 들어 ADD A라는 어셈블리어 코드는 메모리 A번지에 있는 내용을 누산기(AC)와 더해 다시 누산기(AC)에 저장하라는 의미로서 기계어로 표현하면 약 16bit의 명령어로 표현이 가능합니다.
▶ 고급 언어
사용자의 요구 수준이 높아지고 컴퓨터 기술이 발달하면서 새롭게 다양한 고급 언어가 개발되었습니다. 고급 언어는 하드웨어의 기술적 요구를 구체적으로 몰라도 쉽게 작성하고 수정할 수 있는 언어를 의미합니다. 고급 언어는 일상 언어에서 사용하는 표현을 그대로 사용할 수 있게 해줍니다. 예를 들어 +는 덧셈, -는 뺄셈으로 사용하는 등 일반적으로 사용하는 단어나 표현을 그대로 사용합니다. 기계어나 어셈블리어를 쓰려면 기억장치에서 데이터를 읽거나 쓸 때 기억 장소의 주소를 정확히 알아야 합니다. 이에 비해서 고급 언어는 번지 대신 변수 이름으로 기억 장소에 접근하므로 사용자가 기억 장소의 주소를 일일히 기억할 필요도 없습니다. 또한 명령어 하나로 다수의 동작을 지시합니다. 예를 들어 A = B + C X D는 C와 D를 먼저 곱하고 그 결과를 B와 더해 X에 대입하라는 뜻을 가지고 있습니다. 이처럼 하나의 명령어를 이용해 다수의 연산을 실행하도록 해줍니다.
다음 그림은 고급 언어로 작성한 프로그램을 실행하는 과정입니다. 프로그래머는 먼저 고급 언어와 같은 프로그래밍 언어를 이용해 원시 코드를 작성합니다. 그 다음으로는 번역기(컴파일러)가 원시 코드를 목적 코드로 변환합니다. 여기서 목적 코드는 기계어로 된 프로그램으로 컴퓨터가 바로 실행할 수 있는 상태의 프로그램 코드를 의미합니다. 목적 코드는 메모리로 옮겨져 실행되고 결과물을 계산해 냅니다.
▶ 컴파일
프로그래밍 언어로 프로그램을 작성하는 것을 코딩(Coding)이라고 말합니다. 코딩을 할 때는 개발할 프로그램의 특성에 맞는 프로그래밍 언어를 선택하여 작성해야 합니다. 코딩이 끝나면 고급 언어로 작성된 명령문을 기계어로 바꾸는 컴파일 단계에 들어갑니다. 컴파일은 프로그래밍 언어의 성격에 따라 컴파일러를 이용한 방식과 인터프리터를 이용한 방식으로 나누어집니다. 두 방식을 혼합한 하이브리드 방식 또한 존재합니다.
- 컴파일러를 이용한 방식
프로그램 전체를 한 번에 기계어로 번역하는 방식으로 C언어를 비롯한 다양한 언어에서 사용되고 있습니다. 다음 그림은 컴파일러를 이용한 방식으로 프로그램을 실행하는 과정입니다. 컴파일러는 고급 언어로 작성한 원시 코드를 기계어인 목적 코드로 번역합니다. 목적 코드는 로더에 의해 메모리로 옮겨져 실행되어 결과 값을 출력합니다. 컴파일러는 한 번 목적 코드로 번역하고 나면 실행할 때마다 번역할 필요가 없으므로 프로그램 전체의 실행 시간을 줄일 수 있습니다. 하지만 원시 코드의 일부만 수정되어도 프로그램 전체를 다시 번역해야 하므로 번거로울 수 있습니다.
- 인터프리터를 이용한 방식
프로그램을 한 행씩 읽어 번역과 실행을 동시에 하는 방식으로 HTML 등에서 활용됩니다. 원시 코드가 수정될 때마다 프로그램 전체를 번역할 필요가 없으므로 간단한 구조의 프로그램은 편리하나 반복문이나 계속 호출되는 서브 프로그램처럼 많은 횟수로 처리되는 프로그램은 실행 시간이 길어져 비효율적입니다. 다음 그림은 인터프리터를 이용한 방식으로 프로그램을 실행하는 과정을 보여주고 있습니다.
'컴퓨터 기초' 카테고리의 다른 글
컴퓨터의 기억장치란? (1) | 2016.06.12 |
---|---|
중앙처리장치(CPU)의 작동 원리를 알아보자! (0) | 2016.06.11 |
컴퓨터의 구조를 설명해줄게! (1) | 2016.06.08 |
부동 소수점 방식이란? (2) | 2016.06.06 |
1의 보수와 2의 보수를 이해하자! (11) | 2016.06.06 |