Skip to main content

Command Palette

Search for a command to run...

How does a Code work?

Compile time vs Run time

Published
•3 min read•View as Markdown
How does a Code work?

When we run a code

우리가 일반적으로 코드를 작성하고 실행할 때, 우리는 특정 언어를 사용해 코드를 짜고 언어에 따라서 Compiling, Interpreting 과정을 거치고 Run을 하고 Debugging 까지 한다. 우리의 코드가 바로 실행된다고 생각을 한다면 이 모든 과정은 하나로 연결된다고 여길 수 있지만, 실제로는 그렇지 않다.

특히, Compile time과 Run time이라는 개념이 많이 나온다. 에러 메시지 중에서 이를 표시하기도 하고, 언어의 종류를 구분할 때 그 기준이 되기도 하고, Dynamic type, Static type과 같이 타개념을 설명할 때도 많이 사용된다. 이 글을 통해 Compile time과 Run time이 무엇인지 알고 궁극적으로 코드를 실행했을 때의 처리 과정을 익혀보자.

High-Level vs Low-Level Programming Language

시작하기에 앞서서 고급 프로그래밍 언어가 무엇인지를 알아야 컴파일링과 인터프레팅 과정을 이해할 수 있다. 우리가 작성한 코드는 특정 프로그래밍 언어로 되어있다. 이 프로그래밍 언어를 컴퓨터의 하드웨어가 바로 알아들을 수 있을까? C++, Python, JS와 같은 언어들은 그렇지 않다는 것을 알 것이다. 컴퓨터의 하드웨어는 0과 1로 이루어진 바이너리 신호들로 움직인다. 하드웨어가 소통하는 언어를 기계어라고 부른다. 기계어에 가까운 정도에 따라서 Low-level부터 High-Level 프로그래밍 언어라고 부르게 된다.

Low-Level Programming Language는 기계어에 굉장히 밀접한 프로그래밍 언어로 예시로 어셈블어와 C언어가 있다. (C언어는 고급프로그래밍으로도 분류되지만 저수준 프로그래밍도 가능하여 중간 수준으로 분류된다.) 저수준 프로그래밍의 특징은 하드웨어에 가까운 프로그래밍이 가능하다는 것이다. 정확히는 하드웨어의 구체적인 세부사항을 제어할 수 있다. 메모리 관리와 프로세서의 명령 실행과 같은 하드웨어와 직접적으로 상호 작용하는 기능을 포함한다.

High-Level Programming Language는 인간의 언어에 더 가깝다. 우리에게는 더 가독성이 좋고 편리한 언어이다. 주로 사용하는 C++, Python, JS와 같은 언어들이 이에 포함된다. 하지만, 고급프로그래밍 언어는 기계어와는 거리가 멀어 하드웨어가 이해할 수 없다. 이를 해결하기 위한 다리 역할이 Compiling과 interpreting이다.

When Computer run a code

고급프로그래밍 언어로 이루어진 코드를 실행할 때 컴퓨터가 어떤 과정을 거치는 보자.

2가지 방법이 존재한다. 첫 번째 방법은 Compiling을 하는 것이고, 두 번째 방법은 Interpreting을 하는 것이다. 두 방법은 어떤 언어를 쓰는지에 따라서 결정이 되는 것이다. 예를 들어 C++나 Java를 사용한다면 Compiling 과정을 거치고, Python 혹은 JS를 사용했다면 Interpreting 과정을 거친다.

Compiling route

Compile 과정을 거치는 언어를 사용한다면 일반적으로 다음 과정을 따른다.

  1. 코드 작성

  2. 컴파일링

  3. 링킹

  4. 실행

  5. 디버깅

Compile 과정에서 1에서 작성한 코드는 기계어로 바뀐다. Compile을 하기 위해서 Compiler라고 부르는 외부 프로그램을 사용해야 한다. 컴파일러는 소스 코드를 읽고, 오류를 검사하며, 실행 가능한 바이너리 파일(기계어 파일)을 생성한다. 이후에는 3번을 거쳐 4번 5번 순으로 진행이 된어 작성한 코드가 실행이 된다.

(참고로 3번 링킹은 컴파일된 코드가 외부 라이브러리나 다른 프로그램 모듈과 함께 동작해야 할 때, 이들을 연결하는 과정이다.)

Interpreting route

Interpret 과정을 거치는 언어는 주로 스크립트 언어와 일부 고수준 언어로 다음 과정을 따른다.

  1. 코드 작성

  2. 인터프레팅

인터프레팅 과정은 소스 코드를 한 줄 씩 읽고 해석하고 실행을 한다. 이는 코드의 마지막 줄에 도달할 때까지 반복되는데 덕분에 따로 컴파일러가 필요하지 않고, 디버깅이 쉽다는 장점이 있다. 소스 코드를 사전에 번역을 하는 Compiling과 달리 번역과 실행을 동시에 한다는 것이 가장 큰 차이점이다.

Compile time vs Run time

코드가 실행되는 과정을 알았으니 Compile time과 Run time이 무엇인지 이해할 수 있다.

Compile time은 소스 코드가 컴파일러에 의해 기계어로 번역되는 과정 및 시점을 말하고 코드가 실행되기 이전의 결정이 되어 있는 시점을 말한다.

Run time은 코드를 실행한 이후의 시점을 말하며 Compiling을 거치는 경우 번역된 파일을 실행한 이후의 시점, Interpreting을 거치는 경우 Interpret을 시작한 이후의 시점을 말한다.

More from this blog

'pip'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

What is pip? pip는 Pip Install Packages 의 약자로 간단하게 파이썬으로 작성된 라이브러리들을 관리한다. 패키지와 모듈을 관리하는 역할을 한다. 패키지는 모듈에 필요한 파일을 모아 놓은 것으로 모듈들은 Python 코드들의 라이브러리의 형태로 이루어져 있다. 일반적으로 Python 3.4 이상의 버전을 다운 받으면 일반적으로 pip가 포함되어있다. C:\User>pip --version 위의 코드는 정상적으로 pip...

Mar 18, 20253 min read5

JavaScript Coding - 2. Types-number

Types in JavaScript JavaScript는 Dynamic type 언어에 해당한다. 이는 간단하게 변수가 생성될 때 특정 Type을 가지는 것이 아니고 어떤 Type을 지정하냐에 따라 유동적으로 바뀔 수 있음을 뜻한다. Dynamic type에 대한 자세한 내용은 이 포스트를 확인하도록 하자. 또한 JavaScript 언어는 Weakly typed 언어로 Type 두개를 합칠 때 error를 내기보다는 type 변환을 자동으로 해...

Mar 18, 20253 min read7
P

pluto6561's CS blog

7 posts