문득 파이썬 가상환경을 실행한 터미널에서 Python 코드를 한 줄씩 실행하면서 테스트를 진행하다가.
Java에는 없는 이러한 특징이 바로 인터프리터 언어의 특징인가? 하고 궁금해서 찾아보았다.
아래 사이트를 참고하였다.
파이썬은 인터프리터언어입니까? · Wireframe
최근에 많이 보게 되는 질문 중 하나가 ‘파이썬은 인터프리터 언어입니까? 컴파일언어입니까?’라는 것이다. 개인적으로 이 질문은 사람을 참 난감하게 하는데, 어떻게 답해야하나에 앞서 아
soooprmx.com
결론부터 말하면 '컴파일 언어 VS 인터프리터 언어' 이 두 가지 특징으로 프로그래밍 언어를 구분지어서는 안 되는 것 같다. 왜냐하면 Java와 Python 모두 이 두 가지 특징을 가지고 있기 때문이다.
컴파일 언어
컴파일이란 무엇인가?
Java 언어와 같은 프로그래밍 언어로 이루어진 소스코드를 기계어로 번역하는 것을 말한다.
더 일반적으로 말하면 하나의 언어 코드를 다른 언어로 변환하는 것을 말한다고 한다. 예를 들면, TypeScript의 경우 JavaScript로 해석되어 실행되는 언어인 것 처럼 말이다. 그렇다면 컴파일 언어는 컴파일러에 의해 구현되는 언어라고 할 수 있는데 다시 말하면, 소스코드를 기계어로 번역하는 방식으로 구현되는 언어라고 할 수 있다.
인터프리터 언어
인터프리터란 무엇인가?
프로그래밍 언어를 한 줄씩 해석하고 실행하는 해석기
인터프리터 언어는 바로 이 인터프리터에 의해 실행되는 언어를 말한다. 일종의 가상머신이나 실행환경 또는 에뮬레이터로 이해할 수 있다.
만약 위 두가지 특징으로 언어를 구분한다고 가정한다면, 컴파일언어가 소스코드를 기계어로 번역하는 절차 때문에 초기 속도가 느릴 것이고 이후에는 기계어로 번역된 소스코드를 통해 빠르게 실행될 것이다. 반면 인터프리터 언어는 초기 속도가 더딜 일은 없겠지만 결과적으로 매번 해석하고 실행해야하기 때문에 더 느릴 것이다. 이러한 문제를 해결하기 위해서 어쩌면 Java와 Python 언어는 두가지 특징을 모두 가지고 있는게 아닌가 싶다. 이 외에도 운영체제에 대한 이식성이나 디버깅 편리함 등이 서로 대조되는 특징이다.
이제 Java와 Python의 동작 방식을 살펴보겠다.
Java의 동작 방식
아래 사이트를 참고했다.
https://rumor1993.tistory.com/90
[Java] 컴파일 언어인가? 인터프리터 언어인가?
컴파일 언어 컴파일 언어(compiled language)는 구현체들이 일반적으로 컴파일러(소스 코드로부터 기계어를 생성해내는 변환기)이면서 인터프리터(런타임 전 변환 과정을 거치지 않는, 소스 코드의
rumor1993.tistory.com
Java는 위에 보이는 표와 같이 컴파일러에 의해 .java 파일을 Java바이트 코드인 .class 파일로 변환한다. .class 파일은 JVM이 이해할 수 있는 언어로 변환된 파일이다. 이후 런타임 환경에서 JVM에 의해 인터프리터와 JIT 컴파일러가 이를 다시 기계어로 변환해 컴퓨터에 전달하는 것이다. 여기서 JVM은 가성머신으로 Java 프로그램을 어떤 운영체제에서도 실행시킬 수 있게 해준다. 추후 JVM에서 자세히 알아보도록 한다.
이처럼 Java언어는 컴파일러와 인터프리터에 의해 실행되는 언어로 위 논란이 무의미해진다. 반면, Python은 어떨까?
Python의 동작 방식
파이썬도 마찬가지로 소스코드를 바이트 코드로 컴파일을 한다. Flask와 같은 Python 언어로 된 백엔드 프레임워크를 보면 .py 파일 실행 후 .pyc 파일이 생성되는 것을 볼 수 있다. 이 바이트 코드를 인터프리터가 실행하는 방식으로 동작한다. 이러한 점을 미루어 보았을 때 Python도 Java와 마찬가지로 컴파일 언어, 인터프리터 언어의 특징을 모두 가지고 있다고 할 수 있다.
결론
오늘의 결론~
두 가지 특징을 가지고 언어를 구분하는 것은 무의미하다.
그렇다면 궁극적으로 내가 궁금했던 것은 Java 언어도 Python 언어처럼 한 줄씩 실행시키며 테스트 할 수 있는 방법은 없을까? 였다.
이러한 실행 방식을 대화형 모드라고 하고 또 실행 프로그램을 Interactive shell 이라고 하는데 Java에도 jshell 이라는 것을 통해서 Python과 같이 동작할 수 있다는 것을 알았다. 방법까진 궁금하지 않아서 아래 링크를 남기고 이만 마치겠다.
https://medium.com/techwasti/interactive-java-repl-shell-91d7b2237eb1
Interactive Java (REPL) shell.
For more stories.
medium.com
'언어' 카테고리의 다른 글
[Java] Java8 - 함수형 프로그래밍(5) (0) | 2022.12.04 |
---|---|
[Java] Java8 - 함수형 프로그래밍 (4) (0) | 2022.12.01 |
[Java] 다형성 Ploymorphism (0) | 2022.11.08 |
[Java] Java8 - 함수형 프로그래밍 (3) (0) | 2022.10.22 |
[Java] Java8 - 함수형 프로그래밍 (2) (0) | 2022.10.17 |