개발쪽 일을 하다보면 정말 별의 별 언어를 다 듣는데, 최근에 새로 접한 내용이 있어서 이쪽에 대해 알아보다가 정리하고 싶어서 정리를 하게 됐습니다. 정말 쉬운 기본 내용일텐데, 저는 몰랐어서.... ㅠㅠ 한번 정리해보게 되었습니다.
참고로 많은 블로그들이 프로그래밍 언어 종류에 대한 글을 봤는데, 내가 원하는(?) 방향의 정리가 없었던 것 같습니다. 우선 위에서 말한 새로 접하게 된 내용은 다음과 같습니다.
파이썬은 스크립트언어이다
사실 이거 보고 당연하지.. 라고 하시는 분들은 안읽으셔도 됩니다!
하지만 그.. 그렇지? 아닌가..? 싶으신 분들은 한번 읽어보시면 도움이 되실 것 같습니다!
저는 후자였습니다. 정말 듣자마자 "뭔소리지?" 했습니다.... "파이썬은 객체지향 언어 아닌가??"
이렇게 해서 뭔가 내가 아는 거랑 다른게 있다고 생각하여 조금 알아보게 되었고, 다음과 같이 정리를 해볼 수 있었습니다. 혹시 부가적인 내용이나 잘못된 내용이 있다면 댓글로 말씀 부탁드립니다.
언어의 종류를 구분 짓는 기준
언어의 종류를 구분짓는 기준은 다양합니다. 많은 기준 중 제가 정리해볼 내용은 "프로그래밍 언어를 실행하는 방식" 과, "프로그램을 구성하고, 데이터를 다루는 방식"에서 나누는 기준입니다. (이 기준을 명확하게 알고 있지 않아서 위에 내용이 헷갈렸던 것 같습니다)
(1) 프로그래밍 언어의 실행 방식
우선적으로 해당 방식의 기준을 구분하기 위해선, 프로그래밍 언어를 실행하는 대표적인 두 가지 방식인 Compile 과 인터프리팅에 대해서 이해를 하면 좋습니다. ---> (이해하기 정말 좋은 영상-클릭) (그 다음에 보기 좋은 영상 - 클릭) 여기서 자세한 설명까지 하기엔 너무 많아, 위에 영상을 보신 뒤에 읽으면 훨씬 이해가 잘 되실 겁니다.
Compile (C, C++) | Interpret (JS, Python) |
- 사람이 짠 코드 파일을 컴퓨터가 이해 가능한 언어로 통째로 변역한 파일을 만듭니다 (Object Code File) - 빠르게 진행되지만, 오류에 대해서 중간에 확인받을 수 없습니다 (실행해야 확인 가능) - 컴퓨터가 바로 직접 수행하므로 별도의 실행환경이 없으며, 메모리 관리도 직접 해야합니다. 구동과 동시에 시스템에서 메모리를 할당해줍니다 (내부적으로 필요한 환경 없이 컴퓨터가 수행하게 한다면 실행이 어려울 수 있음) - 별도의 명령어 없이 바로 컴퓨터가 수행 가능하다 |
- 실행환경 (Interpreter) 이 필요하며, 프로그램 코드를 실시간으로 변역하며 진행됩니다 - 느리게 진행되지만, 오류에 대해서 실시간으로 확인을 받습니다. - 코드를 배포하는 것이므로, Interpret 한 환경만 된다면 어디든 배포가 가능하다 |
1) 컴파일러 언어
- 말 그대로 컴파일 방식을 통해 개발을 진행하는 언어입니다.
- 컴파일러를 사용하여 실행 파일을 만들고, 실행 파일을 배포하는 언어입니다.
2) 인터프리터 언어
- 인터프리터를 사용하는 언어로, 소스 코드 한줄씩 읽으며 실행하기 때문에 느린 속도를 가지고 있습니다.
- Python, JS, PHP 등이 대표적인 인터프리터 언어입니다
둘의 차이를 쉽게 생각해보면, 실행파일을 생성해주어야 언어 구동이 가능한지, 아니면 실행환경만 있으면 코드 한줄씩만 입력하더라도 바로바로 실행될 수 있는지를 생각해보면 됩니다.
C언어 같은 경우 많은 분들이 해보셨겠지만 gcc 컴파일러를 통해서 실행파일을 생성해야 코드가 구동되고, 그제서야 비로서 에러 등을 확인할 수 있습니다. 하지만 자바스크립트는 당장 웹브라우저 개발자 콘솔에서도 한줄씩 입력하면 바로바로 결과가 나온다는 점을 생각해보시면 됩니다. (파이썬도 IDLE 을 써보신 분이라면 바로 인터프리터 언어라고 이해하실 수 있습니다)
정확하게 구분을 짓는 방법은 언어의 실행 방법을 "번역" 과 "실행" 두가지 측면으로 나누어서 보는 것입니다. 컴파일 언어는 모든 코드를 한번에 번역(Compile) 하고, 한번에 CPU 가 실행합니다. 즉, 번역과 실행이 따로 이루어집니다.
하지만 인터프리터는 한번에 한 줄씩 입력된 코트를 읽기 때문에, 인터프리터가 번역을 하고 CPU가 즉각적으로 실행하는, 번역과 실행이 동시에 이루어진다고 볼 수 있습니다.
참고로 위에서 말한 "인터프리터를 통한 번역 과정 없이 바로 실행되는 언어" 는 엄밀히 말하면 인터프리터 언어라고 합니다. 스크립트 언어는 주로 간단한 태스크를 자동화하기 위해 사용되는 언어를 말하는데, 스크립트 언어가 대부분 인터프리터 언어로 구현되어 있습니다. 인터프리터가 더 큰 개념이라고 생각하시면 되겠지만, 일반적으로, 그리고 이 포스트에서도 인터프리터 언어는 스크립트 언어와 비슷한 개념으로 사용됩니다.
참고로 자바는 Compile 과정도 가지고 있고, 인터프리터 과정도 가지고 있는 하이브리드 언어라는 이상한 이름으로 구분됩니다. 바이트 코드로의 번역 (Compile) 은 따로 이루어지지만, 2진코드로 번역 후 실행될 때는 한 줄씩 읽으며 실행되는 인터프리팅 방식 또한 사용되고 있기 때문입니다. 자세한 건 [자바의 동작 원리에 대해서] 를 확인해주시면 될 것 같습니다.
(2) 프로그램을 구성하고, 데이터를 다루는 방식
자바는 위의 기준과는 다른 기준으로, "프로그래밍을 어떻게 하는지, 내부 데이터를 어떻게 다룰 건지" 에 대한 기준으로 또다시 언어를 분류합니다. 이 기준은 "프로그래밍 패러다임"에 대한, 즉 "이 언어는 어떤 방식으로 개발하는게 좋은지" 에 대한 구분이기도 합니다.
1) 객체 지향 언어 (드디어 등장!)
- 객체와 클래스를 중심으로 구성된 방법론 입니다.
- 객체는 상태와 행위를 가지고 있으며, 객체간의 긴밀한 상호작용을 통해 프로그램이 동작하게 됩니다.
- 객체 지향 언어는 코드 재사용성이 높고, 유지보수가 용이하며, 코드의 가독성이 높아집니다 (OOP 를 사용하는 이유)
- Java, Python, C++ 이 대표적인 객체지향 언어입니다.
2) 절차 지향 언어
- 프로그램을 순차적 명령어의 집합으로 인식하고, 데이터를 중심으로 프로그램을 구현하는 방법론입니다.
- 절차 지향 언어는 함수가 순차적으로 실행되며 프로그램이 동작합니다.
- 운영체제로부터 할당받은 메모리 공간에 프로그램 코드와 데이터를 로드하고, 실행시 main 함수부터 실행됩니다 → 이후 작업을 수행하기 위해서 스택 메모리 영역에 데이터를 저장하고, 불러오는 등의 작업들이 필요한데, 컴파일러가 제공하는 (언어 내부적으로 정의된) 라이브러리 함수들을 통해 제공됩니다.
- 사용자 정의 함수와 라이브러리 함수가 결합되어 동작하고, 수행되는 순서에 따라서 데이터를 처리합니다
3) 함수형 언어
- 함수 개념을 중요시하고, 함수를 일급 객체로 취급하여 프로그래밍하는 방법론입니다.
- 외부의 영향을 받지 않고 입력값에만 의존하는 순수 함수를 지향합니다. 따라서 전역 변수를 지양하고, 불변 데이터 사용을 권장합니다. (이런 특징은 다중 스레드 환경에서 안전성을 보장하겠죠?)
- 람다식이라는 것은 함수형 프로그래밍에 사용되는 개념으로, 이름 없는 함수를 만든다는 뜻입니다. 자바와 파이썬에서도 람다식을 통해 간결한 함수형 프로그래밍 스타일을 지원하지만, 함수 자체를 매개변수로 전달하거나 반환값으로 사용하는 등의 완벽한 함수형 스타일을 제공하지는 않습니다.
이렇게 구분해놓고 나니, 파이썬은 인터프리터 언어이고 객체지향 언어라는 것이 이해가 되네요. C 언어는 컴파일러 언어이고 절차지향 언어, Java 는 하이브리드성 언어이며 객체지향 언어라는 점까지 잘 구분이 되는 것 같습니다.
이번 포스트에선 언어의 종류에 대해서 살펴보았습니다. 누구나 아실 영역이지만, 혹시라도 저처럼 정확한 개념들을 접해볼 기회가 없으셨을 분들에게 도움이 되는 포스트였으면 좋겠습니다.

---------------------------
* 모든 출처
https://bentist.tistory.com/41
https://jooona.tistory.com/157
[JAVA] JAVA는 컴파일 언어일까, 인터프리터 언어일까?
앞의 글에서 우리가 코딩 시에 사용하는 언어들은 컴파일 언어와 인터프리터 언어로 구분할 수 있다는 사실을 알게 되었다. 다시 기술하자면, C, C++, Go 등의 언어는 컴파일 언어이고, Python, R, Java
jooona.tistory.com
https://www.youtube.com/watch?v=Dx2tSsd3aFc
https://www.youtube.com/watch?v=nrxtQcCLHo4&t=592s
'Extra' 카테고리의 다른 글
API vs Library .. (API 와 Library에 대해) (0) | 2023.04.19 |
---|