Search
Duplicate

Managed, Unmanaged 언어

Managed Code

CLR이나 JVM같은 런타임에서 실행이 관리되는 코드
다음 그림은 JVM환경(그리고 CLR)에서 코드가 컴파일러에 의해 Native Code로 변환되는 과정이다.
JVM Compile
CLR Compiler
컴파일러에 의해 생성된 중간언어 IL(Intermediate Language)는 JVM(CLR)환경에서 현재 OS환경에 맞는 Native Code로 변환되어 동작한다. 그리고 이 변환과정을 제공함으로써 Managed Code들은 다양한 OS환경에서도 동일하게 동작할 수 있게 된다.
그리고 이렇게 JVM(CLR)에 의해 관리되는 언어들을 Managed Code라 한다.

특징

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

장점

메모리 관리, 보안, 스레딩에 관련된 서비스를 JVM(CLR)에서 제공해준다.
JIT 컴파일러에 의해 최적화된 변환과정을 제공받는다.
운영체제에 종속되지 않으며 개발할 수 있다.

단점

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

Unmanaged 언어(Native Code)

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

장점

Managed Code와 비교해서 속도가 더 빠르다.

단점

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