Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자바의 정석 기초편 ch9
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch5
- 자바의 정석 기초편 ch12
- 스프링 mvc2 - 로그인 처리
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch14
- 스프링 고급 - 스프링 aop
- 스프링 mvc2 - 검증
- 자바 중급1편 - 날짜와 시간
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch4
- 자바 기초
- @Aspect
- 자바의 정석 기초편 ch6
- 데이터 접근 기술
- 자바의 정석 기초편 ch2
- 자바 중급2편 - 컬렉션 프레임워크
- 자바의 정석 기초편 ch7
- 2024 정보처리기사 수제비 실기
- 스프링 입문(무료)
- 자바의 정석 기초편 ch1
- 자바 고급2편 - io
- 스프링 트랜잭션
- 2024 정보처리기사 시나공 필기
- 자바의 정석 기초편 ch13
- 람다
- 자바로 키오스크 만들기
- 자바로 계산기 만들기
- 자바 고급2편 - 네트워크 프로그램
Archives
- Today
- Total
개발공부기록
Managed - Unmanaged 언어의 차이는 무엇이고 어떤 장, 단점이 있는가 본문
728x90
Managed 언어
정의
애플리케이션 실행 시, 가상 머신(JVM, .NET CLR 등)이나 런타임 환경이 메모리 관리, 보안, 예외 처리 등 여러 작업을 대신 수행하는 언어를 뜻한다
특징
자동 메모리 관리
- 가비지 컬렉터가 메모리 할당 및 해제를 자동으로 수행해 메모리 누수 가능성을 줄인다
런타임 검사
- 타입 안정성, 경계 검사 등을 통해 실행 중 오류를 미연에 방지한다
보안 및 안정성
- 관리되는 환경 덕분에 버퍼 오버플로우 같은 저수준 취약점 발생 확률이 낮다
대표적인 언어
Java: JVM 위에서 실행되며 자동 가비지 컬렉션을 제공한다
C#: NET CLR 환경에서 동작하며 강렬한 타입 검사와 메모리 관리를 지원한다
VB.NET, F#: .NET 환경의 다른 언어들도 Managed 언어 범주에 속한다
Unmanaged 언어
정의
컴파일 된 후 OS에서 직접 실해오디며 메모리 할당, 해제, 포인터 관리 등 시스템 자원을 개발자가 직접 제어하는 언어를 뜻한다
특징
수동 메모리 관리
- malloc/free, new/delete 등을 이용해 개발자가 직접 메모리를 관리해야 한다
직접 하드웨어 제어
- 운영체제나 하드웨어와 직접 상호작용할 수 있어 성능 최적화에 유리하다
낮은 추상화 수준
- 하드웨어와 가까운 레벨에서 작동하므로 세밀한 제어가 가능하지만 실수 시 오류 위험이 크다
대표적인 언어
C: 메모리 할당과 해제를 개발자가 직접 관리하며 OS와 가까운 시스템 프로그래밍에 적합
C++: 객체 지향 기능과 함께 직접 메모리 관리, 포인터 등을 사용해 효율적인 성능과 세밀한 제어 제공
Assembly: 가장 낮은 수준의 언어로 하드웨어와 직접 소통하며 매우 빠르지만 개발 난이도가 높음
주요 차이점 비교
메모리 관리
- Managed: 런타임이 가비지 컬렉션을 통해 메모리를 자동으로 관리한다
- UnManaged: 개발자가 메모리 할당과 해제를 직접 처리하여 최적화를 할 수 있지만 오히려 메모리 누수나 해제 오류 위험이 있다
성능 및 최적화
- Managed: 자동 메모리 관리와 추가 런타임 체크 때문에 약간의 오버헤드이 발생하여 UnManaged 언어 방식보다는 성능이 떨어진다
- UnManaged: 직접 제어가 가능하여 성능 최적화가 용이하지만 잘못된 관리 시 심각한 버그나 시스템 오류가 발생할 수 있다
개발 생산성 및 유지보수
- Managed: 메모리 관리 부담이 줄어 개발 속도와 코드 안정성이 높아져 디버깅과 유지보수가 상대적으로 쉽다
- UnManaged: 세밀한 제어가 가능하나, 개발자가 모든 것을 직접 처리해야 하므로 코드 복잡도 및 개발 시간이 증가할 수 있다
보안
- Managed: 자동 검사와 제한된 메모리 접근으로 보안 취약점이 줄어든다
- UnManaged: 직접 메모리 접근 및 포인터 연산 때문에 버퍼 오버플로우 취약점이 발생할 위험이 있다
사용 목적 및 선택 기준
Managed 언어
- 개발 생산성을 중시하고 메모리 관리나 보안 등에서 기본적인 안정성을 제공받고자 하거나 기업 애플리케이션, 웹 서버, 모바일 앱 등 안정성과 유지보스가 중요한 프로젝트에는 Managed 언어가 적합하다.
UnManaged 언어
- 성능이 극도로 중요하거나 하드웨어와 밀접하게 상호작용해야 하는 시스템 프로그래밍에서 유리하므로 게임 엔진, 임베디드 시스템, 운영체제 커널 등에서 세밀한 제어가 필요할 때 UnManaged 언어가 적합하다
결론
- Managed 언어는 개발자 부담을 줄여 빠른 개발과 안전한 실행을 보장하지만 약간의 성능 손실이 있을 수 있다
- 반면에 UnManaged 언어는 최적화와 직접 제어가 가능해 성능면에서 유리하지만 그만큼 관리의 어려움과 오류 발생 위험이 존재한다
728x90