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";):String Pool์ "ogu"๋ผ๋ ๋ฌธ์์ด์ด ์๋์ง ํ์
์กด์ฌํ๋ฉด, ๊ธฐ์กด์ ์๋ ์ธ์คํด์ค์ ์ฐธ์กฐ๋ฅผ ๋ฐํ
์กด์ฌํ์ง ์์ผ๋ฉด, ํ(Pool)์ "ogu" ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ๊ณ ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ฐํ
new์ฐ์ฐ์ ์์ฑ (String s3 = new String("ogu");):new์ฐ์ฐ์๋ String Pool๊ณผ๋ ๋ณ๊ฐ๋ก, ํ(Heap) ์์ญ์ "ogu" ๋ด์ฉ์ ๊ฐ์ง ์๋ก์ดString์ธ์คํด์ค๋ฅผ ํญ์ ์์ฑ์ด๋ "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 ๋น๊ต
๊ฐ๋ณ์ฑ(Mutability)
๋ถ๋ณ(Immutable)
๊ฐ๋ณ(Mutable)
๊ฐ๋ณ(Mutable)
์ ์ฅ ์์น(๋ฆฌํฐ๋ด)
String Pool
Heap
Heap
์ค๋ ๋ ์์ ์ฑ(Thread Safety)
์์ (Immutable)
์์ (Synchronized)
์์ ํ์ง ์์
์ฃผ์ ์ฌ์ฉ ํ๊ฒฝ
๋ฌธ์์ด ์ฐ์ฐ์ด ์ ์ ๋
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ
๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ
์ฑ๋ฅ(๋ฌธ์์ด ๋ณ๊ฒฝ ์)
๋ฎ์(์ ๊ฐ์ฒด ์์ฑ)
๋์
๋งค์ฐ ๋์
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?