• 컴파일러의 의미
    • 고급프로그래밍언에 쓰여진 프로그램으로 소스코드에서의 오브젝트로 변환 되는 것
      • 소스코드 : 말그대로 프로그래밍을 위한 일련의 텍스트들
      • 오브젝트코드 : 컴파일러에 의해 생성된 코드를 의미한다. 프로그래머는 소스코드를 작성함. 즉, 소스코드는 개발자가 사용하는 언어에 따른 명령어들의 조합이다. 그러나 명령어 실행을 위해서는 기계어로, 저레벨 언어로 쓰여져만 하드웨어 제어가 가능하다.
        • 저레벨 언어 : 기계어 또는 어셉블리어를 의미한다. 하드웨어와 더 밀접한 언어이다.
        • 고레벨 언어 : 기계어보다는 좀 더 인간의 언어에 가깝다. 읽기, 유지보수가 용이하다, 즉 기계어로 변환하기 위해 인터프리터나 컴파일러가 필수적으로 요구된다.
        • 컴파일러는 고레벨 언어를 저레벨언어로 변경하기 위해 필요한 장치 또는 도구라고 볼수있다.
  • 컴파일러와 인터프리터
    • 컴파일러, 인터프리터 둘 다 C나 자바같은 고레벨언어로 작성된 프로그래밍 언어를 기계어로 변환하지만 그 과정에서 차이가 있다.
    • 컴파일러는 전체소스코드를 보고 명령어를 수집하고 재구성함.
    • 인터프리터는 소스코드의 각 행을 연속적으로 분석하며 실행
      • 고레벨 언어 -> 중간 코드(intermediate code)로 변환하고 이를 각 행 마다 실행한다. 
    • 컴파일러가 실행시간이 빠르다.
    • 컴파일러는 전체 소스코드를 변환 한 뒤 에러를 보고하지만 인터프리터는 각 행 마다 실행하여 도중에 에러가 나면 바로 알려준다.
    • 예를 들어 파이썬은 인터프리트 언어이고, c, c++은 컴파일 언어이다. 자바는 인터프리터 컴파일러 모두 사용
  • Java compiler
    • "helloworld" 작성->javac 명령어를 통해 (helloworld자바 파일 -> 클래스파일로 변환)
    • temp.java ->javac(java compiler)가 바이트코드로 쓰여진 .class 파일로 변환 
      • .class 파일은 기계어인가?
        • 아니다. JVM을 위한 기계어로 변환하는 것이다.
  • Java 인터프리터
    • temp.java->javac(java compiler)->.class ->Java interpreter -> 기계어
  • 왜 java는 기본적으로 컴파일과 인터프리터를 병행하는 것 일까?
    • 플랫폼에 종속되지 않는다.
      • 속도가 느리지만 플랫폼에 종속되지않는다.
    • 자바 바이트코드는 컴퓨터와 프로그램 사이에 버퍼 역할을 한다.
      • 보안적으로 장점이 된다. 클래스 파일을 다운로드 받은 후 자바 인터프리터를 통해 바이러스나 기타 악성 프로그램에 대응 하는 가드 같은 보안 계층애 의해 보호 될 수 있다는 의미.
    • 반드시 자바언어에만 해당되는 것은 아니다.
      • 예를들어 파이썬 코드를 자바 바이트코드로 컴파일한 Jython을 java로 인터프리트 할 때, 또 ML, Lisp, 포트란 컴파일러가 자바 바이트코드로 컴파일 하는것도 비슷한 맥락

opensourceforgeeks.blogspot.com/2013/03/difference-between-compiler-interpreter.html

 

Difference between Compiler, Interpreter and Assembler

Difference between Compiler, Interpreter , Assembler and JIT or Just in time compiler.

opensourceforgeeks.blogspot.com

 

'개인공부 > ICT상식' 카테고리의 다른 글

[ICT 상식] 데이터 통신  (0) 2020.11.05
[ICT 상식]소프트웨어 공학  (0) 2020.11.05
[ICT 상식]  (0) 2020.11.04
[ICT 상식]  (0) 2020.11.03
ICT 상식  (0) 2020.11.02

+ Recent posts