Loading...

JAVA / / 2022. 1. 6. 22:48

자바 3강. 컴파일과 인터프리터

반응형

컴파일 : 전체 코드를 한 번에 번역 (ex. C언어)

실행 속도가 빠름

 

인터프리터 : 한 줄씩 읽어서 번역 (ex. 파이썬, 자바 스크립트)

컴파일에 비해 속도가 느림

 


 

쌀을 보관할 쌀창고의 크기를 설계한다고 생각해보자.

 

쌀의 크기와 양을 알고 있다면

창고의 크기를 미리 설계할 수 있고, 창고의 낭비가 없을 것이다.

들어올 쌀의 양과 크기가 정해져 있는 것을 정적이라고 한다.

 

컴파일이 정적인 언어이다.

 

컴파일은 메모리 공간 설계가 완벽해서 공간에 낭비가 없다.

 

들어올 쌀의 양과 크기를 모른다면 쌀이 들어올 때마다 창고를 설계해야 한다.

이것을 동적이라고 한다.

 

인터프리터동적인 언어이다.

 

이때 창고의 크기보다 더 큰 쌀이 들어왔다면

더 큰 공간의 공터에 쌀을 보관하고

창고에는 공터의 주소를 참조하게 된다.

 

여기서 더 큰 공간은 힙(heap)이라고 하고, 주소를 참조해주는 것을 포인터(pointer)라고 한다.

 

힙(heap) : 동적으로 할당되는 데이터가 할당되는 영역

 

힙은 실제로 존재하는 특수한 공간이 아니고 실제 메모리 영역을 지정한 것이다.

 

포인터(pointer) : 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간 주소를 가리키는 변수

포인터를 사용해 주소를 참조해줄 때 '*주소의 이름' 형식으로 사용한다.

나중에 자세히 알아볼 것이다.

 

힙 공간에는 동적으로 할당되는 데이터가 들어가게 된다.

힙 공간을 사용하는 이유는 데이터의 크기를 알 수 없기 때문에 사용하는 것이다.

 


 

커피 빨리 마시기 게임을 한다고 생각해보자.

 

게임이 시작하기 전부터 끝날 때까지 계속 세팅되어 있는 것은 커피머신과 전광판이다.

이것은 static 영역에 저장한다.

CPU와 가장 가까운 메모리에 저장되어있고 메모리에 가장 많은 부하를 준다.

 

커피머신과 전광판만 있는 상태로 게임이 시작하고

1번 참가자가 동적으로 등장했다.

이 1번 참가자의 정보는 heap에 저장된다.

1번 참가자가 커피머신에서 받은 커피도

동적으로 들어온 데이터이므로 heap에 저장된다.

 

stack에는 1번 참가자가 커피를 마시기 시작한 시간, 다 마신 시간 정보,

즉 시간 축으로 이루어지는 행위(함수, 메서드)를 저장한다.

 

3시 18분에 마시기 시작했다는 데이터와

3시 19분에 끝났다는 데이터가 stack영역에 저장된다.

연산의 결과로 1분이라는 데이터는 전광판에 출력하기 위해 heap에 저장된다.

 

연산의 결과가 끝나고 나면 stack에는 데이터들이 사라진다.

(이것은 동적 소멸이 아님!)

 

1번 참가자가 커피 마시는 행위가 끝나고 나면

heap 영역에서 동적으로 소멸하게 된다.

 

동적으로 할당했던 메모리 영역 중 필요 없게 된 영역을

소멸하는 기능을 쓰레기 수집(Garbage collection)이라고 한다.

이 동적 소멸은 자바에서만 지원하는 기능이고 다른 언어는 지원하지 않는다.

 

하지만 heap에 저장되어 있는 1분이라는 결과 데이터는 소멸되지 않는다.

전광판에서 heap 영역에 1분 데이터를 참조하고 있기 때문이다.

 

참조하고 있는 데이터는 소멸되지 않는다는 것을 알 수 있다.


커피 빨리 마시기 게임으로 자바에서 매우 중요한

static, stack, heap 개념에 대해 간단히 알아보았다.

 

메모리가 차지하는 범위이다.

static 사용을 지양하고

stack을 사용하는게 메모리에 좋다!

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형