。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

프로젝트/새로이

Managed Language / Unmanaged Language

quarrrter 2023. 12. 7. 15:14

 

Managed Lanaguage 

메모리 관리를 언어상에서 알아서 해주는 언어

특정 런타임 환경 내에서, 프로그램을 생성하도록 설계된 언어. 

인터프리터나 VM을 지원하고, 프로그램의 코드가 이 위에서 동작하도록 설계되어 있음. (소스코드 컴파일 & 동작)

VM은 메모리 관리(Garbage Collecotr) 역할을 수행한다. => Java나 Python 을 사용할 때, 메모리에 대한 생각은 하지 않고 작성한다. 

 

=> JAVA, Python, C#, Javascript

 


 

Unmanaged Language 

사용자가 직접적으로 하드웨어 CPU, Memory 를 관리할 수 있다.   

VM과 같은 런타임 환경의 관리를 받지 않는 언어.

일반적인 컴파일 수행 >> bytecode 생성 >> 실행파일 생성

 

=> C, C++


[컴파일 과정]

 

C, C++

소스코드 -> 전처리기 -> 컴파일러 (정적 컴파일) -> 링커 -> 실행파일 -> 실행

                         컴파일 타임                                       런타임

 

 

Java

JVM(Java Virtual Machine)

소스코드 -> 컴파일러 (정적 컴파일) -> .class files (중간파일) ->

        컴파일 타임

실행 (JVM 동작) -> Just-In Compiler (동적 컴파일) -> NativeCode

        런타임

 

Python

Python Interpreter(CPython, PyPy)

소스코드 -> Python Interpreter (동적 컴파일, 인터프리팅) -> 실행

 


컴파일 과정

소스코드(Input) -> 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 -> 실행파일(Output)

 

전처리기: 소스코드 자체에 대한 수정

컴파일러: 소스코드를 어셈블리 코드로 번역

어셈블러: 어셈블리 코드를 목적코드로 번역

링커: 생성된 목적코드들을 링킹하여 실행파일 생성

 

 

컴파일타임 & 런타임

 컴파일타임 : 실행파일이 만들어지는 순간까지

런타임 : 실행파일이 실행된 후의 시간대

 

소스코드(Input) -> 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 -> 실행파일(Output) -> 실행

                                 컴파일타임                                                                 런타임

 

 

 

정적타입 언어 (Static Typed Language)

컴파일 시에 변수의 타입이 결정되는 언어

=> C, C++, Java, C# 

=> 타입 에러로 인한 문제를 컴파일 타임에 해결할 수 있기 때문에 안정성이 높다. 

=> 컴파일 시에 미리 타입을 결정하기 때문에 실행속도가 빠르다.

string cake = "cheeseCake";
int score = 1000;

 

 

 

 

동적타입 언어 (Dynamic Typed Language)

런타임 시 자료형이 결정되는 언어

=> Python, JavaScript, Ruby 

=> 자료형이 런타임에 결정되기 때문에, 소스코드 작성 시 자료형을 명시적으로 지정해줄 필요가 없다. >> 유연성이 높다

=> 코드 작성이 효율적이다.

a = 1
b = []
c = 'cheese'

 

 

 

 

 

'프로젝트 > 새로이' 카테고리의 다른 글

RuntimeException / IllegalArgumentException  (1) 2023.12.07
Optional  (0) 2023.12.04
트랜젝션  (2) 2023.12.04
Stream  (3) 2023.12.04