Compile이란 무엇일까

elecbug·2024년 6월 22일
post-thumbnail

Hello, world!

보통 처음 프로그래밍을 배울 때, 가장 먼저 만들게 되는 프로그램은 출력 창에 "Hello, world!"라는 문장을 출력하는 프로그램이죠?

최근에 새로 개발을 접하는 많은 분들은 Python으로 첫 프로그래밍을 시작하고 있지만, 예전에는 그만큼 많은 분들이 C로 프로그래밍을 시작했었는데요.

일단은 Python은 잠시 미뤄두고, C의 관점에서 한번 살펴보도록 해요.

대부분 C로 프로그래밍을 처음 배울 때는
1. Windows에서
2. Visual Stduio로
첫 프로그램을 만들어 실행하게 됩니다.

두 가정 모두 실제로 C를 쓸 일이 생긴다면 거의 사용되지 않는 환경인데요. 게다가 사실 경력있는 개발자도 살면서 C를 실제로 사용하는 경험은 거의 없다고 합니다.

어쨋든, 저런 환경을 사용하여 프로그래밍하는 가장 큰 이유는 친숙함과 편안함 때문이겠죠. 익숙한 Windows에서, 버튼 하나만 누르면 실행되는 Visual Studio까지, 좋죠. 좋은데, 그런데 정작 그 Visual Studio 때문에 많은 분들이 Compile의 개념을 놓치고 있더라구요.

Compile? 그거 실행 아니냐?

아닙니다.

대학을 다니는 동안, 후배들을 가르칠 기회가 몇번 정도 있었는데, 저희 학교는 트렌드에 맞지 못하게, 아직도 Python을 쓰지 않고 1학년의 첫 프로그래밍 언어로 C를 사용하는 학교 중 하나입니다.

1~2학년 후배들의 질문을 들어보면, 그리고 후배들과 대화해보면, 첫 프로그래밍을 배우는 시점에서 대부분 Compile, Debug, Run 등의 개념을 혼용해서 사용하는 경향이 강하더라구요.

C 언어를 포함한, Python과 JS 같은 일부 Interpreter 언어를 제외한 모든 언어는 Compile이라는 과정을 포함한 과정을 거쳐 실행되는 언어입니다.

한번 생각해봐요. Visual Studio와 같은 IDE(Intergrated Development Environment; 통합 개발 환경)에서는 초록색 실행 버튼, 혹은 F5 키 한번만 누르면 방금까지 쓰던 코드가 바로 실행되어 눈 앞에 검은 Prompt 창으로 나타나죠?

여러분을 도와주는 IDE는 여러분의 코드를
1. Debug하고
2. Compile하고
3. Run하는
모든 과정을 버튼 하나에 깔끔하게 집어 넣은 기능을 지원해주는데, 이는 분명 편하고 유용한 기능이지만, 덕분에 초보 개발자들은 그 개념을 제대로 이해하지 못하는 경우가 많아진 것 같다고 생각합니다.


문제의 초록 버튼

오늘은 같이 한번 Compiler 언어의 전반적인 실행 과정과, 추가로 Interpreter 언어에 대해서도 함께 알아보도록 해요!

Debug

여러분이 코드를 작성하고, Visual Studio에서 실행 버튼을 누르면, 가장 먼저 Debug라는 과정이 일어나게 됩니다. Debug는 말그대로 De+bug로 Bug를 찾아 고치는 과정(여기서 말하는 버그는 Compile Time Error 즉 문법 오류를 이야기합니다)입니다.

Visual Studio는 Debug를 두가지 형태로 지원하는데요. 하나는 여러분이 오타를 내면 실시간으로 빨간 밑줄을 그어 알려주는 실시간 디버깅 기능과, 두번째는 오타를 눈치채지 못하고 실행 버튼을 누르는 순간 문법 오류가 있다고 알려주는 기능이 포함되어 있답니다.


pritnf가 뭔데? 나 몰라


실행해? pritnf 모른다니까?

Compile

Compile은 버튼을 눌렀을 때, 즉 디버그 직후 문제가 없다면 일어나는 과정으로 우리가 작성한 C 언어 코드를 기계어로 변환하여, 실행 파일로 바꿔주는 과정인데요.

이 과정은 Visual Studio를 다운로드 받을 때, 함께 다운로드 된 Compiler라는 또다른 프로그램이, 우리의 C 코드를 받아 실행 파일(Windows라면 *.exe)로 내놓습니다.


"x64/Debug/" 아래에 생긴 실행 파일과 기타 실행 보조 파일

그리고 우리의 초록 실행 버튼은 한가지 과정을 더 진행해주죠.

Run

실제로는 저 *.exe 파일을 더블 클릭한 것과 같은 실행 과정 즉, Run까지 진행하여, 우리의 눈 앞에 검은 출력 화면을 띄우는 일까지 우리의 초록버튼은 도와줍니다. 실제로 저 실행 파일을 더블 클릭해도 같은 화면을 볼 수 있죠.


익숙한 검은 화면

Linux에서...

Linux에서 gcc라고 불리는 컴파일러로 이 과정을 진행하게 된다면 전 과정을 하나씩 진행하게 됩니다. 그래서 보통 학생들은 Linux를 쓸 때 쯤 되면 저 용어들을 혼용하지 않게 되더라구요. 그래도 미리 알고 있으면 좋지 않을까요?

+ Interpreter

인터프리터는 컴파일러와 조금 다른데요. 인터프리팅 과정에서는 실행 파일을 추출하는 과정이 없습니다.

대신 인터프리터를 실행하면, 소스 코드를 말 그대로 "한줄씩" 읽어서 실행해주죠.

컴파일러보다 느리다는 단점이 있지만, 한줄씩 실행할 수 있어 오류가 있는 지점에 도달하기 전까지는 정상적으로 실행이 되기 때문에, 완성된 프로그램이 필요한 것이 아닌 한줄씩 천천히 분석할 때는 더 유용하다는 장점도 있고(Python과 AI), 다른 프로그램에 인터프리터가 포함되어 서브 스크립트로 실행될 때는(Web Browser 속 JS) 유용하다는 장점이 있답니다.

Have a Good day!

재미있고 유용하셨다면 다음에도 찾아주세요! 그럼 안녕~

profile
Hello, world!

0개의 댓글