[JAVA] 컴파일러 초간단 이해하기.
오늘은 많은 분들이 개발을 시작할때 항상 궁금해하고 어려워(?)하는
컴 파 일 러
에 대하여 알아보려고 합니다.
도대체 뭘 일러~~~!
$%^&#$@@ -----> 헛소리 그만하고..
일단 컴파일에 대해 공학적 접근에서 개념적 정의로 아래와 같이 말을 하곤 합니다.
컴파일이란?
고급언어(사람이 알아듣는 언어)로 작성된 코드를 컴퓨터가 알아들을 수 있는 저급언어(기계가 알아듣는 언어)로 번역하여 실행을 위한 프로그램(바이너리 파일)으로 변환해주는 작업.
그리고 컴파일러는 이러한 행위를 하기위한 도구를 말합니다.
즉, 사람으로 비유하자면 한국말을 영어로 통역하는 것은 컴파일에 해당되고, 이 행위를 하는 사람인 통역사는 컴파일러와 같은 의미가 되는거죠.
자! 컴파일과 컴파일러를 설명하기 전에 먼저 아래와 같은 그림을 맛보기로 개념을 살며시 살펴보기로 하겠습니다.
그러면 좀더 깊이 있게 본격적으로 자바 프로그래밍에서의 컴파일은 무엇인지 살펴보도록 하겠습니다.
여기에서는 자바 프로그래밍을 예로 들어 설명하지만 자바에서뿐만 아니라 모든 프로그래밍에서의 컴파일의 기본 개념인 소스코드를 컴파일하여 바이너리 파일로 컴파일한 후 실행하여 결과를 얻는다는 관점에서는 동일합니다.
순서대로 간략히 설명하자면 다음과 같습니다.
- HelloWorld를 출력하기 위해 소스코드로 작성한다.
- 작성한 소스코드를 컴파일러(이클립스 등)로 컴파일(Run)한다.
- 컴파일이 완료되면 바이너리(바이트 코드로 된 파일 여기서는 .class 파일)이 만들어진다.
- JRE(Java Runtime Environment)의 클래스로더가 이 클래스 파일과 추가적으로 실행에 필요한 파일을 로드한다.
- JVM(Java Virtual Machine)에서 위 파일들을 실행하여 운영체제에 맞게 변환하여 실행한다.
- 운영체제는 사용자에게 원하는 결과를 출력한다.
간단하죠. 별거 없습니다. ㅎㅎ 물론 더 깊이있게 공학적으로 접근하자면 끝이 없겠지만, 일단 여기까지만 알아두셔도 우리 개발자들은 전부를 안 것입니다. 그러니 머리 아프게 너무 깊이 들어가지는 마세요...^^
추가적으로 한가지 더 알고 싶으신 분을 위해 인터프리터와 컴파일러의 차이를 간단히 살표보고자 합니다.
자바와 자바스크립트를 비교하여 일반적으로 자바는 컴파일러 언어이고 자바스크립트는 인터프리터 언어라고 말을 합니다.
현재는 기술 발전으로 그 경계가 상호 보완적인 관계로 서로 장점을 받아들여 기술들이 융합하는 관계로 발전하고 있지만 초기의 기본 개념은 컴파일러 언어와 인터프리터 언어로 시작되었음을 알아두시면 좋을거 같습니다.
어찌되었건 인터프리터와 컴파일러의 기본 개념은 아래의 이미지만 봐도 정확히 이해하실거라 생각됩니다.
위 그림에서 보는 바와 같이
인터프리터는 컴퓨터가 소스를 한줄 한줄 단위로 실시간 즉 위에서 살펴본 Runtime 시간에 기계어로 번역하여 컴퓨터에게 명령하는 것으로 통역사가 듣는 즉시 통역하는 것과 같은 것이죠.
컴파일러는 컴퓨터가 소스를 통째로 컴파일러라는 도구를 통해 전부 기계어로 번역하여 미리 준비한 번역문을 한번에 실행하는 것과 같은 것입니다.
즉 인터프리터는 실시간 문장단위 통역으로 볼 수 있고, 컴파일러는 한장 또는 한권 단위의 전체 번역으로 볼 수 있습니다.
따라서, 이것만 보더라도 아래와 같은 장단점 들을 알 수 있겠죠.
인터프리터는 실시간 번역이므로 컴파일 시간이 필요 없다.
그때 그때 번역하므로 컴파일 시간은 필요 없지만 문장 문장 통역시마다 시간이 좀 필요하다.
즉, 컴파일러에 비하여 실행시 느릴 수 있다는 단점이 있다(컴파일러는 미리 번역해 두었으므로 그냥 읽기만 하면 되므로).
컴파일러는 미리 변환해야 하므로 컴파일 시간이 필요 하다.
소스 코드가 길어질 수록 컴파일 시간이 오래 걸린다.
소스 코드가 많을 수록 만은 양의 메모리가 필요하다.
위와 같은 장단점 이외에도 더 많은 차이점이 존재하지만 여기서는 큰 개념만 잡아주는 것이므로 보다 자세한 내용을 알고싶으신 분들은 검색을 통해 알아봐주시기 바랍니다.
그리고 저에게도 한수 가려쳐주시면 감사하겠습니다...^^
혹시 컴파일러에 대하여 보다 자세한 내용은 아래의 블로그에서 친절하게 자세히 설명하는 것 같아 더 자세히 알고 싶거나 시간이 되시는 분들을 읽어보시기를 추천합니다.
댓글
댓글 쓰기