본문 바로가기
IT

프로그래밍 언어의 실행, 프로그램 설계 등

by EDMBLACKBOX 2021. 1. 23.
728x90

간단한 프로그램을 개발할 때는 사전 분석 없이 바로 코딩에 들어가기도 하지만, 복잡하고 규모가 큰 프로그램을 개발할 때는 사용자의 요구 사항을 분석하고 설계부터 시작해야 합니다.

사용자의 필요를 파악하고 프로그램을 통해 해결할 문제가 무엇인지 확인하는 단계입니다. 이 단계에서는 프로그램의 출력물이 어떤 내용을 포함하고, 이를 위해 입력할 내용은 무엇인지, 폼은 어떻게 구성해야 하는지를 설계합니다. 또한 사용자와 시스템의 인터페이스 방식은 어떻게 할지, 데이터 구조 및 처리 절차에 대한 기본 틀을 어떻게 할지 등 분석하고 대략적인 설계도 합니다. 이 과정이 끝나면 프로그램 설계 단계에 들어갑니다.

 

프로그램 설계

실제 코딩을 시작할 때 사용할 논리를 프로그래머가 대략 그려내는 단계를 보통 알고리즘 설계라고 부릅니다. 알고리즘의 사전적 의미는 반복 동작을 포함하여 정해진 단계 내에서 형식적이고 수학적으로 표현된 문제를 푸는 절차를 뜻합니다. 즉, 어떠한 결과가 나오도록 차례를 설계하는 것을 알고리즘 설계라고 합니다.

알고리즘은 아래와 같이 5가지 주요 특성이 있습니다.
1. 알고리즘의 단계들은 반드시 유한한 횟수를 거친 후에 종료해야 합니다.
2. 알고리즘의 각 단계는 명확하게 정의되어야 합니다.
3. 알고리즘은 0 또는 그 이상의 입력을 가집니다. 여기서 입력은 알고리즘이 시작되기 전에 알고리즘에 주어진, 또는 알고리즘 수행 중에 동적으로 주어진 수량을 말합니다.
4. 알고리즘은 하나 이상의 출력을 가집니다.
5. 알고리즘은 효과적이어야 합니다. 이는 알고리즘의 모든 연산들이 종이와 연필을 이용해 유한한 시간 내에 정확히 수행할 수 있을 정도로 단순해야 함을 의미합니다.

위의 내용을 정리하면 알고리즘은 항상 어떠한 결과(답)가 나오도록 만들어진 단계의 모임입니다. 중요한 것은 인간의 뇌 속에 지식으로 가지고 있는 '문제 푸는 방법'을 어떻게 문자나 기호 등으로 시각적으로 표현하느냐입니다.

알고리즘으로 문제 푸는 방법을 쉽게 표현하기 위해 보통 순서도나 의사 코드를 사용합니다. 순서도는 제어 흐름을 그림으로 표현한 것이고, 의사 코드는 프로그램과 비슷한 문자로 표현한 것입니다. 두 방법 모두 프로그램 실행에 대한 명확한 문법 구조가 아닌 프로그램 전체 구조와 제어 흐름만 나타냅니다.

순서도나 의사 코드로 표현되는 프로그램 제어 흐름 유형에는 순차 구조, 선택 구조, 반복 구조가 있습니다.

좌측부터 선택 구조, 반복 구조, 순차 구조, 출처 : Net-Informations

선택 구조(Selection Structure) : 일명 조건문(Conditional Statement)이라고도 합니다. 프로그램 다음에 무엇을 해야 하는지를 결정하는 분기 구조입니다. 보통 if-then문, case문, else 또는 else if문을 가지는 if-then문을 사용합니다.

반복 구조(Iteration Structure) : 루프 구조라고도 하는데, 조건이 만족하지 않을 때까지 계속 반복합니다. 프로그래밍 언어마다 루프를 표현하는 방법이 있으며 보통 for문, while문, do-while문을 공통으로 사용합니다.

순차 구조(Sequence Structure) : 프로그램 코드 순서대로 실행합니다.

 

