2022. 5. 3. 22:22γJAVA/μλ°μ μ μ
1οΈβ£ Object ν΄λμ€
Object ν΄λμ€λ λͺ¨λ ν΄λμ€μ μ΅κ³ μ‘°μμ΄κΈ° λλ¬Έμ Object ν΄λμ€μ λ©€λ²λ€μ λͺ¨λ ν΄λμ€μμ λ°λ‘ μ¬μ© κ°λ₯νλ€.
protected Object clone() | κ°μ²΄ μμ μ 볡μ¬λ³Έμ λ°ννλ€. |
public boolean equals(Object obj) | κ°μ²΄ μμ κ³Ό κ°μ²΄ objκ° κ°μ κ°μ²΄μΈμ§ μλ €μ€λ€. (κ°μΌλ©΄ true) |
protected void finalize() | κ°μ²΄κ° μλ©Έλ λ κ°λΉμ§ 컬λ ν°μ μν΄ μλμ μΌλ‘ νΈμΆλλ€. μ΄λ μνλμ΄μΌνλ μ½λκ° μμ λ μ€λ²λΌμ΄λ©νλ€. |
public Class getClass() | κ°μ²΄ μμ μ ν΄λμ€ μ 보λ₯Ό λ΄κ³ μλ Class μΈμ€ν΄μ€λ₯Ό λ°ννλ€. |
public int hashCode() | κ°μ²΄ μμ μ ν΄μμ½λλ₯Ό λ°ννλ€. |
public String toString() | κ°μ²΄ μμ μ μ 보λ₯Ό λ¬Έμμ΄λ‘ λ°ννλ€. |
public void notify() | κ°μ²΄ μμ μ μ¬μ©νλ €κ³ κΈ°λ€λ¦¬λ μ°λ°λ₯Ό νλλ§ κΉ¨μ΄λ€. |
public void notifyAll() | κ°μ²΄ μμ μ μ¬μ©νλ €κ³ κΈ°λ€λ¦¬λ λͺ¨λ μ°λ λλ₯Ό κΉ¨μ΄λ€. |
public void wait() public void wait(long timeout) public void wait(long timeout, int nanos) |
λ€λ₯Έ μ°λ λκ° notify() λ notifyAll() μ νΈμΆν λκΉμ§ νμ¬ μ°λ λλ₯Ό 무νν λλ μ§μ λ μκ° λμ κΈ°λ€λ¦¬κ² νλ€. |
-> μ κ·Όμ μ΄μκ° protected μΈ κ²½μ°μλ λ€λ₯Έ κ³³μμ μ¬μ©νκΈ° μν΄μλ μ€λ²λΌμ΄λ©ν΄μ public μΌλ‘ λ°κΏμ μ¬μ©ν΄μΌνλ€.
- equals(Object obj)
: 맀κ°λ³μλ‘ κ°μ²΄μ μ°Έμ‘°λ³μλ₯Ό λ°μμ λΉκ΅νμ¬ κ·Έ κ²°κ³Όλ₯Ό boolean κ°μΌλ‘ μλ €μ£Όλ μν μ νλ€.
μλ‘ λ€λ₯Έ λ κ°μ²΄λ₯Ό equals λ©μλλ‘ λΉκ΅νλ©΄ νμ false λ₯Ό κ²°κ³Όλ‘ μ»κ² λλ€.
-> λκ°μ μΈμ€ν΄μ€λ₯Ό μμ±ν λ€μμ equals λ©μλλ₯Ό μ΄μ©ν΄μ λ μΈμ€ν΄μ€λ₯Ό λΉκ΅νλλ‘ νμλ€.
equals λ©μλλ μ£Όμκ°μΌλ‘ λΉκ΅λ₯Ό νκΈ° λλ¬Έμ λ Value μΈμ€ν΄μ€μ λ©€λ²λ³μ value κ°μ΄ 10μΌλ‘ κ°μμ§λΌλ equals λ©μλλ‘ λΉκ΅ν κ²°κ³Όλ false μΌ μλ°μ μλ€.
-> equals λ©μλκ° Person μΈμ€ν΄μ€μ μ£Όμκ°μ΄ μλ λ©€λ²λ³μ idμ κ°μ λΉκ΅νλλ‘ νκΈ° μν΄ equals λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν΄μ κ°μ id κ°μ κ°μ§κ³ μλ€λ©΄ trueκ°μ μ»μ μ μλλ‘ νλ€.
- hashCode() : κ°μ²΄μ ν΄μμ½λλ₯Ό λ°ννλ λ©μλμ΄λ€.
μ΄ λ©μλλ ν΄μ±κΈ°λ²μ μ¬μ©λλ ν΄μν¨μλ₯Ό ꡬνν κ²μ΄λ€.
ν΄μ±μ λ°μ΄ν° κ΄λ¦¬ κΈ°λ² μ€μ νλμΈλ° λ€λμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ²μνλλ° μ μ©νλ€.
ν΄μν¨μλ μ°Ύκ³ μνλ κ°μ μ λ ₯νλ©΄, κ·Έ κ°μ΄ μ μ₯λ μμΉλ₯Ό μλ €μ£Όλ ν΄μμ½λλ₯Ό λ°ννλ€.
μΌλ°μ μΌλ‘ ν΄μμ½λκ° κ°μ λ κ°μ²΄κ° μ‘΄μ¬νλ κ²μ΄ κ°λ₯νμ§λ§ Object ν΄λμ€μ μ μλ hashcodeλ©μλλ κ°μ²΄μ μ£Όμκ°μΌλ‘ ν΄μμ½λλ₯Ό λ§λ€μ΄ λ°ννκΈ° λλ¬Έμ 32bit JVM μμλ μλ‘ λ€λ₯Έ λ κ°μ²΄λ κ²°μ½ κ°μ ν΄μμ½λλ₯Ό κ°μ§ μ μμμ§λ§, 64 bit JVMμμλ 8byte μ£Όμκ°μΌλ‘ ν΄μμ½λλ₯Ό λ§λ€κΈ° λλ¬Έμ ν΄μμ½λκ° μ€λ³΅λ μ μλ€.
ν΄λμ€μ μΈμ€ν΄μ€ λ³μ κ°μΌλ‘ κ°μ²΄μ κ°κ³ λ€λ¦μ νλ¨ν΄μΌ νλ κ²½μ°λΌλ©΄ equals λ©μλ λΏλ§ μλλΌ hashCode λ©μλλ μ μ ν μ€λ²λΌμ΄λ© ν΄μΌνλ€.
-> equals λ₯Ό μ€λ²λΌμ΄λ©νλ©΄ hashcodeλ κ°μ΄ μ€λ²λΌμ΄λ© ν΄μΌνλ€.
- toString()
: μΈμ€ν΄μ€μ λν μ 보λ₯Ό λ¬Έμμ΄ String μΌλ‘ μ 곡ν λͺ©μ μΌλ‘ μ μν κ²μ΄λ€.
μΈμ€ν΄μ€μ μ 보λ₯Ό μ 곡νλ€λ κ²μ λλΆλΆμ κ²½μ° μΈμ€ν΄μ€ λ³μμ μ μ₯λ κ°λ€μ λ¬Έμμ΄λ‘ νννλ€λ λ»μ΄λ€.
ν΄λμ€λ₯Ό μμ±ν λ toString() μ μ€λ²λΌμ΄λ©νμ§ μλλ€λ©΄ ν΄λμ€ μ΄λ¦μ 16μ§μμ ν΄μμ½λλ₯Ό μ»κ² λλ€.
-> μ΄μ²λΌ toString() μ μΌλ°μ μΌλ‘ μΈμ€ν΄μ€λ ν΄λμ€μ λν μ 보 λλ μΈμ€ν΄μ€ λ³μλ€μ κ°μ λ¬Έμμ΄λ‘ λ³ννμ¬ λ°ννλλ‘ μ€λ²λΌμ΄λ©λλ κ²μ΄ 보ν΅μ΄λ€.
- clone()
μ΄ λ©μλλ μμ μ 볡μ νμ¬ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ μΌμ νλ€.
μ΄λ€ μΈμ€ν΄μ€μ λν΄ μμ μ ν λ, μλμ μΈμ€ν΄μ€λ 보쑴νκ³ clone λ©μλλ₯Ό μ΄μ©ν΄μ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ μμ μ νλ©΄ μμ μ΄μ μ κ°μ΄ 보쑴λλ―λ‘ μμ μ μ€ν¨ν΄μ μλμ μνλ‘ λλ리거λ λ³κ²½λκΈ° μ μ κ°μ μ°Έκ³ νλλ° λμμ΄ λ κ²μ΄λ€.
Object ν΄λμ€μ μ μλ clone() μ λ¨μν μΈμ€ν΄μ€λ³μμ κ°λ§ 볡μ¬νκΈ° λλ¬Έμ μ°Έμ‘°νμ μ μΈμ€ν΄μ€ λ³μκ° μλ ν΄λμ€λ μμ ν μΈμ€ν΄μ€ 볡μ κ° μ΄λ£¨μ΄μ§μ§ μλλ€.
μλ₯Ό λ€μ΄ λ°°μ΄μ κ²½μ°, 볡μ λ μΈμ€ν΄μ€λ κ°μ λ°°μ΄μ μ£Όμλ₯Ό κ°κΈ° λλ¬Έμ 볡μ λ μΈμ€ν΄μ€μ μμ μ΄ μλμ μΈμ€ν΄μ€μ μν₯μ λ―ΈμΉκ² λλ€.
μ΄λ° κ²½μ° clone λ©μλλ₯Ό μ€λ²λΌμ΄λ©ν΄μ μλ‘μ΄ λ°°μ΄μ μμ±νκ³ λ°°μ΄μ λ΄μ©μ 볡μ¬νλλ‘ ν΄μΌνλ€.
-> clone λ©μλλ₯Ό μ¬μ©νλ €λ©΄ λ¨Όμ 볡μ ν ν΄λμ€κ° Cloneable μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌνλ€.
-> clone λ©μλλ₯Ό μ΄μ©ν΄μ λ°°μ΄μ 볡μ¬νλ μμ μ΄λ€. μΌλ°μ μΌλ‘ λ°°μ΄μ 볡μ¬ν λλ System.arraycopy()μ μ΄μ©ν΄μ λ΄μ©μ 볡μ¬νμ§λ§ cloneμ ν΅ν΄μ 볡μ¬ν μλ μλ€.
βοΈ μμ 볡μ¬μ κΉμ 볡μ¬
clone() μ λ¨μν κ°μ²΄μ μ μ₯λ κ°μ κ·Έλλ‘ λ³΅μ ν λΏ, κ°μ²΄κ° μ°Έμ‘°νκ³ μλ κ°μ²΄κΉμ§ 볡μ νμ§λ μλλ€.
κ°μ²΄ λ°°μ΄μ clone()μΌλ‘ 볡μ νλ κ²½μ°μλ μλ³Έκ³Ό 볡μ λ³Έμ΄ κ°μ κ°μ²΄λ₯Ό 곡μ νλ―λ‘ μμ ν 볡μ λΌκ³ 보기 μ΄λ ΅λ€.
μ΄λ¬ν 볡μ λ₯Ό μμ 볡μ¬λΌκ³ νλ€. μμ 볡μ¬μμλ μλ³Έμ λ³κ²½νλ©΄ 볡μ¬λ³Έλ μν₯μ λ°λλ€!!
λ°λ©΄μ μλ³Έμ΄ μ°Έμ‘°νκ³ μλ κ°μ²΄κΉμ§ 볡μ νλ κ²μ κΉμ 볡μ¬λΌκ³ νλ©°, κΉμ 볡μ¬μμλ μλ³Έκ³Ό 볡μ¬λ³Έμ΄ μλ‘ λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°νκΈ° λλ¬Έμ μλ³Έμ λ³κ²½μ΄ 볡μ¬λ³Έμ μν₯μ λ―ΈμΉμ§ μλλ€.
- getClass()
μ΄ λ©μλλ μμ μ΄ μν ν΄λμ€μ Class κ°μ²΄λ₯Ό λ°ννλ λ©μλμ΄λ€.
Class κ°μ²΄λ ν΄λμ€μ λͺ¨λ μ 보λ₯Ό λ΄κ³ μμΌλ©°, ν΄λμ€ λΉ 1κ°λ§ μ‘΄μ¬νλ€. κ·Έλ¦¬κ³ ν΄λμ€ νμΌμ΄ 'ν΄λμ€ λ‘λ'μ μν΄μ λ©λͺ¨λ¦¬μ μ¬λΌκ° λ, μλμΌλ‘ μμ±λλ€.
ν΄λμ€ λ‘λλ μ€ν μμ νμν ν΄λμ€λ₯Ό λμ μΌλ‘ λ©λͺ¨λ¦¬μ λ‘λνλ μν μ νλ€.
λ¨Όμ κΈ°μ‘΄μ μμ±λ ν΄λμ€ κ°μ²΄κ° λ©λͺ¨λ¦¬μ μ‘΄μ¬νλμ§ νμΈνκ³ , μμΌλ©΄ κ°μ²΄μ μ°Έμ‘°λ₯Ό λ°ννκ³ μμΌλ©΄ ν΄λμ€ ν¨μ€μ μ§μ λ κ²½λ‘λ₯Ό λ°λΌμ ν΄λμ€ νμΌμ μ°Ύλλ€.
λͺ» μ°ΎμΌλ©΄ ClassNotFoundException μ΄ λ°μνκ³ , μ°ΎμΌλ©΄ ν΄λΉ ν΄λμ€ νμΌμ μ½μ΄μ Class κ°μ²΄λ‘ λ³ννλ€.
νμΌ ννλ‘ μ μ₯λμ΄ μλ ν΄λμ€λ₯Ό μ½μ΄μ Class ν΄λμ€μ μ μλ νμμΌλ‘ λ³ννλ κ²μ΄λ€.
μ¦, ν΄λμ€ νμΌμ μ½μ΄μ μ¬μ©νκΈ° νΈν ννλ‘ μ μ₯ν΄ λμ κ²μ΄ ν΄λμ€ κ°μ²΄μ΄λ€.
2οΈβ£ String ν΄λμ€
μλ°μμλ λ¬Έμμ΄μ μν ν΄λμ€λ₯Ό μ 곡νλλ° κ·Έκ²μ΄ λ°λ‘ String ν΄λμ€μ΄λ€. String ν΄λμ€λ λ¬Έμμ΄μ μ μ₯νκ³ μ΄λ₯Ό λ€λ£¨λλ° νμν λ©μλλ₯Ό ν¨κ» μ 곡νλ€.
- λ³κ²½ λΆκ°λ₯ν ν΄λμ€
String ν΄λμ€μλ λ¬Έμμ΄μ μ μ₯νκΈ° μν΄μ λ¬Έμν λ°°μ΄ μ°Έμ‘°λ³μ char[] λ₯Ό μΈμ€ν΄μ€ λ³μλ‘ μ μνκ³ μλ€.
μΈμ€ν΄μ€ μμ± μ μμ±μμ 맀κ°λ³μλ‘ μ λ ₯λ°λ λ¬Έμμ΄μ μ΄ μΈμ€ν΄μ€λ³μμ λ¬Έμν λ°°μ΄λ‘ μ μ₯νλ κ²μ΄λ€.
νλ² μμ±λ String μΈμ€ν΄μ€κ° κ°κ³ μλ λ¬Έμμ΄μ μ½μ΄ μ¬ μλ§ μκ³ , λ³κ²½ν μλ μλ€.
λ§μ μ°μ°μλ₯Ό μ¬μ©ν΄μ λ¬Έμμ΄μ κ²°ν©νλ κ²μ μ°μ° μ λ§λ€ μλ‘μ΄ λ¬Έμμ΄μ κ°μ§ String μΈμ€ν΄μ€κ° μμ±λμ΄ λ©λͺ¨λ¦¬ 곡κ°μ μ°¨μ§νκ² λλ―λ‘ κ°λ₯ν κ²°ν©νμλ₯Ό μ€μ΄λ κ²μ΄ μ’λ€.
-> λ¬Έμμ΄κ°μ κ²°ν©μ΄λ μΆμΆ λ± λ¬Έμμ΄μ λ€λ£¨λ μμ μ΄ λ§μ΄ νμν κ²½μ°μλ String ν΄λμ€ λμ StringBuffer ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
- λ¬Έμμ΄ λ¦¬ν°λ΄ μ§μ νλ λ°©λ² vs String ν΄λμ€μ μμ±μλ₯Ό μ¬μ©ν΄μ λ§λλ λ°©λ²
String str1 = "abc"; -> λ¬Έμμ΄ λ¦¬ν°λ΄ "abc"μ μ£Όμκ° str1μ μ μ₯λ¨
String str2 = "abc"; -> λ¬Έμμ΄ λ¦¬ν°λ΄ "abc"μ μ£Όμκ° str2μ μ μ₯λ¨
String str3 = new String("abc"); -> μλ‘μ΄ String μΈμ€ν΄μ€λ₯Ό μμ±
String str4 = new String("abc"); -> μλ‘μ΄ String μΈμ€ν΄μ€λ₯Ό μμ±
: String ν΄λμ€μ μμ±μλ₯Ό μ΄μ©ν κ²½μ°μλ new μ°μ°μμ μν΄μ λ©λͺ¨λ¦¬ν λΉμ΄ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ νμ μλ‘μ΄ String μΈμ€ν΄μ€κ° μμ±λλ€.
κ·Έλ¬λ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ΄λ―Έ μ‘΄μ¬νλ κ²μ μ¬μ¬μ©νλ κ²μ΄λ€.
equals() λ₯Ό μ¬μ©νμ λ λ λ¬Έμμ΄μ λ΄μ©μ "abc"λ₯Ό λΉκ΅νλ κ²μ΄κΈ° λλ¬Έμ λ κ²½μ° λͺ¨λ new λ₯Ό κ²°κ³Όλ‘ μ»λλ€.
νμ§λ§ κ° String μΈμ€ν΄μ€μ μ£Όμλ₯Ό λ±κ°λΉκ΅μ°μ°μ'=='λ‘ λΉκ΅νμ λλ κ²°κ³Όκ° λ€λ₯΄λ€.
- λ¬Έμμ΄ λ¦¬ν°λ΄
: μλ° μμ€ νμΌμ ν¬ν¨λ λͺ¨λ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ»΄νμΌ μμ ν΄λμ€ νμΌμ μ μ₯λλ€.
μ΄λ κ°μ λ΄μ©μ λ¬Έμμ΄ λ¦¬ν°λ΄μ νλ²λ§ μ μ₯λλ€.
λ¬Έμμ΄ λ¦¬ν°λ΄λ String μΈμ€ν΄μ€μ΄κ³ , νλ² μμ±νλ©΄ λ΄μ©μ λ³κ²½ν μ μμΌλ νλμ μΈμ€ν΄μ€λ₯Ό 곡μ νλ©΄ λκΈ° λλ¬Έμ΄λ€.
- λΉ λ¬Έμμ΄
: κΈΈμ΄κ° 0μΈ λ°°μ΄μ΄ μ‘΄μ¬ν μ μλ€. charν λ°°μ΄λ κΈΈμ΄κ° 0μΈ λ°°μ΄μ μμ±ν μ μκ³ , μ΄ λ°°μ΄μ λ΄λΆμ μΌλ‘ κ°μ§κ³ μλ λ¬Έμμ΄μ΄ λ°λ‘ λΉ λ¬Έμμ΄μ΄λ€.
String str = "";
char c = ' ';
-> String str = ""; κ°μ ννμ΄ κ°λ₯νλ€κ³ ν΄μ char c = ''; κ°μ ννλ κ°λ₯ν κ²μ μλλ€.
charν λ³μμλ λ°λμ νλμ λ¬Έμλ₯Ό μ§μ ν΄μΌνλ€.
μΌλ°μ μΌλ‘ λ³μλ₯Ό μ μΈν λ, κ° νμ μ κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°ν νμ§λ§ String μ μ°Έμ‘°ν νμ μ κΈ°λ³Έκ°μΈ Null 보λ€λ λΉ λ¬Έμμ΄λ‘, char νμ κΈ°λ³Έκ°μΈ '\u0000' λμ 곡백μΌλ‘ μ΄κΈ°ννλ κ²μ΄ 보ν΅μ΄λ€.
- String ν΄λμ€μ μμ±μμ λ©μλ