[일문일답][Java] Managed - Unmanaged 언어의 차이

2022. 8. 23. 23:25일문일답/Java

Managed Code

CLR(Common Language Runtime, 공통 언어 런타임) 이나 JVM 같은 런타임에서 실행이 관리되는 코드

다음 그림은 JVM 환경(CLR도 포함)에서 코드가 컴파일러에 의해 Native Code로 변환되는 과정이다.

JVM Compile
CLR Compiler

컴파일러에 의해 생성된 중간언어 IL(Intermediate Language)는 JVM(CLR) 환경에서 현재 OS 환경에 맞는 Native Code로 변환되어 동작한다. 그리고, 이 변환 과정을 제공함으로써 Managed Code는 다양한 OS 환경에서 동일하게 동작할 수 있게 된다.

그리고 이렇게 JVM(CLR)에 의해 관리되는 언어들을 Managed Code라고 한다. Virtual Machine 위에서 코드가 실행된다.

 

특징

  • 객체 지향 모델 : Java 등의 언어는 OOP로 설계되어 있다.
  • 언어의 독립성 : 어떤 언어로 작성하든 문제없이 잘 동작한다.
  • 형 안정성 : 변수의 형(type)을 엄격하게 제한한다.
  • Garbage Collection : 메모리 관리를 가비지 컬렉터에서 관리한다.
  • 단일 통합 라이브러리 : 플랫폼 레벨에서 많은 API를 제공한다.

장점

  • 메모리 관리, 보안, 스레딩에 관련된 서비스를 JVM(CLR)에서 제공해준다.
  • JIT 컴파일러에 의해 최적화된 변환과정을 제공받는다.
  • OS에 종속되지 않고 개발할 수 있다. (컴퓨터 아키텍처에 따라 새로 컴파일할 필요가 없음)

단점

  • Native Code와 비교하여 실행 속도가 느리다.
  • JVM(CLR)이 설치되어 있지 않으면 실행할 수 없다.

 

 

Unmanaged 언어 (Native Code)

CLR(JVM)에 의존하지 않는 언어

코드가 바로 기계 언어(Machine Code)로 컴파일되고 컴파일하는 환경과 동일한 환경에서만 실행이 가능하다. Unmanaged Code는 IL(Intermediate Language)을 따로 만들지 않고 컴파일 이후 바로 실행되는 Native Code를 만들어 낸다.

 

장점

  • Managed Code와 비교하여 속도가 더 빠르다.

단점

  • 확장성의 한계를 가진다. → 다른 환경에서 코드를 사용하기 위해서는 새롭게 컴파일을 해야 한다.