for문 : for문은 어떤 과정을 특정 횟수만큼 반복합니다. 만약 조건식이 참이면 문장을 실행한 뒤 증가 연산을 하고 다시 조건식을 검사합니다. 그리고 조건식이 거짓이면 문장을 실행하지 않고 for문을 종료합니다. 아래는 for문의 순서도와 명령 형태입니다.

for문 순서도와 명령 형태, 출처 : cs.uic.edu

 

while문 : while문에서는 조건식의 만족 여부를 먼저 확인합니다. 만약 조건식이 참이면 문장을 실행하고 거짓이면 while문을 종료합니다. 즉 while문은 조건식이 거짓이 되지 않는 한 계속 실행됩니다. while문의 순서도와 명령 형태는 아래와 같습니다.

while문 순서도와 명령 형태, 출처 : cs.uic.edu

 

do-while문 : do-while문은 조건식을 먼저 검사하는 while문과 달리, 일단 문장을 한 번 실행한 후 조건식의 만족 여부를 확인합니다. 만약 조건식이 참이면 문장을 실행하고 거짓이면 do-while 문을 종료합니다. do-while문의 순서도와 명령 형태는 아래와 같습니다.

do-While문의 순서도와 명령 형태, 출처 : cs.uic.edu

 

코딩 및 컴파일

프로그래밍 언어로 프로그램을 작성하는 것을 코딩(Coding)이라고 하는 것은 모두 아실 겁니다. 코딩을 할 때는 개발할 프로그램의 특성에 맞는 프로그래밍 언어를 선택하여 작성해야 합니다. 그리고 코딩이 끝나면 고급 언어로 작성된 명령문을 기계어로 바꾸는 컴파일(Compile) 단계에 들어갑니다. 컴파일은 프로그래밍 언어의 성격에 따라 컴파일러(Compiler)를 이용한 방식과 인터프리터(Interpreter)를 이용한 방식, 그리고 두 방식을 혼합한 하이브리드(Hybrid) 방식이 있습니다.

 

컴파일러를 이용한 방식

프로그램 전체를 한 번에 기계어로 번역하는 방식입니다. C언어를 비롯하여 COBOL, FORTRAN, PASCAL 등의 언어에서 사용됩니다. 컴파일러는 고급 언어로 작성한 원시 코드를 기계어인 목적 코드로 번역합니다. 목적 코드는 로더에 의해 메모리에 로드된 후 실행(Execution)하여 결과 값을 얻습니다.

컴파일러는 한 번 목적 코드로 번역하고 나면 실행할 때마다 번역할 필요가 없으므로 프로그램 전체의 실행 시간을 줄일 수 있습니다. 하지만 몇 줄의 원시 코드가 수정되어도 프로그램 전체를 번역해야 하는 단점이 있습니다.

[원시 코드(고급언어) -> 컴파일러 -> 목적 코드(기계어) -> 로더 -> 메모리에 목적 코드 로드 -> 실행 -> 결과 값]

 

인터프리터를 이용한 방식

프로그램을 한 행씩 읽어 번역과 실행을 동시에 하는 방식으로, BASIC 등의 언어에서 사용됩니다. 원시 코드가 수정될 때마다 프로그램 전체를 번역할 필요가 없으므로, 간단한 구조의 프로그램에 편리하나 반복문이나 계속 호출되는 서브 프로그램처럼 많은 횟수로 처리되는 프로그램의 경우 실행 시간이 길어져 비효율적입니다.

[원시 코드(고급 언어)와 입력 자료 -> 인터프리터 -> 결과 값]

 

하이브리드 방식

컴파일러와 인터프리터를 함께 이용하는 방식으로 Lisp, Snobol4, APL, Prolog, JAVA 등의 언어에서 사용됩니다. 이 방식은 컴파일러가 원시 코드를 목적 코드로 번역하는 것이 아니라 적당한 중간 코드로 번역합니다. 중간 코드는 인터프리터에 의해 입력 자료와 함께 실행됩니다.

[원시 코드(고급 언어) -> 컴파일러(적당한 번역) -> 중간 코드(중간 언어)와 입력 자료 -> 인터프리터 -> 결과 값]

728x90