본문 바로가기
프로그래밍 언어/Python

파이썬의 동작과정

by Suff07 2023. 12. 27.

※ 주의

현재 제가 적는 게시글은 제가 잘 몰랐던 파이썬의 개념에 대해 적고 정리하는 글입니다.

그러므로 어느정도 기초적인 문법은 알고 있다는 전제하에서 글을 적습니다.

만약 문법을 전혀 모르신다면 아래 링크를 참고하시면서 봐주세용

https://wikidocs.net/book/1

 


 

앞서 설명했다시피 파이썬은 인터프리터 언어라는 점을 주목해야 합니다.

<더 정확하게 이야기하자면 하이브리드 언어라고 보는편이 맞습니다. 왜 그런지는 아래에 설명>

 

인터프리터 언어는 코드를 한줄 읽고 번역하고 실행하고 한줄 읽고 번역하고 실행하고의  과정을 거칩니다.

반면에 컴파일러는 코드를 전체적으로 기계어로 번역한 뒤에 컴파일 과정을 거쳐서 런타임으로 넘겨버립니다.

 

 

또한 파이썬에서는 가상머신과 바이트코드라는 개념이 존재합니다.

(사실 자바에도 존재하지만 파이썬과 자바는 유사점이 많습니다.)

 

 

CPython은 파이썬의 구현체로써 파이썬의 언어규격에 따라 만들어진 컴파일러입니다.

우리가 흔히 파이썬을 공식 홈페이지에서 다운받게 되면 CPython이나 Jython(자바 컴파일러)과 같은 컴파일러가 패키지 안에 포함이 된다 이거죠!


※ 바이트코드와 바이너리어, 그리고 가상머신

이를 먼저 설명하기전에 C언어와 자바의 동작 구성을 보도록 하겠습니다.

 

 

 

위의 과정은 C언어가 동작이 되는 과정을 요약한 그림입니다.

쉽게 생각하면 소스파일은 우리가 작성한 코드들을 의미합니다.

소스코드를 작성한 파일은 컴파일러를 통해서 어셈블리어로 번역이 됩니다.

그리고 링커를 통해서 헤더파일(쉽게 말하면 파이썬에서 import 함수와 비슷한 개념)을 연결시켜 실행파일을 만들고 런타임으로 넘어갑니다.

 

 

자바는 과정이 조금 복잡하지만 요약을 하면 다음과 같습니다.

 

소스코드 -> 컴파일러(바이트코드로 변환) -> 클래스 로더(링킹과 유사함) -> JVM(이때 기계어로 번역) -> 런타임

 

여기서 바이트 코드와 JVM이라는 개념이 나오는데요.

 

바이트 코드는 JVM이 이해할 수 있는 언어라 보면 되겠습니다.

 

( 정말 쉽게 생각하면 영어 -> 일본어 -> 한국어 순으로 중역을 떠올리면 됩니다. )

 

JVM은 가상머신으로써 바이트 코드를 기계어로 번역하고 런타임으로 넘기기 위해서 만들어졌습니다.

 

그러면 여기서 궁금한게 생길겁니다.

 

왜 굳이 이렇게 중역을 할까?

 

그것에 대한 대답은 가상머신은 OS에 독립이 되기 때문이라고 설명할 수 있습니다.

그러니까 .exe파일은 윈도우에서는 실행이 되고 리눅스나 MacOS에서는 Wine과 같은 프로그램을 쓰지 않는 이상 실행이 되지 않습니다.

이러한 문제점을 해결하기 위해서 JVM은 OS의 하드웨어 관리, 자원할당, 시스템 호출과 같은 커널영역에서의 기능을 가상화하여 구현하는데 중점을 둡니다.

 

 


 

다시 파이썬으로 돌아와서 파이썬 또한 자바와 비슷한 과정을 통해 동작을 합니다.

 

 

 

'프로그래밍 언어 > Python' 카테고리의 다른 글

클래스와 객체 2번째 이야기  (0) 2024.01.06
클래스와 객체 1번째 이야기  (0) 2024.01.02
NameSpace란?  (0) 2023.12.29
정적타이핑과 동적타이핑  (0) 2023.12.27