[Tech Interview]
Managed - Unmanaged 언어의 차이는 무엇이고 어떤 장, 단점이 있나요?
Managed 언어 vs Unmanaged 언어
분류 기준 : [메모리 관리 주체]
Managed Language는 외국에서는 많이 쓰이지 않는 용어로, Managed Code라는 말이 많이 쓰인다고 합니다.
Managed Code는 MS 진영에서 C#을 만들면서 사용된 용어로,
코드가 하드웨어에서 바로 구동되는 것이 아니라, 특정 런타임 환경에 의해 관리되고 의존하는 코드를 의미합니다.
여기서 특정 런타임 환경이란 자바의 JVM이나 C#의 CLR, 자바스크립트의 V8 같이 특정 언어 코드를 구동해주는 가상머신, 인터프리터, 엔진 등을 의미한다고 합니다.
즉, 가상머신 위에서 관리되고 작동되는 Java와 같은 언어로 작성된 코드를 Managed Code 라고 할 수 있는 거죠.
가상머신, 인터프리터, 엔진 등의 머신들은 코드들의 메모리를 관리해주거나 보안, 스레드 운용 등의 보조를 받는 역할도 합니다.
메모리의 종류에는 (Code, Data, Heap, Stack) 영역들이 있는데,
Code | 실행할 코드(프로그램) |
Data | 전역변수, 정적변수 |
Heap | 사용자 동적할당 (런타임에 결정) |
Stack | 지역변수, 매개변수 |
이 메모리 영역 중 프로그래머가 관리하는 Heap 영역을 위의 머신들이 관리해 주는지 안해주는지에 따라 Managed와 Unmanaged로 나뉘게 되는 것입니다.
Managed Language 매니지드 언어
대표적인 언어로는 C#, Java가 있습니다.
장점
- 메모리의 할당과 해제를 통한 메모리 관리없이, 언어 자체적으로 메모리를 관리합니다.
- 런타임 환경으로부터 다양한 도움을 받을 수 있습니다. 메모리 관리를 자동으로 해주기 때문에 메모리 누수의 문제에서 보다 자유롭습니다.
- 코드가 런타임환경에 의존하므로 하드웨어나 OS에 종속되지 않습니다.
단점
- 메모리를 구체적으로 관리 할수 없기 때문에 프로그래밍의 자유도가 낮으며 비정기적인 메모리 정리가 이루어집니다.
UnManaged Language 언매니지드 언어
대표적인 언어로는 C,C++이 있습니다.
장점
- 언매니지드 언어에 비해 속도가 빠릅니다.
- 메모리를 구체적으로 관리 할수 있기 때문에 프로그래밍의 자유도가 높습니다.
단점
- 메모리의 할당과 해제를 통해 직접 메모리를 관리하여 메모리의 누수가 없게 신경을 써줘야 한다는 단점이 있습니다.
- 프로그래머가 실수할 경우 Memory Leak이 발생할 수 있다.
[Tech Interview] 태그로 작성한 글은 다음 git 저장소의 기술인터뷰 질문을 주제로 공부한 내용을 담고 있습니다.
https://github.com/Lob-dev/Junior-Back-end-Developer-Concepts/blob/main/Job%20interview.md
GitHub - Lob-dev/Junior-Back-end-Developer-Concepts: Java, Spring 위주의 Back-end 신입 개발자를 위한 저장소입니
Java, Spring 위주의 Back-end 신입 개발자를 위한 저장소입니다. 지속적인 개선, 업데이트를 진행하고 있습니다. - GitHub - Lob-dev/Junior-Back-end-Developer-Concepts: Java, Spring 위주의 Back-end 신입 개발자를 위한
github.com
'LANGUAGE > Java' 카테고리의 다른 글
[TI][Java] Java 접근 제어자, Protect와 Private의 사용 (0) | 2022.01.28 |
---|---|
[Java / 2. 조건문과 반복문 ] 1. 세 가지 제어 구조 (0) | 2021.03.27 |
[Java] 1-6. 입력 System.in (0) | 2021.03.26 |
[Java] 1-5. 자동 타입 변환 / 강제 타입 변환 (0) | 2021.03.26 |
[Java] 1-4. 상수의 선언 (0) | 2021.03.26 |