자바 원시타입, 참조타입(Primitive type, Reference type)
데이터 타입이란, 해당 데이터가 어떻게 메모리에 저장되고 프로그램에서 어떻게 처리되어야 하는지 명시적으로 알려주는 것이다.
자바에서는 크게 기본형타입과 참조형 타입이 있다.
원시 타입(Primitive Type)
- 논리형 boolean, 정수형 byte, int, short, long, 실수형 float, double, 문자형 char 이 있다.
- 8가지 기본형 타입을 미리 정의하여 제공한다.
- 기본값이 있기 때문에 Null이 존재하지 않는다. 기본형 타입에 Null을 넣고싶다면 래퍼 클래스를 활용한다.
- 실제 값을 저장하는 공간으로 스택 메모리에 저장된다.
- 담을수있는 크기를 벗어나면 컴파일 에러가 발생한다.
참조 타입(Reference Type)
- 배열 Array, 열거 Enumeration, 클래스 Class, 인터페이스 Interface가 이에 해당한다
- 기본형 타입을 제외한 타입들은 모두 참조형 타입이다.
- 값이 저장되어있는 곳의 주소값을 저장하는 공간으로 힙 메모리에 저장된다.
- 컴파일 시점에 에러가 없지만, 객체나 배열을 Null 값으로 받았을 경우 NullPointException이 발생한다.
스택(Stack)/힙(Heap) 영역
정적 메모리 스택(Stack) 영역
- 힙 영역에 생성된 객체(Object) 타입의 데이터 참조값이 할당된다.
- 원시타입의 데이터가 값과 함께 할당된다.- 참조값이 아닌 실제 값을 스택에 저장한다.
- 각 쓰레드는 자신만의 스택을 가진다.
- 객체 안 메서드 작업이 종료되면 할당된 메모리 공간은 반환되어 비어진다.
- 함수가 종료된 경우 내부에 선언된 지역변수들은 Stack에서 pop 되어 사라진다.
동적 메모리 힙(Heap) 영역
- 주로 긴 생명주기를 가지는 데이터들이 저장된다.
- 스택에 있는 데이터를 제외한 부분이라 보면 된다.
- 모든 Object 타입(Integer, Sring, ArrayList...) 등이 힙에 생성된다.
- 쓰레드 개수와 상관없이 힙 영역은 단 하남나 존재한다.
- 힙 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수가 스택에 올라간다.
// 힙 메모리 예시를 위한 코드
public class Main {
public static void main(String[] args) {
int port = 4000;
String host = "localhost";
}
}
1. 위 클래스에서 port 는 원시타입(int)에 해당하기에 port = 4000 이 스택 영역에 등록된다.
2. host는 참조타입(String)으로 String 'localhost'는 힙 영역에 등록되고
- String 은 Objec를 상속받아 구현된다. Object 타입은 최상위 부모클래스고, 다형성에 의해 Object 타입으로 레퍼런스가 가능하다.
3. 스택에서 host라는 이름으로 생성된 변수가 힙 영역의 String 'localhost'를 레퍼런스한다.
'개발 > 자바' 카테고리의 다른 글
서블릿이 static resouces 들을 처리하지 못하는 경우(css, js, 이미지 로딩 실패) (0) | 2023.02.13 |
---|---|
myBatis 3) 쿼리에 파라미터에 객체 전달 시 프로퍼티 찾지 못할 때 (0) | 2023.02.10 |
myBatis 3 쿼리문에 parameter 문법 (${}, #{}) (0) | 2023.02.09 |
자바 클래스패스(classpath)란? (0) | 2022.12.19 |