-

[JAVA 문법 Step 1] - Static, Heap, Stack이란 본문

CS/JAVA

[JAVA 문법 Step 1] - Static, Heap, Stack이란

흣차 2021. 11. 26. 01:35
728x90
반응형

컴퓨터에는 메모리라는 것이 있습니다. 저장 영역이란 뜻인데요. 서랍처럼 구성이 되어 있습니다.

이런식으로 서랍처럼 값을 저장할 수 있습니다. 

그리고 각 위치값을 인덱스라고 부르고 그 인덱스는 CPU에 의해 연산이 되어집니다.

이 메모리 영역은 단순히 큰 박스라고 했는데 자바에서는 이 박스를 영역을 나누어서 어디부터 어디까지는 Static, 어디부터 어디까지는 Heap, Stack을 구분해서 사용합니다. 

즉 

이렇게 논리적으로 구분을 하여 자바에서 사용됩니다. 

예를 들어보겠습니다. 

여러분이 커피를 테이크-아웃하기 위해 카페를 갔다고 가정해보겠습니다.

저는 얼죽아이기 때문에 오늘도 여김없이 아이스 아메리카노를 주문했다고 칩시다.

그럼 이 커피를 주문하고 제작하고 먹는데까지 시간이 분명 걸리겠죠???

이 때 이것을 컴퓨터에 명령한다고 가정해 봅시다.

그럼 커피를 주문하고 제작하고 먹는 것을 메모리에 띄워야 하고 메모리에 올라간 그 명령들을 연산하는건 CPU가 수행합니다. 이 때 제 뒤에 있던 다음 사람이 주문하려고 줄을 서고 있지 않고 저만 주문을 했다고 한다면 우리 컴퓨터는 계속해서 커피 주문과 제작 동작을 사람이 올때까지 기다리고 있을 이유는 없습니다.

즉, 프로그램이 시작되기 전에 미리 필요한 것을 올려야 하는데 종료할 때까지 커피 주문과 제작은 굳이 계속해서 메모리에서 갖고 있지는 않아도 된다는 얘기입니다. 하지만 커피 머신은 다릅니다. 커피 머신이란건 계속해서 메모리에 띄워놓아야 하기 때문입니다. 그러므로 이것은 부하가 상당히 크기 때문에 비교적 적은 대상이 static에 사용되어야 합니다.

그러므로 Static은 커피 머신만 담겨야 합니다. 

하지만 Heap은 조금 다른 영역입니다. Heap은 정확한 의미로 동적 할당 영역이라고 합니다.

프로그램이 실행되는 도중에 원할 때만 띄워지는 부분입니다. 예를들어 우리가 커피를 주문할 때 저는 아이스 아메리카노를 마시려고 하고 제 뒤에 사람은 딸기 스무디를 마시려고 한다고 가정해보겠습니다. 우리가 주문하려고 포스기에 메뉴를 입력하여 계산을 돕는 과정이 일어날 때 Heap에서는 우리가 하고 있는 이 모든 순간이 기록되고 있습니다. 하지만 주문이 끝나고 다음 사람의 주문을 받을 때는 저의 영역이 끝나게 됩니다. 이것이 Heap입니다. 컴퓨터 입장에서 필요한 데이터만 받아서 저장하면 훨씬 더 효율적으로 데이터를 저장할 수 있습니다. 

Heap은 즉 메모리 영역에 떴다 사라졌다 하기 때문에 생명주기가 대단히 짧습니다.

 

그렇다면 Stack은 무엇일까요??? 우리 게임에서 스택이란 의미가 어떻게 사용되나요?? 스택은 주로 무언가를 쌓을 때 사용됩니다. 이 메모리 영역에서 스택은 Heap에서 사용되었던 커피 주문을 하는 주문 시간이 기록됩니다. 그렇기 때문에 메모리에 아주 잠깐 떴다가 사라지는 것입니다.

 

더 쉬운 예를 보여드리겠습니다.

태양은 지구가 생기기 이전부터 존재했습니다. 지구의 수명인 45억년 동안 태양은 늘 지구 곁에 존재했습니다. 이 때 태양은 Static이 됩니다. 그리고 1990년대에 제가 태어날 때(정확한건 비밀) 이 때의 순간은 지구의 입장에서 본다면 아주 찰나의 순간인겁니다. 제가 살아 있는 동안 저의 생명주기는 Heap이 될 수 있습니다. 그리고 제가 태어난 시각을 기록한다면 이것이 Stack이 되는 것입니다. 이해가 가셨나요???

자바를 이클립스를 이용하여 컴파일 하다보면 여러 모르는 용어에 부딪힐 때가 많습니다. 그럴 때마다 당황하지 말고 조금씩 조금씩 공부하다보면 어느새 누구보다 뛰어난 개발자가 될 수 있을 것입니다.

개발자는 매일 공부해야 살아남을 수 있는 직업이라고 늘 말합니다. 도태되지 않기 위해 항상 새로운 기술에 대비할 줄 알아야 하며 젊은 사람들의 말도 귀담아 들을 줄 알아야 오랫동안 살아남을 수 있습니다. 오랫동안 개발자를 하고 싶다면 얇더라도 항상 꾸준히 공부하여 새로운 것을 익히도록 준비해봅시다. 감사합니다.

 

728x90
반응형
Comments