728x90 JVM메모리5 [JAVA] Java String이 불변(Immutable) 객체인 이유 : 설계의 비밀과 이점 자바(Java) 언어를 설계한 제임스 고슬링(James Gosling)은 수많은 인터뷰를 통해 "다시 자바를 만든다면 무엇을 바꾸고 싶은가?"라는 질문에 "없다"고 답하곤 했습니다. 특히 String의 불변성(Immutability)은 자바의 정체성이자, 언어의 안정성을 지탱하는 가장 위대한 설계 중 하나로 꼽힙니다. 단순히 "값이 바뀌지 않는다"는 표면적인 의미를 넘어, 왜 자바가 String을 불변으로 유지하는지 그 심오한 이유를 보안, 캐싱, 그리고 멀티스레드 관점에서 분석해 보겠습니다.1. String Pool을 통한 메모리 효율성자바는 메모리 절약을 위해 String Pool(문자열 풀)이라는 개념을 사용합니다. 만약 String이 가변(Mutable) 객체라면 이 메커니즘은 존재할 수 없습니다.. 2026. 1. 17. [JAVA] String Pool이란 무엇인가? 메모리 최적화의 핵심 원리 자바 프로그래밍을 하다 보면 가장 많이 접하게 되는 객체가 바로 String입니다. 하지만 우리가 무심코 사용하는 "Hello"라는 문자열 뒤에는 JVM(Java Virtual Machine)의 치밀한 메모리 관리 전략인 String Pool(문자열 풀)이 숨어 있습니다. 자바 성능 최적화의 첫걸음인 String Pool의 모든 것을 심도 있게 파헤쳐 보겠습니다.1. String Pool이란 무엇인가?String Pool은 자바 힙(Heap) 메모리 영역 안에 생성된 특수한 공간으로, 문자열 리터럴을 저장하고 공유하기 위한 캐시 메모리 역할을 합니다. 자바는 불변(Immutable) 객체인 String의 특성을 활용하여, 동일한 내용의 문자열이 반복해서 생성되는 것을 방지함으로써 메모리 사용량을 획기적으.. 2026. 1. 17. [JAVA] Java의 파라미터 전달 방식: Call by Value인가, Call by Reference인가? 자바 개발자 사이에서 가장 흔하면서도 깊이 있게 다뤄지는 논쟁 중 하나는 바로 "자바의 파라미터 전달 방식"입니다. 면접 질문으로도 단골인 이 주제에 대해 많은 이들이 "기본형은 Call by Value이고, 참조형(객체)은 Call by Reference이다"라고 오해하곤 합니다.결론부터 명확히 말씀드리면, 자바는 100% 'Call by Value' 방식으로 동작합니다. 이 글에서는 왜 자바가 참조형 변수를 다룰 때조차 Call by Value인지, 그리고 JVM 메모리 구조상에서 어떤 일이 벌어지는지 심도 있게 파헤쳐 보겠습니다.1. 용어의 명확한 정의논의를 시작하기 전, 두 용어의 핵심 차이를 이해해야 합니다.Call by Value (값에 의한 호출): 함수 호출 시 전달되는 변수의 '값'을 복.. 2026. 1. 15. [JAVA] 상수 선언 시 static final을 사용하는 기술적 배경과 메모리 효율성 자바 프로그래밍을 시작하면 가장 먼저 접하는 관습 중 하나가 바로 상수를 정의할 때 public static final이라는 키워드 조합을 사용하는 것입니다. 하지만 단순히 "남들이 그렇게 쓰니까" 혹은 "관습이니까"라는 이유로 넘어가기에는 그 안에 담긴 자바 가상 머신(JVM)의 설계 철학과 메모리 관리 전략이 매우 깊습니다.본 포스팅에서는 자바에서 상수를 선언할 때 왜 static과 final이 함께 쓰여야만 하는지, 그리고 이 조합이 애플리케이션의 성능과 설계에 어떤 긍정적인 영향을 미치는지 심도 있게 분석합니다.1. 'final'의 역할: "한 번만 결정되는 값"final 키워드는 자바에서 '변경 불가능함'을 의미합니다. 변수에 final이 붙으면 해당 변수는 초기화된 이후 값을 변경할 수 없는 .. 2026. 1. 15. [JAVA] Java 변수의 스코프(Scope)와 생명주기 : 효율적 메모리 관리의 핵심 자바(Java) 프로그래밍에서 변수를 선언하는 것은 단순히 데이터를 저장할 공간을 확보하는 것 이상의 의미를 갖습니다. 모든 변수는 자신이 영향력을 미칠 수 있는 '범위(Scope)'와 메모리 상에 존재할 수 있는 '시간(Lifetime)'을 가집니다. 이를 제대로 이해하지 못하면 불필요한 메모리 낭비는 물론, 예기치 못한 버그와 마주하게 됩니다. 오늘은 자바 변수의 생태계를 결정짓는 스코프와 생명주기에 대해 전문적인 시각으로 깊이 있게 분석해 보겠습니다.1. 변수의 스코프(Scope)란 무엇인가?스코프는 특정 변수에 접근할 수 있는 유효 범위를 말합니다. 자바는 '블록 레벨 스코프'를 따르며, 중괄호 {}를 기준으로 변수의 운명이 결정됩니다. 스코프를 좁게 유지하는 것은 객체지향의 핵심 원칙 중 하나인.. 2026. 1. 14. 이전 1 다음 728x90