-
사용자 정의 클래스와 String 클래스의 메모리 관리Java 2024. 8. 30. 04:30
들어가기 전에
equals() 메서드를 사용했을 때 사용자 정의 클래스와 String 클래스의 메모리 주소가 달라지는 점을 구체적으로 알아보게 됨
String 클래스의 메모리 관리
Java String 클래스는 불변(immutable)이고, String 객체는 String Pool이라고 불리는 특별한 메모리 영역에서 관리된다.
- Spring Pool: Java는 동일한 내용의 문자열에 대해 메모리를 절약하기 위해, 문자열 리터럴을 String Pool에 저장한다. 만약 동일한 내용의 문자열 리터럴이 여러 번 사용되면, Java는 새로운 객체를 생성하지 않고,
기존의 String Pool에 있는 문자열을 재사용한다.
String str1 = "123"; // 메모리 주소: 25764044 String str2 = "123"; // 메모리 주소: 25764044
따라서, 위 코드에서 str1과 str2는 같은 메모리 주소를 가진다.
사용자 정의 클래스의 메모리 관리
예를 들어, RequestExampleDTO 클래스의 객체는 new 키워드를 사용해 각각 새로운 인스턴스를 생성한다.
Creation of New Class Instances
- new 키워드: new 키워드를 사용해 객체를 생성할 때마다, Java는 Heap 메모리에 새로운 메모리 공간을 할당하고 객체를 생성한다.
RequestTokenDTO.Request request1 = new RequestTokenDTO.Request("1","2","3","4"); // 메모리 주소: 1740826931 RequestTokenDTO.Request request2 = new RequestTokenDTO.Request("1","2","3","4"); // 메모리 주소: 1858015030
따라서 request1과 request2는 동일한 생성자 인자를 가지고 있지만, new 키워드를 사용하여 별도의 인스턴스를 만들었기 때문에 서로 다른 메모리 주소를 가지게 된다.
'Java' 카테고리의 다른 글
JUnit private한 메서드 어떻게 테스트 할까? (0) 2024.08.24 JUnit Assertions와 AssertJ Assertions (0) 2024.08.22 모던 자바 인 액션, 기초 - 네번째 이야기 (0) 2024.06.17 모던 자바 인 액션, 기초 - 세번째 이야기 (0) 2024.06.14 모던 자바 인 액션, 기초 - 두번째 이야기 (0) 2024.05.09 - Spring Pool: Java는 동일한 내용의 문자열에 대해 메모리를 절약하기 위해, 문자열 리터럴을 String Pool에 저장한다. 만약 동일한 내용의 문자열 리터럴이 여러 번 사용되면, Java는 새로운 객체를 생성하지 않고,