Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Transaction
- springsecurity
- 문제선택근거
- MVC
- 클린아키텍처
- 공통기술
- JDBC
- 로그백
- 단위테스트
- 디스크i/o
- 공통규약
- SEQUENCE
- TDD
- string
- JPA
- 이벤트핸들러this
- 냄새라도
- SpringLegacy
- 설정세팅
- 이벤트핸들러등록
- OOP
- MVC요청플로우
- model
- index
- AOP
- Ajax
- 커뮤니티서버
- 전전긍긍
- 사면초가
- DDD
Archives
- Today
- Total
개발이군고구마
[JVM] Static (자바 메모리 구조) 본문
728x90
1. 문제 상황
- 프로젝트 프론트 API 통신 결과는 특정 어노테이션을 붙혀서 inner 클래스로 매핑시켜서 받는 구조이다.
- 어노테이션 뒤에 해당 값을 받아오는 클래스를 정의하고
- -> 클래스에 선언된 멤버필드에 프론트에서 받아온 변수들이 매핑되는 로직
public ExResponse practice(@RequestModel ExRequest.class Exdto dto) {
...
}
- 이때 inner 클래스에 static 변수를 붙혀주지 않으면 에러 발생
=> 왜 inner 클래스는 static 변수를 붙혀주어야 하는 걸까?
2. 자바의 메모리 구조

JVM 로딩되는 순간 작성한 코드들은 자바의 메모리에 각각 나누어 저장된다.
런타임 영역에는
- 클래스 메서드 등의 실행코드
- static, 상수 관련 정보가 저장되며
- 프로그램의 모든 영역에서 공유하고
- JVM이 종료될 때 까지 생명주기가 이어진다. (= 가장 긴 생명주기)
스택 영역은
- 자바 실행 즉, 스레드가 코드 한줄 한줄을 실행할 때 스택 프레임이 생성되어 하나씩 쌓이게 되며
- 실행이 완료되면 지역변수, 매개변수는 제거 된다.
힙 영역은
- 인스턴스와 배열이 생성되는 영역으로
- GC가 이루어지는 주요 영역이다.
- new Instance()를 선언해주어서 참조하는 형태로 쓰이는 공간
3. 문제가 되었던 코드
API 호출을 받은 후 해당 메서드는 스택 프레임에 쌓인다.
프론트에서 가져온 데이터를 매핑시키기 위해 inner Class 로 선언한 ExRequest 클래스를 사용해야하지만,
static 이 없는 클래스를 호출하기 위해선 인스턴스를 생성해야한다.

하지만 해당 코드에선 인스턴스를 생성하지 않은 상태로 클래스를 사용해야하므로
static을 붙혀 JVM 로딩시에 런타임 영역에 바로 로딩해준 후에,
모든 프로그램이 공유할 수 있게 만들어논다.

public ExResponse practice(@RequestModel ExRequest.class Exdto dto) {
...
}
private static class ExResponse {
}
private static class ExRequest {
}
참고
자바 코드와 메서드, 스태틱 변수 등은 메모리의 어디에 위치할까? - 골든래빗
자바에서 사용하는 메모리 모델의 구조를 이해하면 자바 프로그래밍에 큰 도움이 됩니다. 그러나 모든 것을 자세히 알 필요는 없습니다. 우리가 공부한 것과 연관해 서 필요한 개념만 조금 이해
goldenrabbit.co.kr
'SERVER > Java' 카테고리의 다른 글
| 자바 I/O (2) - (문자) 파싱 구현체 만들기 (0) | 2026.01.07 |
|---|---|
| 자바 I/O (1) - 원리 (0) | 2025.12.29 |
| [자료구조] LIST 원리 (0) | 2025.12.26 |
| [자료구조] MAP 원리 (0) | 2025.12.19 |
| [JVM] 자바에서 생성한 코드는 어떻게 실행되는가 (0) | 2025.05.20 |