자바에서 자료형은 크게 두 가지로 나뉜다.
Primitive Type과 Reference Type으로 나뉘는데 주 이야기가 아니니 간단하게 알아보자.
1) Stack
Stack 은 후입선출(LIFO) 의 특성을 가지며 스코프(Scope) 의 범위를 벗어나면 스택 메모리에서 사라진다.
중괄호(brace) 시작과 끝, 즉 중괄호 내부가 범위가 된다. 예를 들면 while,if, for 의 중괄호
중괄호 안의 값은 그 범위를 벗어나면 스택에서 사라지게 된다. (닫는 중괄호가 실행 되는 순간, 현재 할당된 스택 메모리는 사라지게 된다.
2. Heap
Heap은 instance 객체가 제거되기 전까지 스코프와 상관없이 값이 유지된다. stack 메모리에 있는 값은 스코프를 벗어나면 값이 상실되지만 c/c++ 에서 힙에 생성된 값은 생성하면 개발자가 직접 제거 해야 한다.
3. stack 메모리 할당 과정 살펴보기
public class Stack {
public static void main(String[] args) {
int num1 = 20;
int num2 = 30;
int sum = 0;
sum = addNum(num1, num2)
System.out.pringln(sum);
}
public static int addNum(int n1, int n2) {
int result = n1 + n2;
return result;
}
}
<그림 상세설명>
stack1(1)
stack(2)
stack(3)
stack(4) - main 함수까지 종료가 되면 stack 에 있던 모든 데이터들이 사라지면서 프로그램이 종료된다.
4. Heap 메모리 할당 과정 살펴보기
public class Stack {
public static void main(String[] args) {
int age = 19;
String name = "Sejin Hong"
}
}
public class Stack {
public static void main(String [] args) {
String url = "https://";
url += "sejin.com";
}
}
다음 구문을 실행해 보면 문자열이 합쳐지는 과정에서 기존에 있던 url에 합쳐지는 것이 아니라 새로운 Object 를 생성하게 되고 새로운 Heap 영역을 할당하게 된다. (참조 하고 있는 값이 없기 때문에 unreachable Object 가 된다.)