String interning

String interning(λ¬Έμžμ—΄ 인터닝) μ΄λž€

In computer science, string interning is a method of storing only one copy of each distinct stringarrow-up-right value, which must be immutablearrow-up-right.[1]arrow-up-right Interning strings makes some string processing tasks more time- or space-efficient at the cost of requiring more time when the string is created or interned. The distinct values are stored in a string intern pool.

μœ„ν‚€arrow-up-right에 μœ„μ™€ 같이 잘 μ„€λͺ…λ˜κ³  μžˆλ‹€. ν•΅μ‹¬λ§Œ μ•„λž˜μ— μ“°μžλ©΄ μ•„λž˜μ™€ κ°™λ‹€.

λ¬Έμžμ—΄ μ΄ν„°λ‹μ΄λž€ λΆˆλ³€μ˜ 유일 λ¬Έμžμ—΄λ‘œ 각 λ¬Έμžμ—΄ copy λ₯Ό λ³΄κ΄€ν•˜κΈ° μœ„ν•œ 방법이닀. λ¬Έμžμ—΄μ„ 인터닝 ν•˜λŠ” 것은 λ¬Έμžμ—΄μ΄ μƒˆλ‘œ 생성됨에 μžˆμ–΄μ„œ μ‹œκ°„ λ³΅μž‘λ„, 곡간 λ³΅μž‘λ„ μΈ‘λ©΄μ—μ„œ 훨씬 효율적으둜 λ§Œλ“€μ–΄μ€€λ‹€. 각각의 κ΅¬λΆ„λ˜λŠ” 값은 λ¬Έμžμ—΄ 풀에 μ €μž₯λœλ‹€.

μ‰½κ²Œ λ§ν•΄μ„œ λ¬Έμžμ—΄μ€ λ‚΄λΆ€μ μœΌλ‘œ λ¬Έμžμ—΄ 풀에 μΊμ‹±μ²˜λŸΌ μ €μž₯해놨닀가 λ™μΌν•œ λ¬Έμžμ—΄μ΄ ν•„μš”ν•  λ•Œ 이미 λ§Œλ“€μ–΄μ§„ λ¬Έμžμ—΄μ— 그것이 있으면 κ·Έ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€λŠ” 것이닀.

        String hi1 = "hi";
        String hi2 = new String("hi");
        String hi3 = "hi";

        System.out.println(hi1 == hi2); // false
        System.out.println(hi2 == hi3); // false
        System.out.println(hi3 == hi1); // true

new String 을 μ‚¬μš©ν•œ 경우 λ¬Έμžμ—΄ 인터닝을 λ¬΄μ‹œν•˜κ²Œ λœλ‹€. κ·Έλž˜μ„œ hi1 κ³Ό hi2 은 κ°μ²΄λŠ” λ™λ“±ν•˜μ§€λ§Œ λ‹€λ₯Έ 참쑰값을 κ°€μ§€κ²Œ λœλ‹€. 동일성이 κΉ¨μ§€λŠ” 것이닀. ν•˜μ§€λ§Œ hi3의 경우 "hi" 둜 결과적으둜 h1 κ³Ό λ™μΌν•˜κ³  h1 μƒμ„±μ‹œ 인터닝 된 λ¬Έμžμ—΄μ„ λ°”λΌλ³΄κ²Œ λ˜μ–΄μ„œ h3κ³Ό h1의 참쑰값은 κ°™μ•„μ§„λ‹€.

λ¬Έμžμ—΄ 인터닝이 μ£ΌλŠ” μ„±λŠ₯ νš¨μœ¨μ„ ν™•μΈν•΄λ³΄μž

μ•„λž˜ μ½”λ“œλ‘œλŠ” 76~77ms 이 λ‚˜μ˜€κ³  μžˆλ‹€. λ¬Έμžμ—΄ ν’€μ—μ„œ κΊΌλ‚΄ μ“°λŠ” 것을 ν”Όν•˜κ³  μƒˆλ‘œμš΄ 객체λ₯Ό μΌλΆ€λŸ¬ λ§Œλ“€κ²Œ ν–ˆλ‹€.

λ°˜λ©΄μ— μ•„λž˜ μ½”λ“œλŠ” 1ms 이 μ°νžŒλ‹€. κ·Έλƒ₯ 숫자만으둜 속도가 70λ°° 이상 차이가 λ‚œλ‹€.

Last updated