컴파일 언어와 인터프리터 언어

지구·2022년 3월 29일
0
post-thumbnail

compile언어와 interpreter언어
(script 언어) 비교 전, 프로그래밍 언어에 대해 알아보면

컴파일?

  • 컴퓨터가 이해할 수 있는 언어는 0과 1로 이루어진 이진수이다. 사람이 이해할 수 있는 프로그래밍 언어를 컴퓨터가 이해할 수 있도록 이진수로 변환하는 작업을 '컴파일링'이라고 한다.

프로그래밍 언어

  • 모든 프로그래밍 언어는 컴퓨터에게 어떤 '명령'을 내리기 위해 존재한다. 사람이 이해할 수 있으면서, 컴퓨터에게 임무를 지시할 수 있는 언어이다. 프로그래머는 이러한 언어들을 사용하여 프로그램을 만드는 사람이다.

  • 이러한 프로그래밍 언어는 점점 인간 친화적으로 바뀌어왔고, 이런 '인간 친화적인'언어들을 '고급 프로그래밍 언어, 고수준 언어(high-level language)'라고 부르게 되었다.

  • 고급 프로그래밍 언어의 예는 C, C++, Java, Python 등이 있다.

  • 컴퓨터에 가까울수록 저수준 언어, 인간과 가까울수록 고수준 언어라고 한다.

  • 고수준 이라고 좋거나 낫다는 뜻은 아니다.

저수준 언어(low-level language)

  • 컴퓨터 친화적 : 컴퓨터가 잘 이해할 수 있도록 구체적으로 작성해야 오류를 막을 수 있다. => 정밀한 문법 요구
  • 저사양 컴퓨터에서도 빠르게 동작할 수 있다. 왜? 컴퓨터가 이해하기 쉬우니까!
  • 작은 하드웨으에서 동작하는 저사양 컴퓨터를 통해 작업할때 주로 사용한다 ex) 라디오, 프린터, 스캐너 등..
  • 실행속도는 빠르지만 유지보수가 어렵다(꼼꼼하게 문법을 체크해야하기 때문)

고수준 언어(high-level langauge)

  • 사람이 이해하기 쉬운 언어이다. 문법을 정밀하게 작성하지 않아도 맥락에 따라 생략이 가능하다 => 유지보수가 비교적 쉽다.
    (인간 친화적이라는 예시: print, if~~ while ~)
  • 저수준 언어보다는 컴퓨터 < 인간에게 친화적이기 때문에 컴퓨터가 이해하는 데에 시간이 걸린다. -> 고사양 컴퓨터를 요구한다.
  • 컴퓨터가 이해할 수 있도록 기계어로 번환하는 과정이 필요하다.




고수준 언어는, 실행을 위해 컴파일러인터프리터에 의해 번역이 필요하다.

(여기서 번역이란, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업을 의미)

컴파일 언어

코드 실행 이전에 컴파일러로 한꺼번에 '번역'한 후, 실행하는 언어들.

여기서 '실행'이란, 메모리에 적재된 기계어를 읽고 컴퓨터가 어떠한 아웃풋을 내는 것.

  • 컴파일을 하기 때문에 규모가 큰 프로그램이라면 컴파일 시간이 오래 걸릴 수 있다.
  • 반면, 컴파일 후의 기계어를 통해 프로그램을 실행하기 때문에 실행시간은 빠르다.
  • 하이레벨 언어를 기계어로 번역하고, 번역된 코드를 실행하는 두 가지 단계로 진행됨.
    ex) C, C++, JAVA, Rust, Go

장점

  • 컴파일한 운영체제의 사양에 최적화되어있어 실행속도가 빠르다.
  • 간단한 오류사항도 컴파일할 때 발견되기 쉬워서 버그발견이 쉽다.

단점

  • 실행환경의 제약: 다른 운영체제에서 실행하려면 재컴파일이 필요하다.
  • 코드 일부가 바뀌어도 전체 코드를 다시 컴파일 해야해서 수정이 조금 비효율적이다.

## 인터프리터 언어, 스크립트 언어 #### 인터프리터로 코드를 한줄 씩 읽어가며 '번역'하고 '실행'하는 언어. 여기서 '인터프리터'란, 소스 코드를 바로 실행하는 컴퓨터 프로그램or환경을 의미. * interpreter : 통역사. 통역사가 한 문장씩 통역해주는 걸 생각하자. - 컴파일하지 않고 바로 실행하지만, 코드를 한줄 씩 읽어가며 실행하기 때문에 실행하는 시간이 더 오래걸린다. - 빌드 과정 없이 바로 실행가능하다. - 바로 실행할 수 있는 점은 좋지만, 명령 한 줄 한줄,,, -> 명령 자체의 속도는 컴파일러 언어에 비해 느리다. ex) pytohn, JavaScript, ruby, SQL

장점

  • 코딩 시간이 효율적. 잦은 수정이 발생해도 컴파일 할 필요 x

단점

  • 번역과 실행을 한번에 하기 대문에 실행 속도가 느리다.
  • 실행하기 전에는 오류가 있는지 알 수 없다.





+ 트랜스파일

특정 언어로 된 코드를 다른 언어로 바꾸는 것.
기계어로 바꾸는 컴파일러와는 다르다.
EX) TypeScript

+ 정적타입, 동적타입

  • 컴파일 언어는 대개 정적 타입을 가지지만, 동적타입을 지원하는 언어도 있다.
  • 인터프리터 언어는 대개 동적 타입을 지원하지만, 정적 타입도 대응하는 추세.

참조

프로그래밍과 고수준, 저수준 언어
프로그래밍 언어의 종류 : 저수준 언어&고수준 언어

profile
디자인과 기획이 재미있는 프론트엔드 개발자입니다. 블로그 이사 준비중. . .

0개의 댓글