# [Java] String ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ(Immutablity)์— ๋Œ€ํ•ด
Study Repository

[Java] String ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ(Immutablity)์— ๋Œ€ํ•ด

by rlaehddnd0422

Java์—์„œ String์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

 

๋ถˆ๋ณ€ ๊ฐ์ฒด๋ž€, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์œ ์ง€๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ String ์ธ์Šคํ„ด์Šค๋Š” ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๊ทธ ๊ฐ’์„ ์ฝ๊ธฐ๋งŒ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ณ€๊ฒฝ์„ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด 

String a = "hi";
a = "hi~";

System.out.println("a = " + a);

์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ "a = hi~"๋กœ ๋‚˜์˜ค๋Š”๋ฐ, ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ ์•„๋‹Œ๊ฐ€๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ƒ์€ String ๊ฐ์ฒด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 2๋ฒˆ์งธ ๋ผ์ธ์—์„œ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด(="hi~")๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ทธ ์ฐธ์กฐ๊ฐ€ a๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถˆ๋ณ€์„ฑ์€ ์ด๊ฑธ ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. String ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์€ "hi"๋ผ๋Š” String ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’๊ณผ , "hi~"๋ผ๋Š” String ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ๋งํ•˜๋ฉฐ ์ด๊ฒƒ์ด ๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

String์€ ์ฐธ์กฐ ํƒ€์ž…์˜ ์ž๋ฃŒํ˜•์ด์ง€๋งŒ ํŠน์ดํ•˜๊ฒŒ new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๋ถˆ๋ณ€์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ๋ฅผ ํ•˜๋‚˜ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

public class ImmutableStringTest {
    public static void main(String[] args) {
        String str1 = "Hello"; // ์ƒˆ๋กœ์šด String ๊ฐ์ฒด ์ƒ์„ฑ
        String str2 = str1;    // str2๋Š” str1๊ณผ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ

        System.out.println("Before Modification:");
        System.out.println("str1: " + str1);
        System.out.println("str2: " + str2);

        // ๋ฌธ์ž์—ด ์—ฐ์‚ฐ ์ˆ˜ํ–‰ (์ƒˆ๋กœ์šด String ๊ฐ์ฒด ์ƒ์„ฑ)
        str1 = str1 + ", World";

        System.out.println("\nAfter Modification:");
        System.out.println("str1: " + str1); // "Hello, World"
        System.out.println("str2: " + str2); // "Hello"

        // str1์ด ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ str2๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    }
}

 

์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด str2๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

ImmutableStringTest ์‹คํ–‰๊ฒฐ๊ณผ

str1= str1 + ", World"์—์„œ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ ์›๋ž˜์˜ String ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’์ธ "Hello"๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ†ตํ•ด String ๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

String์˜ ๋ถˆ๋ณ€์„ฑ์œผ๋กœ ์–ป๋Š” ์ด์ 

 

1. ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ

public class ImmutableStringTest2 {
    public static void main(String[] args) {
        String a = "1";
        String b = "1";
        String c = "1";

        System.out.println(System.identityHashCode(a));
        System.out.println(System.identityHashCode(b));
        System.out.println(System.identityHashCode(c));
    }
}

  • Java๋Š” String ๊ฐ์ฒด๋ฅผ String constant pool์ด๋ผ๋Š” ๊ณณ์—์„œ ๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. String pool์„ ํ†ตํ•ด String์„ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ™๋Š” String์— ๋Œ€ํ•ด ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ํ• ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Java๋Š” Runtime์—์„œ Heap ์˜์—ญ์˜ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. ๋ณด์•ˆ์ƒ ์ด์ 

  • String์ด ๋ถˆ๋ณ€๊ฐ์ฒด์ธ ๋•๋ถ„์— ๋ณด์•ˆ์ƒ์˜ ์ด์ ์„ ์–ป์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ƒ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ String ๊ฐ์ฒด๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, String์ด ๋ถˆ๋ณ€์ด์—ฌ์•ผ ํ•ด์ปค์˜ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ์˜ ์•ˆ์ „ํ•จ

  • ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ Synchronization ๋ฌธ์ œ๋ฅผ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

<์ฐธ๊ณ  ์ž๋ฃŒ>

 

Java์˜ String ์ด์•ผ๊ธฐ(1) - String์€ ์™œ ๋ถˆ๋ณ€(Immutable)์ผ๊นŒ?

์ œ๋ชฉ์— ์ ํ˜€์žˆ๋‹ค์‹œํ”ผ Java์—์„œ String์€ ๋ถˆ๋ณ€(Immutable)์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋ถˆ๋ณ€์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ๋ถˆ๋ณ€์€ ๋ง ๊ทธ๋Œ€๋กœ ์•„๋‹ ๋ถˆ(๏ฅง) ๋ณ€ํ•  ๋ณ€(่ฎŠ). ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ Java์—์„œ String์ด ๋ถˆ๋ณ€์ด๋ผ๋Š”

readystory.tistory.com

 

 

 

 

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