top of page
33.jpg
55.jpg

KAIST부설 한국과학영재학교 온라인 과학매거진 코스모스

  • 블랙 페이스 북 아이콘
  • 블랙 인스 타 그램 아이콘

다양한 프로그래밍 언어와 그 특징

우리가 현재 사용하는 프로그래밍 언어들은 인터프리터 언어/ 컴파일러 언어로 크게 분류할 수 있습니다. 본 기사에서는 컴파일러와 인터프리터가 무엇인지 소개하고, 컴파일 언어와 인터프리터 언어 각각의 장,단점을 소개하려고 합니다.


인터프리터 언어와 컴파일러 언어란?

먼저, 컴파일러란 고급 프로그래밍 언어(ex: C언어, JAVA 등)를 machine 코드, 어셈블리어나 object 코드 등의 저수준 코드로 변환하기 위해 사용되는 프로그램 입니다. 실생활 예시를 든다면 컴파일링은 한글로 “안녕하세요. 저는 컴퓨터를 좋아합니다”라는 내용이 있는 책을 일본어로 번역해서 “こんにちは。私はコンピューターが好きです。” 로 바꾸는 과정이라고 생각할 수 있을것 같습니다.

인터프리터는 컴파일러와 반대로 코드를 실행하는 중에 한줄씩 기계가 알아들을 수 있는 언어로 변환을 하는 방식으로 동작합니다. 마찬가지로 실생활 예시를 든다면 “안녕하세요. 저는 컴퓨터를 좋아합니다”를 동시통역해주는 통역사가 “こんにちは。私はコンピューターが好きです。” 라는 문장으로 번역해준다고 생각하면 될것 같습니다. 이러한 방식은 한국과학영재학교 학생이라면 1학년때 배우는 파이썬에서 사용됩니다.

이렇게 한가지 방식이 아닌 이런 여러가지 방식을 사용하는 이유는 무엇일까요?


컴파일링 언어와 인터프리팅 언어의 장단점

컴파일링 언어는 위의 예시에서 보자면 미리 통역사(컴파일러) 가 한국어(고수준 언어)를 일본어(저수준 언어)로 바꾸어놓은 상태입니다. 그렇기 때문에 일본인이 글을 읽고자 할때 굉장히 빠른 속도로 읽을 수 있습니다. 하지만, 인터프리팅 언어는 통역사(인터프리터)가 한글(고수준 언어)을 일본어(저수준 언어)로 바꾸어주는데 걸리는 시간이 존재하기 때문에 읽는데 더 긴 시간이 걸리게 됩니다. 그렇다면 실행속도가 빠른 컴파일링 언어가 항상 인터프리팅 언어보다 유리할까요?

그렇지 않습니다.

컴파일링 언어들은 컴파일러가 고수준 언어를 저수준 언어로 바꿔주는 과정에서 플랫폼에 종속성이 생기게 됩니다. 쉽게 풀어서 설명해드리면 위의 사례에서 한글을 일본어로 바꾸었을때 일본인은 그 책을 읽을 수 있지만 중국인은 그 책을 읽을 수 없는 상황을 생각하시면 될것 같습니다.

반면, 인터프리팅 언어들은 상대적으로 동시통역사(인터프리터)가 통역(인터프리팅)을 해주는것이므로 상대가 어떤 사람이던지에 관계없이 그 사람이 필요한 언어로 통역(번역)해줄 수 있는 장점이 있습니다.


또한 컴파일링 언어들은 코드의 일부 부분만 바뀌더라도 전체 내용을 처음부터 모두 다시 컴파일 해주어여 한다는 단점 또한 가지고 있습니다.


이 내용을 표로 정리해본다면 다음과 같습니다.

위와 같은 장단점이 있기 때문에 프로그램이 실행될 환경과 프로그램의 특성을 고려하여 어떠한 언어를 사용할지 결정하게 됩니다.

JAVA 언어의 경우에는 조금 특이한 방식을 사용하는데요,

위와 같이 .java 파일(코드)를 .class 파일로 컴파일하고, 이를 java machine(JVM)에서 실행하는 방식을 사용합니다. 이 방식의 장점은 컴파일한 플랫폼에서만 작동하고 타 플랫폼에서는 잘 작동하지 않는다는 컴파일 언어의 구조적인 단점을 해결하는데에 도움을 줍니다. 하지만 코드가 Java Machine 이라는 가상 머신에서 작동하기 때문에 일반적인 컴파일 언어보다 실행속도가 느리다는 단점이 존재하기는 하지만 인터프리터 언어보다 빠르게 동작하고, 컴파일 언어보다 다양한 환경에서 실행이 가능하다는 장점을 가지고 있습니다.


컴파일 언어와 인터프리터 언어의 속도와 메모리 사용량 비교

이제 위에서 제시한 컴파일 언어의 장점인 빠른 실행 속도와 적은 리소스 사용을 인터프리터 언어와 비교해가면서 설명해보겠습니다.

컴파일 언어들의 실행시간, 사용하는 에너지

인터프리터 언어들의 실행시간, 사용하는 에너지

위의 두 그래프를 보게 되면 별 차이가 없다고 느낄 수 있지만 축의 단위를 보게 된다면 인터프리팅 언어는 에너지의 경우는 500J 단위, 실행시간은 10000ms(10초)를 사용했지만 컴파일 언어들은 에너지의 경우에는 50J 단위, 실행시간은 1000ms(1초)를 단위로 사용해 사용되는 에너지와 실행 시간의 측면에서 보면 약 10배의 스케일에서 비교해야 함을 알 수 있습니다.

이를 정리한 표를 보면

컴파일 언어들이 실행속도와 사용한 에너지와 메모리에서 상위권을 차지했고 인터프리팅 언어들이 하위권을 차지했음을 알 수 있습니다.


결론

컴파일 언어들과 인터프리터 언어들은 각각의 장점을 가지고 있고, 이상적으로 사용할 수 있는 환경이 다르므로 만들 프로그램이 사용될 환경과 조건에 따라 적절한 프로그래밍 언어를 사용하실 수 있으면 좋을 것 같습니다.

 

이승준│Mathematics & Computer Science│지식더하기


참고자료

[1] Pereira, Rui, Marco Couto, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, and João Saraiva. "Energy Efficiency across Programming Languages: How Do Energy, Time, and Memory Relate?" Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering, Vancouver, BC, Canada, Association for Computing Machinery, 2017.


첨부 이미지 출처

[1] https://introcs.cs.princeton.edu/


ⓒ KAIST부설 한국과학영재학교 온라인 과학매거진 KOSMOS

조회수 420회댓글 0개

최근 게시물

전체 보기
bottom of page