์ถ์ฒ
ChatGPT
String์ intern() ๋ฉ์๋๋ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ์์ ๋ฌธ์์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ๊ณ ๋ฌธ์์ด ๋น๊ต๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ํ์ง๋ง ์๋ชป ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์๋ค.
intern() ๋ฉ์๋์ ๋์ ๋ฐฉ์
intern() ๋ฉ์๋๋ ๋ฌธ์์ด์ String Constant Pool์ ์ ์ฅํ๊ณ , ๋์ผํ ๋ด์ฉ์ ๋ฌธ์์ด์ด intern() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋์ผํ ์ธ์คํด์ค๋ฅผ ๋ฐํ๋ค.
- String Constant Pool์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ํน์ ์์ญ์ผ๋ก, ์ค๋ณต๋ ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์ค์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- intern() ๋ฉ์๋๋ ์ฃผ์ด์ง ๋ฌธ์์ด์ด ์์ ํ์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๊ทธ ํ์ ์๋ ๋ฌธ์์ด์ ์ฐธ์กฐ๋ฅผ ๋ฐํํ๊ณ , ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ก ์์ฑํ์ฌ ํ์ ์ถ๊ฐํ ํ ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ฐํํ๋ค.
์ฌ์ฉ ์
String str1 = new String("hello");
String str2 = new String("hello");
String internedStr1 = str1.intern();
String internedStr2 = str2.intern();
System.out.println(internedStr1 == internedStr2); // true
์ฑ๋ฅ ๋ฌธ์
๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋
- ๋ฌธ์ : ์์ฃผ ์ฌ์ฉํ์ง ์๋ ๋ฌธ์์ด์ intern() ๋ฉ์๋๋ก ์์ ํ์ ์ ์ฅํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค. ํนํ, ๋๋์ ๋ฌธ์์ด์ intern() ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ ์ ์๋ค.
- ์ค๋ช : ์์ ํ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์์ผ๋ฉฐ, JVM ๊ตฌํ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ๋ค๋ฅผ ์ ์๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ง์ ๋ฌธ์์ด์ ํ์ ์ถ๊ฐํ๋ ค๊ณ ํ๋ฉด OutOfMemoryError๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋น์ฉ์ด ํฐ ์์ ํ ๊ด๋ฆฌ
- ๋ฌธ์ : intern() ๋ฉ์๋๋ ์์ ํ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๋ฉฐ, ํนํ intern() ๋ฉ์๋ ํธ์ถ์ด ๋น๋ฒํ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์๋ค.
- ์ค๋ช : ์์ ํ์ ์๋ก์ด ๋ฌธ์์ด์ ์ถ๊ฐํ๋ ๊ณผ์ ์์ ํด์๋งต์ ์กฐํ์ ์ฝ์ ๋น์ฉ์ด ๋ฐ์ํ๋ค. ์ด๋ก ์ธํด ์ฑ๋ฅ์ด ๋๋ ค์ง ์ ์๋ค.
์ฐ๋ ๋ ๋๊ธฐํ ๋ฌธ์
- ๋ฌธ์ : String.intern()์ synchronized๋ก ๊ตฌํ๋์ด ์์ด, ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฑ๋ฅ ์ ํ์ ๋ณ๋ชฉ ํ์์ ์ด๋ํ ์ ์๋ค.
- ์ค๋ช : ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ intern()์ ํธ์ถํ๋ฉด ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ๊ธฐํ ์ ์๋ค.
์ต์ ํ ๋ฐฉ๋ฒ
1. intern() ์ฌ์ฉ ์ ํ
- ์ค๋ช : ๋ฌด์กฐ๊ฑด์ ์ธ intern() ๋ฉ์๋ ํธ์ถ์ ํผํ๊ณ , ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ค. ํนํ, ์์ฃผ ์ฌ์ฉํ๋ ๋ฌธ์์ด์ด ์๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ ํผํด์ผ ํ๋ค.
- ์์ ์ฝ๋:
String frequentlyUsed = "hello".intern(); // ์์ฃผ ์ฌ์ฉ๋๋ ๋ฌธ์์ด๋ง intern
String rarelyUsed = new String("world"); // ๋๋ฌผ๊ฒ ์ฌ์ฉ๋๋ ๋ฌธ์์ด์ internํ์ง ์์
2. ์์ฃผ ์ฌ์ฉํ๋ ๋ฌธ์์ด ์บ์ฑ
- ์ค๋ช : ํน์ ๋ฌธ์์ด์ด ์์ฃผ ์ฌ์ฉ๋๋ค๋ฉด ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฌ์ฉํ๋๋ก ์ค๊ณํ๋ค. ์ด๋ฅผ ํตํด ์์ ํ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ์์ ์ฝ๋:
import java.util.Map;
import java.util.HashMap;
public class StringCaching {
private static Map<String, String> cache = new HashMap<>();
public static String getCachedString(String input) {
return cache.computeIfAbsent(input, String::intern);
}
public static void main(String[] args) {
String str1 = getCachedString("example");
String str2 = getCachedString("example");
System.out.println(str1 == str2); // true
}
}
3. ํด๋์ค ๋ก๋ฉ ์์ Intern ์ฌ์ฉ ์ฃผ์
- ์ค๋ช : ํด๋์ค ๋ก๋ฉ ์ ๋๋์ ๋ฌธ์์ด์ intern() ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๋ฉด JVM์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค. ๋ฐ๋ผ์ ํด๋์ค ๋ก๋ฉ ์ ๋ถํ์ํ intern() ๋ฉ์๋ ํธ์ถ์ ํผํด์ผ ํ๋ค.
4. ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์์ ์ ์กฐ์
- ์ค๋ช : ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์์ ์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฌธ์์ด์ intern() ๋ฉ์๋๋ก ์ฒ๋ฆฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์กฐ์ ํ๋ค.
5. ๋์ฒด ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ
- ์ค๋ช : ๋ฌธ์์ด ์ค๋ณต์ ์ค์ด๊ธฐ ์ํด HashSet ๋๋ Map๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ์ค๋ณต๋ ๋ฌธ์์ด์ ๊ด๋ฆฌํ๋ค.
- ์์ ์ฝ๋:
import java.util.Set;
import java.util.HashSet;
public class StringSetExample {
private static Set<String> stringSet = new HashSet<>();
public static String getUniqueString(String input) {
if (!stringSet.contains(input)) {
stringSet.add(input);
}
return input;
}
public static void main(String[] args) {
String str1 = getUniqueString("data");
String str2 = getUniqueString("data");
System.out.println(str1 == str2); // true
}
}
6. GC ํ๋ ๋ฐ ํ๋กํ์ผ๋ง
- ์ค๋ช : ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ๊ธฐ ์ํด JVM์ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ์ค์ ์ ์กฐ์ ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง์ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจํด์ ๋ถ์ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
์ถ์ฒ
- ๊ณต์ Java ๋ฌธ์
- Java String Documentation
- ๋ด์ฉ: String ํด๋์ค์ intern() ๋ฉ์๋์ ๊ด๋ จ ๋ฉ์๋์ ๋ํ ์ค๋ช ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- Java String Documentation
- ๊ถ์ ์๋ ์์
- "Effective Java" by Joshua Bloch
- ๋ด์ฉ: String ๊ฐ์ฒด์ ์ฌ์ฉ๊ณผ ์์ฑ ๋ฐฉ๋ฒ์ ๊ดํ ์ต์ ํ๋ ์ฌ์ฉ ํจํด๊ณผ ์ด์ ๋ฅผ ์ค๋ช ํฉ๋๋ค.
- ๋งํฌ: Effective Java
- "Java Performance: The Definitive Guide" by Scott Oaks
- ๋ด์ฉ: ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ต์ ํ ๊ธฐ๋ฒ์ ๋ํด ๊น์ด ์๋ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
- ๋งํฌ: Java Performance: The Definitive Guide
- "Effective Java" by Joshua Bloch
- ๊ธฐ์ ๋ธ๋ก๊ทธ ๋ฐ ์จ๋ผ์ธ ์๋ฃ
- Baeldung: String Interning in Java
- ๋ด์ฉ: intern() ๋ฉ์๋์ ์ฌ์ฉ๋ฒ๊ณผ ์ฑ๋ฅ ์ต์ ํ์ ๋ํ ์ค๋ช ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- GeeksforGeeks: Java String intern() Method
- ๋ด์ฉ: ์๋ฐ์์ intern() ๋ฉ์๋ ์ฌ์ฉ์ ๋ํ ๋ค์ํ ์ฌ๋ก์ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
- Baeldung: String Interning in Java
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฐฐ์ด๋ ๊ฐ์ฒด์ธ๊ฐ (0) | 2024.08.08 |
---|---|
[์ฉ์ด] ํ์ดํผ์ค๋ ๋ฉ๊ณผ ๋ฉํฐ์ฝ์ด (1) | 2024.08.07 |
[Java] ์คํธ๋ง ๋ฆฌํฐ๋ด์ด ์๋๋ฐ๋ ์คํธ๋ง ๋ฆฌํฐ๋ด์ ์ธ์๋ก ๋ฐ๋ ์คํธ๋ง ์์ฑ์๊ฐ ์กด์ฌํ๋ ์ด์ (0) | 2024.08.07 |
[Java] String ๊ฐ์ฒด ์์ฑ - ๋ฆฌํฐ๋ด vs ์์ฑ์ (0) | 2024.08.07 |
[์ฉ์ด][Java] ํ๋ก๊ทธ๋จ์ ๋ช ํ์ฑ (Clarity) (0) | 2024.08.06 |