강의/computer science

[ComputerScience] 인터프리터와 컴파일러

하기싫지만어떡해해야지 2024. 9. 6. 13:18

이 게시글은

서울대학교 데이터사이언스 대학원

조요한 교수님의

데이터사이언스 응용을 위한 컴퓨팅 강의를

학습을 목적으로 재구성하였습니다.


첫 번째 강의는 교수님의 이전 강의 내용

복습에 관한 내용이었다

 

간단하게 정리해보고자 한다

 

인터프리터와 컴파일러

Python은 대표적인 인터프리터 언어고

C는 대표적인 컴파일러 언어이다

그럼 인터프리터와 컴파일러는 무엇이며

이 두개는 어떤 차이가 있을까?

 

 

인터프리터와 컴파일러는

공통적으로 코드를

컴퓨터가 알아들을 수 있는 명령어로

변환해주는 역할을 한다

 

옛날부터 배웠을텐데

컴퓨터가 알아듣는 건

0과 1 뿐이다

 

우리가 python이나 c언어로 코드를 작성하면

python은 인터프리터

c언어는 컴파일러를 통해서

컴퓨터가 이 파일을 이해하고 실행할 수 있는

0과 1의 명령어로 바꾸어준다

 

이제 코드를 이진수로 바꾸는 방식에서

인터프리터와 컴퍼일러는 차이가 있고

이러한 차이 때문에

각각 장단점이 존재한다

high-level의 언어(우리가 작성하는 코드)를

command의 sequence로 받는다

 

이러한 command의 시퀀스를

기계가 이해할 수 있는 언어(이진수)로

translation을 해서 실행한다

(command by command)

 

이러한 방식을

command by command라고 하는데

이해하기 좋게 표현하자면

 

코드 전체를 한 번에 기계어로

바꾸는게 아니라

코드를 한 줄 한 줄 씩

기계어로 변환해서 보내준다

 

반면에 컴파일러는

소스코드를 통째로 translation을 한다

전체 코드를 쭈욱 읽어서 한 번에

machine-readable로 바꿔준다

 

이러한 변환 과정의 차이로 인해

각각 장단점이 있는데

 

인터프리터

장점 1) 한 줄 한 줄 바로 해석해서 보내기 때문에

코드 중에서 잘못된 부분이 있으면

바로 확인이 가능함

(Instantaneous debugging)

장점 2) 이식성이 좋아 다른 OS에 가도

실행이 가능함

단점 1) translation -> execution ->

translation -> execution -> ...

이러한 방식을 계속해서 반복하기때문에

속도가 늦음

 

이러한 장단점이 있고

 

컴파일러

장점 1) translation에 들어가는 시간이

적기 때문에 실행 속도가 빠름

장점 2) 컴파일러가 코드 전체를 쭈욱 읽어보고

실행하기 때문에 컴파일러 자체가 코드를 보고

판단해서 메모리를 적재적소에 배치함

-> 메모리 효율이 높음

단점 1) 코드 전체를 바로 translation해서

실행하기 때문에 에러가 났을 때 

어디에서 났는지 찾기가 어려워

debugging이 힘듦

단점 2) 컴파일이 되어있는 상태의 파일은

다른 OS에 가면 작동을 안할 가능성이 높음

-> 이식성이 낮음

 

이러한 장단점이 있다

 

 

수업시간에 교수님께서

아래 영상을 강의자료로 보여주셨는데

함께 보면 이해하기 편할 것 같다

 

https://www.youtube.com/watch?v=_C5AHaS1mOA