String class

๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ํด๋ž˜์Šค

๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” String ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ฌธ์ž์—ด์€ char ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, String ํด๋ž˜์Šค๋Š” char ๋ฐฐ์—ด์„ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • ๋ฌธ์ž์—ด์— ์žˆ๋Š” ๊ฐœ๋ณ„ ๋ฌธ์ž๋Š” ์ง์ ‘ ์—‘์„ธ์Šคํ•  ์ˆ˜ ์—†๊ณ , ํŠน์ • ๋ฉ”์„œ๋“œ(charAt)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

  • ๋ฌธ์ž์—ด์€ ๋ณ€ํ˜• ๋ถˆ๊ฐ€๋Šฅ(immutable)ํ•˜๊ณ , ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {

    @Stable
    private final byte[] value;
    private final byte coder;
    private int hash; // Default to 0
    // ...
}

์ฃผ์š” ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ
์„ค๋ช…

charAt(int index)

๋ฌธ์ž์—ด์—์„œ index ์œ„์น˜์˜ ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜

int length()

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜

String substring(int from, int to)

๋ฌธ์ž์—ด์—์„œ ํ•ด๋‹น ๋ฒ”์œ„์— ์žˆ๋Š” ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

String substring(int from)

๋ฌธ์ž์—ด์—์„œ ํ•ด๋‹น ์œ„์น˜๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

String concat(String str)

๋ฌธ์ž์—ด์„ ๋”ํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

String replace(String old, String new)

๋ฌธ์ž์—ด์—์„œ old ๋ฌธ์ž์—ด์„ new ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พผ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

String toLowerCase()

๋ฌธ์ž์—ด์„ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พผ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

String toUpperCase()

๋ฌธ์ž์—ด์„ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊พผ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

String trim()

๋ฌธ์ž์—ด์˜ ์•ž๋’ค ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

String[] split(String regex)

๋ฌธ์ž์—ด์„ regex๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆˆ ๋ฌธ์ž์—ด ๋ฐฐ์—ด ๋ฐ˜ํ™˜

boolean equals(Object obj)

๋ฌธ์ž์—ด์ด ๊ฐ™์€์ง€ ๋น„๊ต

int compareTo(String str)

๋ฌธ์ž์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ๋น„๊ต

int indexOf(String str)

๋ฌธ์ž์—ด์—์„œ str์ด ์ฒ˜์Œ ๋‚˜ํƒ€๋‚˜๋Š” ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜

boolean startsWith(String prefix)

๋ฌธ์ž์—ด์ด prefix๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ

boolean endsWith(String suffix)

๋ฌธ์ž์—ด์ด suffix๋กœ ๋๋‚˜๋Š”์ง€ ํ™•์ธ

boolean contains(String str)

๋ฌธ์ž์—ด์ด str์„ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธ

boolean isEmpty()

๋ฌธ์ž์—ด์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ

char[] toCharArray()

๋ฌธ์ž์—ด์„ ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜

๋ฌธ์ž์—ด ๋น„๊ต

class Example {

    public static void main(String[] args) {
        String str1 = "ogu"; // ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ
        String str2 = "ogu"; // ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ
        String str3 = new String("ogu"); // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
        String str4 = new String("ogu"); // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

        System.out.println(str1 == str2); // true
        System.out.println(str3 == str4); // false
        System.out.println(str1.equals(str2)); // true
        System.out.println(str1.equals(str3)); // true
    }
}

String ํด๋ž˜์Šค์˜ equals

  • String ํด๋ž˜์Šค์˜ equals() ๋ฉ”์„œ๋“œ๋Š” Object ํด๋ž˜์Šค์˜ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ๊ฒƒ์ด๋‹ค.

  • String ํด๋ž˜์Šค์˜ equals() ๋ฉ”์„œ๋“œ๋Š” ๋‘ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค.

public class StringEqualsTest {

    public static void main(String[] args) {
        String s1 = "ogu";
        String s2 = "ogu";
        String s3 = new String("ogu");
        System.out.println(s1 == s2); // true
        System.out.println(s2 == s3); // false
        System.out.println(s2.equals(s3)); // true
    }


    // ์‹ค์ œ String ํด๋ž˜์Šค์˜ equals() ๋ฉ”์„œ๋“œ
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String) anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                        : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }
}

Constant Pool

JVM์ด ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„

์ž๋ฐ” ์†Œ์ŠคํŒŒ์ผ์— ํฌํ•จ๋œ ๋ชจ๋“  ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ์ปดํŒŒ์ผ ์‹œ์— ํด๋ž˜์Šค ํŒŒ์ผ์— ์ €์žฅ๋˜๋Š”๋ฐ, ์ด ๋•Œ ๊ฐ™์€ ๋‚ด์šฉ์˜ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค. ํ•œ ๋ฒˆ ์ƒ์„ฑํ•˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

String์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•˜๊ฒŒ ๋์„ ๋•Œ JVM์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. Constant Pool์— ๊ฐ™์€ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํƒ์ƒ‰

  2. ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜

  3. ์—†์œผ๋ฉด ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Constant Pool์— ์ €์žฅ

๋งŒ์•ฝ new String()์„ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, Constant Pool์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ํ•ญ์ƒ ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  heap ์˜์—ญ์— ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

StringBuffer & StringBuilder

๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค

๊ธฐ์กด String ํด๋ž˜์Šค๋Š” ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋Š” GC์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค. ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋Š” StringBuffer๋‚˜ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

StringBuffer

  • ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ž์—ด ํŽธ์ง‘์„ ์œ„ํ•œ buffer๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฒ„ํผ์˜ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ฆ๊ฐ€

StringBuffer ๋ฌธ์ž์—ด ๋น„๊ต

StringBuffer ํด๋ž˜์Šค์˜ equals ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์ง€ ์•Š์•„ Object ํด๋ž˜์Šค์˜ equals ๋ฉ”์„œ๋“œ(==)๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹ด๊ณ ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” toString()์€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด ์žˆ์–ด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

public class StringBufferTest {

    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("ogu");
        StringBuffer sb2 = new StringBuffer("ogu");
        System.out.println(sb1 == sb2); // false
        System.out.println(sb1.equals(sb2)); // false
        System.out.println(sb1.toString().equals(sb2.toString())); // true
    }
}

StringBuilder

  • thread safeํ•œ StringBuffer์™€ ๋‹ฌ๋ฆฌ thread unsafe

  • ์œ„ ๊ธฐ๋Šฅ์„ ์ œ์™ธํ•˜๊ณ ๋Š” StringBuffer์™€ ๋™์ผ

๋น„๊ต

  • String : ๋ถˆ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ์ ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉ

  • StringBuffer : ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ๊ณ  ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ

  • StringBuilder : ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ๊ณ  ๋‹จ์ผ์Šค๋ ˆ๋“œ์ด๊ฑฐ๋‚˜ ๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋  ๊ฒฝ์šฐ ์‚ฌ์šฉ

-
String
StringBuffer
StringBuilder

storage

String Pool

Heap

Heap

modify

X

O

O

thread safe

O

O

X

synchronized

O

O

X

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?