[기술요약2] Unmanaged와 Managed란? – 각 언어의 차이점, 개념, 특징

managed unmanaged 의 설명 차이 개념

Unmanaged vs Managed, 컴퓨터 언어의 가장 큰 틀


프로그래밍 언어를 분류하는 방법은 많다. 함수형 언어냐, 절차적 언어냐, 개체지향 언어냐. 또는 인터프리터 언어냐, 컴파일 언어냐. 웹 언어냐, GUI 언어냐. 자바진영 언어냐, 마소진영 언어냐, 다른진영 언어냐 등.

근데 오늘은 가장 근본적인 언어의 분류를 이야기 해보려 한다. 언어는 아주 크게 딱 두 부류로 나뉜다.

  1. Unmanaged 언어
  2. Managed 언어

​관리하지 않는, 관리하는 언어로 나뉜다는 말이다. 그러면 관리한다는 말은 뭘까? [컴퓨터가] 관리한다는 의미다. 무엇을? [컴퓨터가] [메모리를] 관리한다는 의미이다. 컴퓨터가 메모리를 관리해주지 않는 언어, 컴퓨터가 메모리를 관리해주는 언어로 나뉘는 것이다. 컴퓨터가 메모리를 관리해주지 않는 언어는 그러면 메모리를 누가 관리해주나? 바로 나 자신이다. 개발자가 직접 메모리의 할당과 해제를 해줘야 한다.

Unmanged 언어란?


Unmanaged에는 대표적으로 어셈블러나 C/C++이 있다.(사실 이 언어 밖에 없다고 봐도 무방함) C/C++에서 malloc, calloc, new, delete 하던 것들이 다 우리가 직접 메모리를 할당하고 해제하는 것이었다. Unmanaged 언어는 개발자가 직접 코드에서 메모리를 할당하고 해제하며 개체의 수명을 관리해야 한다.

Managed 언어란?


Managed 언어에는 대표적으로 Java, C#, Python등이 있다. 사실 어셈블러와 C/C++을 제외한 모든 언어가 Managed 언어라고 봐도 무방하다. 이 언어들의 특징은 GC(가비지 컬렉터)가 존재해서 사용자의 명령과는 무관하게 메모리의 수명을 추적, 관찰하며 불필요한 것을 정리한다는 것이다.

Unmanged vs Managed, 무엇이 더 중요할까?


이쯤되면 컴퓨터 전공자는 아 당연하고 고리타분한 소리하네라고 할 것이다. 지겹도록 배운 것이기 때문이다. 근데, 요즘은 워낙 코딩하는 사람이 많다. 전공을 떠나서 프로그래밍에 흥미를 갖고 직접 해보는 사람들이 매우 많다. 이런 사람들은 80% 이상은 Python으로 입문하기 때문에 모를 수 있고… 심지어는 대학교 컴퓨터 관련 학과 커리큘럼에 Unmanaged 언어가 없는 학교가 있다.(이걸 컴퓨터 전공이라고 봐야할까…허허…)

컴퓨터를 배우고자 하는 사람들에게 하는 조언은 Unmanaged 언어부터 먼저 배워보라는 것이다. Unmanaged가 있은 후에 Managed 언어가 생겨났다. 그 말인 즉슨 Managed 언어에서 컴퓨터가 대신 해주는 메모리 관리 기능을 결국에는 Unmanaged 언어로 누군가가 개발한 것이라는 것이다. Unmanaged 언어를 알면 좀 더 기계를 잘 이해할 수 있을 것이다. 기계를 더 잘 이해해야 심화 된 문제를 해결할 수 있다. 다만, 그렇다고 Unmanaged가 짱이고 Managed는 배울필요가 없다는 것은 절대 아님. 우리가 접하는 대부분의 Frontend 제품들은 모두 Managed 언어로 구성되어 있다. 무조건 익혀야하는 언어라는 의미다.​

정리하며


솔직히 말하면 세상이치가 그렇듯, 컴퓨터도 다 똑같다. 근본적인 원리와 이치를 잘 알면, 다 거기서 거기임. 새로 제공되는 신기술들은 그 근본을 어떤 식으로 활용하냐의 차이일 뿐이다. 그래서 근본적인 원리와 이치가 참으로 중요하다.


이전글

다음글

참조하면 좋은 글

.net – Difference between “managed” and “unmanaged” – Stack Overflow


Posted

in

,

by

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다