Compiled & Interpreted

Compiled Language

  • CPU가 바로 이해할 수 있는 기계어로 소스코드를 변환
  • 소스코드 처리와 분석에 많은 시간 소요
  • 일반적으로 실행이 빠름
  • 컴파일된 기계어는 플랫폼 의존적

Interpreted Language

  • 소스코드를 Intermediate Code로 변환
  • interpreter는 Intermediate Code를 바로 실행 가능
  • 플랫폼에 상관없이 interpreter만 있으면 코드를 실행/플랫폼에 독립적
  • CPU가 아닌 interpreter가 바로 이해할 수 있는 기계어로 소스코드를 변환
  • 소스코드 처리와 분석에 적은 시간 소요
  • 상대적으로 실행이 느림

static typing vs. dynamic typing

동적 타이핑 dynamic typing

  • Python, Ruby, php, …
  • 변수의 타입을 런타임에 정의
    • 컴파일시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드를 작성할 수 있음
  • 런타임에서 타입 에러가 발생하는 경우 이를 디버깅하기 까다로움

정적 타이핑 static typing

  • C, C++, C#, …
  • 변수의 타입을 컴파일 타임에 정의
    • 타입 에러로 인한 문제를 실행 전에 발견해 에러를 미연에 방지
    • 컴파일 타임에 타입을 정했기 대문에 실행 속도가 빠름

dynamic typing을 꺼려하는 이유 (static type을 사용하는 경우)

  • 런타임에서 타입 에러가 발생하는 경우 이를 디버깅하기 까다로움
  • 실행 프로그램의 속도가 현저하게 빠르다
  • 동적 타이핑 언어도 내적으로는 타입이 정의되어 있고, 여기서 발생하는 에러를 체크해야한다

출처

Categories: ,

Updated: