String class

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

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

  • ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ String Constant Pool ์˜์—ญ์—์„œ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ

  • ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š”, ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์˜ ์ƒˆ๋กœ์šด String ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜

๋‚ด๋ถ€์ ์œผ๋กœ private final char[] value๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž๋ฅผ ์ €์žฅ์œผ๋‚˜, ์ž๋ฐ” 9๋ถ€ํ„ฐ๋Š” private final byte[] value์™€ coder ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์˜€๋‹ค.

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

    @Stable
    private final byte[] value;
    private final byte coder;
    // ...
}

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

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

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()

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

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

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

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

String ํด๋ž˜์Šค๋Š” Object ํด๋ž˜์Šค์˜ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(override)ํ•˜์—ฌ, ๋‘ ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ์„ ๋น„๊ตํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

Constant Pool

JVM์€ 'String Constant Pool'(๋ฌธ์ž์—ด ์ƒ์ˆ˜ ํ’€)์ด๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง„๋‹ค.

  • ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑ (String s1 = "ogu";):

    1. String Pool์— "ogu"๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€ ํƒ์ƒ‰

    2. ์กด์žฌํ•˜๋ฉด, ๊ธฐ์กด์— ์žˆ๋˜ ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜

    3. ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด, ํ’€(Pool)์— "ogu" ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜

  • new ์—ฐ์‚ฐ์ž ์ƒ์„ฑ (String s3 = new String("ogu");):

    1. new ์—ฐ์‚ฐ์ž๋Š” String Pool๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ, ํž™(Heap) ์˜์—ญ์— "ogu" ๋‚ด์šฉ์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด String ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ญ์ƒ ์ƒ์„ฑ

    2. ์ด๋•Œ "ogu" ๋ฆฌํ„ฐ๋Ÿด ์ž์ฒด๋Š” String Pool์—๋„ ์กด์žฌํ•˜๊ฒŒ ๋จ

new๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ intern() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด String Pool์˜ ์ฐธ์กฐ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

StringBuffer & StringBuilder

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

์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”

์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌธ์ž์—ด ๋ง์…ˆ ์—ฐ์‚ฐ์„ StringBuilder๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜์—ฌ, ์„ฑ๋Šฅ ์ €ํ•˜์˜ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ๋ฌธ์ž์—ด ๋ง์…ˆ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค StringBuilder๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์–ด ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ์ด๋•Œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ StringBuilder๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

StringBuffer

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

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

  • ๋ฉ”์„œ๋“œ ๋Œ€๋ถ€๋ถ„์ด synchronized๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์–ด, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

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

StringBuffer๋Š” equals() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, Object์˜ equals()๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ฃผ์†Œ๊ฐ’์„ ๋น„๊ต(==)ํ•œ๋‹ค.

StringBuilder

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

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

String, StringBuffer, StringBuilder ๋น„๊ต

ํŠน์ง•
String
StringBuffer
StringBuilder

๊ฐ€๋ณ€์„ฑ(Mutability)

๋ถˆ๋ณ€(Immutable)

๊ฐ€๋ณ€(Mutable)

๊ฐ€๋ณ€(Mutable)

์ €์žฅ ์œ„์น˜(๋ฆฌํ„ฐ๋Ÿด)

String Pool

Heap

Heap

์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ(Thread Safety)

์•ˆ์ „(Immutable)

์•ˆ์ „(Synchronized)

์•ˆ์ „ํ•˜์ง€ ์•Š์Œ

์ฃผ์š” ์‚ฌ์šฉ ํ™˜๊ฒฝ

๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ์ ์„ ๋•Œ

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ

๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ

์„ฑ๋Šฅ(๋ฌธ์ž์—ด ๋ณ€๊ฒฝ ์‹œ)

๋‚ฎ์Œ(์ƒˆ ๊ฐ์ฒด ์ƒ์„ฑ)

๋†’์Œ

๋งค์šฐ ๋†’์Œ

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?