MoonNote

반응형
     

 

 

 

프로그래밍 언어란 시스템을 구동시키기 위한 프로그램을 작성하는 언어를 말하며 고급 언어일수록 사람(사용자)이 사용하는 언어에 가깝다고 할 수 있습니다. PC는 모든 명령을 0과 1으로만 이해하기에 인간에게 친숙한 프로그래밍 언어(코드)를 기계가 이해할 수 있는 기계어(0과 1로 구성된 Binary 코드)로 변경하는 과정이 필요하게 되는데요. 여기서 컴파일러와 인터프리터의 개념을 알아야합니다. 하나씩 살펴보겠습니다.

 

 

컴파일러(Compiler)

컴파일러는 명령어 번역 프로그램입니다. 소스 코드 혹은 원시 코드를 Object 코드로 옮겨주는 역할을 하죠. 쉽게 설명하면 여기서 소스 코드는 사람이 작성한 코드를 말하며 Object 코드는 기계어(PC가 이해할 수 있는 언어)라고 볼 수 있습니다. 실제 우리가 사용하는 C, C++, C#, Java 등은 컴퓨터는 이해하지 못합니다. 따라서 컴파일러를 통해서 일정 규칙으로 컴퓨터가 이해할 수 있도록 바꿔주는 것이죠.

 

 

컴파일러는 크게 다음과 같은 네 분류로 나뉩니다.

» 원시 코드를 바로 기계어로 변환하는 정적 컴파일(Static Compilation)

» 원시 코드를 바이트코드로 변환하는 바이트코드 컴파일(Bytecode Compilation)

» 바이트코드 등의 중간 코드를 기계어로 변환하는 AOT 컴파일(Ahead-Of-Time Compilation)

» 실행시 최초 한 번에 한해 컴파일을 거치는 JIT 컴파일(Just-In-Time Compilation)

 

그리고 장단점을 살펴보았을 때 다음과 같은 특징이 있습니다.

1. 개발 편의성 : 코드를 수정하고 실행하려면 컴파일을 다시 해야 한다.

2. 실행 속도 : 실행 속도가 빠르다.

3. 보안 : 코드가 유출되지 않는다.

4. 파일 용량 : 프로그램의 실행 파일 전체를 전송해야하기 때문에 용량이 크다.

5. 프로그래밍 언어 : C, C++과 같은 비교적 Low Level에 가까운 언어에서 많이 사용한다.

 

 

인터프리터(Interpreter)

컴파일러와 대조적으로 코드를 한 줄씩 읽어 내려가며 실행하는 프로그램입니다. Python, MATLAB 등 인터프리터를 사용하는 프로그래밍 언어는 굉장히 많은 편이며 High Level의 언어들은 대부분 인터프리터 언어라고 합니다. 

 

 

한 줄씩 기계어로 번역하는 방식이기 때문에 실행 속도는 컴파일러를 사용하는 언어보다 느리지만 프로그램 수정이 간단하다는 장점이 있습니다. 최근에는 느린 속도를 해결하고자 바이트코드 컴파일러를 이용하여 소스 코드를 가상 머신 타겟의 바이트 코드로 변환하거나, 반복적으로 쓰이는 함수와 클래스 등의 기계어 코드를 캐싱하는 JIT 컴파일러를 인터프리터에 내장하는 방식이 도입되었습니다.

 

정리해보면 인터프리터는 다음과 같은 장단점이 있습니다.

1. 개발 편의성 : 코드 수정 후 즉시 실행 가능하다.

2. 실행 속도 : 실행 속도가 느리다.

3. 보안 : 코드 유출이 될 수도 있다.

4. 파일 용량 : 코드만 전송하면 실행이 되기에 용량이 작은 편이다.

5. 프로그래밍 언어 : Python, MATLAB 등 High Level에 가까운 언어에서 많이 사용한다.

 

 

파이썬(Python)

파이썬(Python)은 1991년 네덜란드계 프로그래머인 귀도 반 로섬이 발표한 High Level Language입니다. 독립적이며 인터프리터식, 객체지향적, 동적 타이핑 대화형 언어라고 할 수 있으며 데이터 분석, 웹 프로그래밍, Database, GUI 프로그래밍 등 다양한 분야에서 사용 가능하고 그만큼 아주 많은 파이썬 라이브러리들을 제공합니다. 본문에서는 파이썬에 대한 자세한 내용은 생략하며 추가 궁금하신 것들은 구글링을 해보시기 바랍니다..^^

 

파이썬(Python)은 컴파일러? 인터프리터?

여기까지 살펴보았을 때 파이썬(Python)은 컴파일러인지 인터프리터인지 오히려 조금 헷갈리기도 합니다. 파이썬 소개에서는 인터프리터라고 하였지만,,위의 내용들로 보아 단점을 보완하고자 ¹VM 타겟에 바이트 코드를 변환하거나 ²JIT 컴파일러를 내장하는 방식이 도입되었기 때문이죠. Python Bytecode를 보여주는 내장 패키지로 dis가 있는데 아래의 파이썬 코드를 한번 dis를 사용하여 Bytecode로 변환해보겠습니다.

 

import dis

def myfunc(alist):
    return len(alist)

#dis.dis() : 객체를 역어셈블하는 명령어
print(dis.dis(myfunc))

 

실행해보면 아래와 같은 결과 값이 나옵니다. 보시면 기계어처럼 생겼지만 완벽한 기계어는 아닙니다.

# 4는 줄 번호입니다.
  4           0 LOAD_GLOBAL              0 (len)
              2 LOAD_FAST                0 (alist)
              4 CALL_FUNCTION            1
              6 RETURN_VALUE

 

따라서 개인적으로는 Python은 인터프리터 언어라고 말하지만 컴파일 언어라고도 말할 수 있을 것 같네요..

정답은 없다고 생각하며 특정 프로그래밍 언어가 어떻게 실행되는지에 따라 다르다고 볼 수 있겠네요.

이상 파이썬(Python), 컴파일러(Compiler)와 인터프리터(Interpreter)에 대한 글을 마치도록 하겠습니다.

 

 

 

 

 

 

 

※ 이 글이 도움이 되었다면 "🤍공감" 버튼을 클릭해주세요. 클릭 한번이 글 쓰는데 큰 힘이 됩니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band