프로그램이란?
컴퓨터가 어떠한 작업을 자동으로 처리할 수 있도록, 처리방법 및 순서를 컴퓨터 언어 형태로 기술해 놓은 것을 뜻한다.
-> 논리적, 산술적 연산만이 가능한 컴퓨터 하드웨어는 프로그램에서 지시한 일련의 명령들을 순차적으로 수행함으로써 복잡한 작업을 처리하게 됨
-> 비상상황에서 사용되는 '대응절차'와 유사함
-> 컴퓨터는 특정작업을 처리하기 위해 프로그램에 기술된 명령어를 차례대로 이행하게 된다.
컴퓨터의 프로그램은 누구에 의해, 어떤 과정을 거쳐 제작되는가?
- 프로그램은 컴퓨터 전문가인 프로그래머에 의해 제작된다.
+) 프로그래머?
컴퓨터 전문지식을 바타응로 사용자가 컴퓨터를 편리하게 이용할 수 있는 프로그램을 구현하는 직업
단순히 데이터 결과만을 고려하는 것이 아니라 처리과정의 효율성을 위해 알고리즘이라는 개념을 사용한다.
(1) 알고리즘
페르시아의 수학자인 알-콰리즈미(al-khwarizmi)의 이름에서 유래된 용어로, 문제를 풀기 위한 단계별 절차를 수학적으로 기술한 것을 뜻하는 말이다.
우리가 앞서 다루었던 프로그램은 알고리즘이라는 수학적 개념을 컴퓨터가 이해할 수 있는 형태로 구현한 것이다.
즉, 알고리즘은 프로그램의 수학적 모형이라고 할 수 있다.
이러한 알고리즘은 밑의 조건을 만족하는 단계별 절차로 구성된다.
- 입력 : 알고리즘은 외부에서 0개 이상의 데이터를 입력받는다.
- 출력 : 알고리즘은 외부에 하나 이상의 결과를 출력한다.
- 명확성 : 각 수행 단계는 명확해야 하며, 모호하게 해석될 여지가 없어야 한다.
- 유한성 : 알고리즘은 유한 번의 단계를 수행하고 종료되어야 한다.
- 효율성 : 각 수행 단계는 사칙연산과 같이, 간단명료한 연산으로 구성되어야 한다.
(2) 알고리즘의 표현
알고리즘은 순서도나 의사코드(pseudo-code)형태로 표현된다.
순서도는 알고리즘의 각 단계를 도형 내부에 표현한 후, 도형 간의 순서를 명시하는 방식으로 기술된다.
순서도나 의사코드를 이용하면 알고리즘을 간단명료하게 표현하는 것이 가능하다. 그러나 순서도나 의사코드를 만들었다고 해서, 프로그래밍 작업이 모두 완료된 것은 아니다.
2진 명령만 받아들일 수 있는 컴퓨터의 경우, 순서도나 의사코드를 실행시킬 수 없기 때문이다.
완전한 프로그램을 제작하기 위해서는 문제를 해결하는 알고리즘 개발뿐만 아니라, 해당 알고리즘을 프로그래밍 언어 형태로 번역하는 작업이 필요하다.
(3) 프로그래밍 언어/(programming language)
프로그래머가 알고리즘을 구현하여 프로그램 작성 시, 특정 문법을 갖는 명령어 체계를 사용하는데, 이것을 프로그래밍 언어라고 한다.
프로그램은 어떠한 목적을 수행하는 프로그래밍 언어의 집합이라고 할 수 있고, 프로그래밍 언어를 사용해 프로그램을 제작하는 과정을 프로그래밍이라고 한다.
초기의 프로그래밍 언어는 기계가 곧바로 해석할 수 있는 0과 1만으로 이루어졌다.
이러한 언어들을 기계어(machine language)라고 한다.
기계어로 작성된 프로그램은 가독성이 매우 떨어지며, 프로그래밍 과정에서 많은 실수를 유발한다는 단점이 있다.
기계어의 가독성을 높이고자 각각의 명령과 일대일로 대응되는 영단어를 사용하는 언어가 개발되었는데, 이를 어셈블리어(assembly language)라고 한다.
어셈블리어는 'push, mov, and'와 같은 영단어를 이용하여 기계어를 표현함으로써, 기계어보다 향상된 가독성을 제공한다.
그러나 컴퓨터 하드웨어 전문가가 아닌 이상 사용하기 힘든 언어이고, 기계어에 비해 가독성이 조금 높을 뿐, 언어 자체의 구조는 기본적으로 기계어와 다르지 않다.
이후 개발된 프로그래밍 언어들은 어셈블리어보다 더 추상화되어, 우리가 사용하는 자연어에 가까운 형태로 제공되었다.
이러한 언어들을 '고급언어(high-level language)'라고 부르며, 기계어와 어셈블리어는 '저급언어(low-level language)'라고 부른다.
대다수의 프로그래머들은 C, C++, Java와 같은 고급언어를 이용하여 프로그램을 만든다.
고급언어를 이용하면 프로그램 제작시간을 단축시킬 수 있으며, 특정기계어 형태에 종속적이지 않아 범용적인 환경에서 실행될 수 있는 프로그램을 만들 수 있다.
- 프로그램의 실행
고급 프로그래밍 언어로 작성된 소스 코드(source code)는 기계어나 어셈블리어가 아니기 때문에, 컴퓨터에 의해 곧바로 실행될 수 없다.
이를 실행하기 위해서는 번역 프로그램을 이용하여 소스 코드를 컴퓨터가 이해할 수 있는 저급언어 형태로 바꿔야한다.
-> 소스 코드를 저급언어로 번역해주는 프로그램 : 컴파일러(compiler), 인터프리터(interpreter)
-> 컴파일러와 인터프리터는 소스 코드를 저급언어로 번역하는것은 같지만, 구동방식은 다르다.
컴파일러(compiler) | 인터프리터(interpreter) |
소스코드를 모두 읽어들인 후, 한꺼번에 저급언어로 번역하여 실행 파일을 생성 | 소스 코드를 한 줄 한 줄 읽어들여 차례대로 번역 및 실행 실행 파일이 생성되지는 않음 |
빠른실행이 가능하다. | 소스 코드를 한 줄씩 읽어 번역 및 실행하므로 소스코드의 크기에 영향을 덜 받는다. |
소스 코드의 크기가 방대하면, 실행 파일을 생성하는 과정에서 많은 시간이 소요된다. | 컴파일러 방식보다 실행 속도가 느리다. |
고급언어를 컴파일러 방식으로 번역할 것인가, 인터프리터 방식으로 번역할 것인가는 언어를 설계하는 시점에서 결정된다. 하지만 어떤 언어들은 이 두 가지 방식이 모두 가능한 형태로 설계되기도 한다.