250x250
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 |
Tags
- 자율학습
- Spring Data JPA
- 나도코딩
- 혼공학습단
- 접근 제어자
- 접근제어자
- 혼공자바
- HashMap
- 네트워크
- Proxy Object
- Functional Interfaces
- java
- Access Modifier
- types
- cluster index
- 티스토리챌린지
- dotnet
- Interface
- entrySet
- noncluster index
- literal
- 0 시작
- 인터페이스
- 스프링 부트 3
- Wildcard
- 인프런
- Lazy loading
- 혼공
- 오블완
- 혼공컴운
Archives
- Today
- Total
지금을 사는 사람
[Java] 리터럴 풀 (literal pool) 본문
728x90
소개:
Java에서는 리터럴 상수를 관리하는데 상수풀(Literal Pool)이라는 메커니즘이 사용됩니다. 이는 자바의 특징 중 하나로, 리터럴 상수들을 공유하여 메모리를 효율적으로 활용하는 방식입니다. 이 글에서는 Java의 Literal Pool에 대해 알아보고, 어떻게 동작하며 코드에서 어떻게 활용되는지 살펴보겠습니다.
1. 리터럴 상수란?
리터럴 상수는 코드에 직접 입력된 값으로, 예를 들어 문자열, 숫자, 불리언 값 등이 해당됩니다. 이러한 값들은 컴파일러에 의해 상수풀에 저장되어 재활용됩니다.
2. 상수풀의 개념
- 문자열 상수풀(String Literal Pool):
- Java에서 문자열은 불변(immutable)하며, 같은 문자열 리터럴은 상수풀에 저장되어 공유됩니다.
str1
과str2
는 같은 문자열을 참조하고 있습니다. String str1 = "Hello"; String str2 = "Hello";
- Java에서 문자열은 불변(immutable)하며, 같은 문자열 리터럴은 상수풀에 저장되어 공유됩니다.
- 숫자 상수풀:
- 일부 정수와 문자(char) 값도 상수풀에 저장됩니다.
num1
과num2
는 같은 정수를 참조하고 있습니다. Integer num1 = 10; Integer num2 = 10;
- 일부 정수와 문자(char) 값도 상수풀에 저장됩니다.
3. 상수풀의 장점
- 메모리 공유:
- 상수풀을 통해 동일한 값의 리터럴이 메모리를 공유함으로써 메모리 사용을 최적화합니다.
- 성능 향상:
- 상수풀을 이용하면 동일한 리터럴을 비교할 때
==
연산을 사용할 수 있어 비교가 빠르게 처리됩니다.
- 상수풀을 이용하면 동일한 리터럴을 비교할 때
4. 주의사항
- 객체 생성과 상수풀:
new
연산자로 생성된 객체는 상수풀을 사용하지 않고 새로운 인스턴스를 생성합니다.str3
은 새로운 인스턴스를 참조하며, 상수풀에서 문자열 "Hello"를 공유하지 않습니다.String str3 = new String("Hello");
5. 코드에서의 활용
- 문자열 연결 시 주의:
- 문자열을 연결할 때
+
연산자를 사용하면 새로운 문자열이 생성되므로 주의가 필요합니다. String result = "Hello" + "World"; // 이 경우 "HelloWorld"는 상수풀에 저장됨
- 문자열을 연결할 때
- equals() 메서드 사용:
- 문자열을 비교할 때는
equals()
메서드를 사용하여 값을 비교하는 것이 안전합니다. String str1 = new String("Hello"); String str2 = "Hello"; if (str1.equals(str2)) { // 비교 성공 }
- 문자열을 비교할 때는
6. 결론
Java의 Literal Pool은 리터럴 상수들을 메모리를 효율적으로 관리하는 중요한 메커니즘입니다. 상수풀을 올바르게 활용하면 코드의 성능을 향상시키고 메모리 사용을 최적화할 수 있습니다. 그러나 주의할 점이 몇 가지 있으므로 개발자는 리터럴과 상수풀의 동작 원리를 이해하고 코드를 작성하는 데에 주의를 기울여야 합니다.
728x90
'Java' 카테고리의 다른 글
[Java] JVM (Java Virtual Machine) (0) | 2023.12.12 |
---|---|
[Java] 컬렉션 (Collection) (1) | 2023.12.12 |
[Java] 람다 표현식(Lambda) (1) | 2023.12.07 |
[Java] 익명 클래스(Anonymous Class) (1) | 2023.12.07 |
[Java] nextLine()과 next()의 차이와 주의사항 (1) | 2023.12.06 |