[Concepts] 프로그래밍 언어의 실행 과정[Concepts] 프로그래밍 언어의 실행 과정

Posted at 2019. 7. 2. 21:49 | Posted in Computer Concepts
반응형




출처 : IT CookBook, 컴퓨터 사이언스






■ 사용자 요구사항 분석과 프로그램 설계




간단한 프로글매이면 분석 없이 바로 코딩을 하기도 하지만, 복잡하거나 규모가 큰 프로그램을 개발할 때는 사용자의 요구사항을 분석한 후 설계한다.




#01. 사용자 요구사항 분석


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





#02. 프로그램 설계


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



알고리즘은 다음과 같은 다섯 가지 주요한 특성이 있다.







※ 알고리즘의 5가지 특성



① 알고리즘 명령을 수행하면 유한한 횟수를 거친 후 종료해야 한다.


② 알고리즘의 각 단계와 명령은 명확하게 정의되어야 한다.


③ 알고리즘은 데이터 입력이 0 또는 그 이상이어야 한다.

    여기서 입력은 알고리즘이 시작되기 전에 알고리즘에 주어진 또는 알고리즘 수행 중에 동작으로 주어진 수량을 말한다.


④ 알고리즘은 한가지 이상의 결과를 출력한다.


⑤ 알고리즘은 효과적이어야 한다.
    이는 알고리즘의 모든 연산이 종이와 연필을 이용해 유한한 시간 내에 정확히 수행할 수 있을 정도로 단순해야 함을 의미한다.







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



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


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




※ 프로그램 제어 어 흐름의 유형







:: 순차 구조 ::

:: 선택 구조 ::

:: 반복 구조 ::





◎ 순차 구조 ( Sequence Structure )


순차 구조는 프로그램 코드를 순서대로 실행한다.



◎ 선택 구조 ( Selection Stucture )


선택 구조는 프로그램이 다음에 무엇을 해야 할지 결정하는 분기 구조이다.

조건문(Conditional Stucture)으로 부르기도 한다.

보통 if - then문, case 문, else 또는 else if 문을 포함한 if - then 문을 사용한다.



◎ 반복 구조 ( Repetition Stucture )


반복 구조는 조건이 만족되지 않을 때까지 계속 반복한다.

루프 구조(loop structure)로 부르기도 한다.

프로그래밍 언어마다 반복 구조를 표현하는 방법이 있는데,

for 문, while 문, do - while 문 을 공통으로 사용한다.





① for 문






 어떤 과정을 특정 횟수만큼 반복한다. 조건식이 참이면 문장을 실행한 뒤 증가 연산을 하고 다시 조건식을 검사한다.

 조건식이 거짓이면 문장을 실행하지 않고 for문을 종료한다.



② while 문





 조건식을 만족하는지 여부를 확인한다.

 조건식이 참이면 문장을 실행하고 거짓이면 while 문을 종료한다.

 즉 while 문은 조건식이 거짓이 되지 않는 한 계속 실행된다.





③ do - while 문




 조건식을 먼저 검사하는 while 문과 달리 일단 문장을 한 번 실행 한 후 조건식이 만족하는지 여부를 확인한다.

 조건식이 참이면 문장을 실행하고 거짓이면 do - while 문을 종료한다.











■ 코딩 및 컴파일




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





#01. 컴파일러를 이용한 방식


프로그램 전체를 한 번에 기계어로 번역하는 방식을 C언어를 비롯하여 코볼, 포트란, 파스칼 등에서 사용된다. 다음 그림은 컴파일러를 이용한 방식으로 프로그램을 실행하는 과정이다. 컴파일러는 고급 언어로 작성된 원시 코드를 기계어인 목적 코드로 번역한다. 목적 코드는 로더에 의해 메모리에 옮겨져 실행(Execution)되어 결과 값을 출력한다.


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









#02. 인터프리터를 이용한 방식


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











#03. 하이브리드 방식



컴파일러 인터프리터를 함께 이용하는 방식으로 리스프(LISP), 스노볼4(SNOBOL4), API, 프롤로그(Prolog), 자바(JAVA)등에서 사용된다. 이 방식은 컴파일러가 원시 코드를 목적 코드로 번역하는 것이 아니라 적당한 중간 코드로 번역한다. 중간 코드는 인터프리에 의해 입력 자료와 함께 실행된다.
















반응형
//