String

String

Javaμ—λŠ” 기본적으둜 μ›μ‹œν˜•, μ°Έμ‘°ν˜• 두 κ°€μ§€ μžλ£Œν˜•μ΄ μ‘΄μž¬ν•œλ‹€.

μ›μ‹œν˜•μ— μœ μΌν•˜κ²Œ 문자λ₯Ό ν‘œμ‹œν•˜λŠ” charκ°€ μ‘΄μž¬ν•˜μ§€λ§Œ, 길이 1의 λ¬Έμžλ°–μ— ν‘œν˜„ν•˜μ§€ λͺ»ν•œλ‹€. 코딩을 ν•˜λ‹€λ³΄λ©΄ μ­‰ 이어진 문자λ₯Ό μ œμ–΄ ν•΄μ•Όλ˜λŠ”λ°, 그럴경우 String을 μ‚¬μš©ν•œλ‹€.

λͺ¨λ“  κ°μ²΄λŠ” νƒ€μž…μ΄ 될 수 μžˆλ‹€.

κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€μ΄κ³ , ν΄λž˜μŠ€λŠ” νƒ€μž…μ„ μ •μ˜ν•œλ‹€. κ·ΈλŸ¬λ―€λ‘œ κ°μ²΄λŠ” κ·Έ 클래슀의 νƒ€μž…μ΄ 될 수 μžˆλ‹€.

class Book {
    private String publisher;
    private String name;
}

예λ₯Όλ“€μ–΄, μœ„μ™€ 같은 μ½”λ“œκ°€ μžˆλ‹€. λͺ¨λ‘κ°€ μ•Œμ§€λ§Œ Book Class이닀. 이 자체둜 Bookμ΄λž€ νƒ€μž…μ΄ 생성이 된 것이닀.

쑰금 μ΄μƒν•˜κ³  νŠΉλ³„ν•œ(?) νƒ€μž…

Javaμ—μ„œ μ›μ‹œ νƒ€μž…μ„ μ œμ™Έν•˜λ©΄ μ „λΆ€ μ°Έμ‘° νƒ€μž…μ΄λ‹€. String은 μ°Έμ‘° νƒ€μž…μ΄λ‹€.

  • String은 λΆˆλ³€ 객체(Immutable Class)이닀.

// 1. 보톡 μΈμŠ€ν„΄μŠ€ 생성 방식
Type type = new Type();

// 2. String
String str = "슀트링 생성"
  • 그럼 String은 μ™œ new둜 μƒμ„±ν•˜μ§€ μ•Šμ„κΉŒ.

  • μ™œ μš°λ¦¬λŠ” 2번 방식과 같이 String을 μ›μ‹œ νƒ€μž…μ„ μ •μ˜ν•˜λ“―μ΄ μ‚¬μš©ν• κΉŒ.

정닡은 κ°„λ‹¨ν•˜λ‹€. 2번 방식이 νŽΈν•˜λ‹€.

μ•žμ—μ„œλ„ μ–˜κΈ°ν–ˆμ§€λ§Œ, μ°Έμ‘° νƒ€μž…μ€ Stack λ©”λͺ¨λ¦¬ μ˜μ—­μ΄ μ•„λ‹Œ Heap λ©”λͺ¨λ¦¬μ— μ €μž₯ λœλ‹€. 그런데 String은 또, νž™ μ˜μ—­ μ•ˆμ— String Constant Pool(μƒμˆ˜ν’€) μ˜μ—­μ— μ €μž₯이 λœλ‹€. (Java 7 이상)

두 객체의 hash값이 λ‹€λ₯΄λ‹€. 그럼 두 κ°μ²΄λŠ” λ‹€λ₯Έ 객체닀.

Drawing
  • str1은 String Constant Pool에 ν• λ‹Ήλ˜λŠ” λ¦¬ν„°λŸ΄(literal) 방식이닀.

    • λ§Œμ•½ str2 = "λ‚œ Heap μ˜μ—­"을 μ„ μ–Έν•˜κ²Œ 되면 str1의 μ£Όμ†Œλ₯Ό κ°€λ₯΄ν‚€κ²Œ λœλ‹€.

  • compare1은 new μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄μ„œ, Heap μ˜μ—­μ— μƒμ„±λ˜κ³  κ·Έ μ£Όμ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

Last updated