λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Java] Object 클래슀

좜처

ChatGPT


μžλ°”μ˜ Object ν΄λž˜μŠ€λŠ” μžλ°”μ˜ λͺ¨λ“  클래슀의 μ΅œμƒμœ„ 클래슀이며, μžλ°”μ˜ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 μš”μ†Œμ΄λ‹€. λͺ¨λ“  μžλ°” ν΄λž˜μŠ€λŠ” μ§μ ‘μ μœΌλ‘œ λ˜λŠ” κ°„μ ‘μ μœΌλ‘œ Object 클래슀λ₯Ό 상속받기 λ•Œλ¬Έμ—, λͺ¨λ“  μžλ°” κ°μ²΄λŠ” Object 클래슀의 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

 

μ£Όμš” νŠΉμ§• 및 λ©”μ„œλ“œ

1. κΈ°λ³Έ λ©”μ„œλ“œ

Object ν΄λž˜μŠ€λŠ” μžλ°”μ˜ λͺ¨λ“  객체가 기본적으둜 μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜κ³  μžˆλ‹€. 이듀 λ©”μ„œλ“œλŠ” μžλ°”μ˜ λͺ¨λ“  객체에 κ³΅ν†΅λœ λ™μž‘μ„ μ œκ³΅ν•œλ‹€.

 

public String toString()

객체의 λ¬Έμžμ—΄ ν‘œν˜„μ„ λ°˜ν™˜ν•œλ‹€. 이 λ©”μ„œλ“œλŠ” Object ν΄λž˜μŠ€μ—μ„œ 기본적으둜 제곡되며, λŒ€λΆ€λΆ„μ˜ ν΄λž˜μŠ€λŠ” 이 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜μ—¬ 객체의 μœ μš©ν•œ 정보λ₯Ό λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.

 

μ˜ˆμ‹œ

@Override
public String toString() {
    return "MyClass object";
}

 

public boolean equals(Object obj)

두 객체가 λ™μΌν•œμ§€ λΉ„κ΅ν•œλ‹€. κΈ°λ³Έ κ΅¬ν˜„μ€ 두 객체의 μ°Έμ‘°κ°€ 같은지 λΉ„κ΅ν•˜μ§€λ§Œ, λ§Žμ€ ν΄λž˜μŠ€λŠ” 이 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜μ—¬ 객체의 μ‹€μ œ λ‚΄μš©μ΄λ‚˜ μƒνƒœλ₯Ό λΉ„κ΅ν•œλ‹€.

 

μ˜ˆμ‹œ

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    MyClass myClass = (MyClass) obj;
    return Objects.equals(attribute, myClass.attribute);
}

 

public int hashCode()

객체의 ν•΄μ‹œ μ½”λ“œλ₯Ό λ°˜ν™˜ν•œλ‹€. equals() λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜λŠ” 경우, hashCode()도 μΌκ΄€λ˜κ²Œ μ˜€λ²„λΌμ΄λ“œν•΄μ•Ό ν•œλ‹€. ν•΄μ‹œ μ½”λ“œλŠ” ν•΄μ‹œ 기반 μ»¬λ ‰μ…˜μ—μ„œ 객체λ₯Ό μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

 

μ˜ˆμ‹œ

@Override
public int hashCode() {
    return Objects.hash(attribute);
}

 

protected Object clone()

객체의 λ³΅μ œλ³Έμ„ μƒμ„±ν•œλ‹€. 이 λ©”μ„œλ“œλŠ” Cloneable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œν•˜μ—¬ μ‚¬μš©ν•œλ‹€.

 

μ˜ˆμ‹œ

@Override
protected Object clone() throws CloneNotSupportedException {
    return super.clone();
}

 

public final Class<?> getClass()

객체의 클래슀 정보λ₯Ό λ°˜ν™˜ν•œλ‹€. 이 λ©”μ„œλ“œλŠ” 객체가 μ–΄λ–€ 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€ 확인할 λ•Œ μœ μš©ν•˜λ‹€.

 

public void notify(), public void notifyAll(), public void wait()

μŠ€λ ˆλ“œ κ°„μ˜ 톡신을 μœ„ν•œ λ©”μ„œλ“œλ‹€. notify()와 notifyAll()은 λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ 기닀리고 μžˆλŠ” 객체λ₯Ό κΉ¨μš°λŠ” 데 μ‚¬μš©λ˜κ³ , wait()λŠ” ν˜„μž¬ μŠ€λ ˆλ“œλ₯Ό λŒ€κΈ° μƒνƒœλ‘œ λ§Œλ“ λ‹€.

 

 

πŸ€” finalize() λ©”μ†Œλ“œμ— λŒ€ν•΄μ„œλŠ” ChatGPTκ°€ μ„€λͺ…해주지 μ•Šμ•˜κΈΈλž˜, μ™œ κΈ°λ³Έ λ©”μ„œλ“œλ‘œ μ„€λͺ…ν•˜μ§€ μ•Šμ•˜λŠ”μ§€ μ§ˆλ¬Έν–ˆλ‹€.

더보기

finalize() λ©”μ†Œλ“œλŠ” Object ν΄λž˜μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μžλ°”μ—μ„œ finalize() λ©”μ„œλ“œλŠ” λ©”λͺ¨λ¦¬ 관리와 κ΄€λ ¨λœ κΈ°λŠ₯을 μ œκ³΅ν•˜λ©°, κ·Έ μ‚¬μš©μ΄ 점차 ꢌμž₯λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ•žμ„œ μ„€λͺ…ν•˜μ§€ μ•Šμ•˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ— finalize() λ©”μ„œλ“œμ— λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…을 μ œκ³΅ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

 

2. 상속 및 λ‹€ν˜•μ„±

λͺ¨λ“  μžλ°” 클래슀의 μƒμœ„ 클래슀

μžλ°”μ—μ„œ λͺ¨λ“  ν΄λž˜μŠ€λŠ” Object 클래슀λ₯Ό 상속받기 λ•Œλ¬Έμ—, Object ν΄λž˜μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

λ‹€ν˜•μ„±

Object 클래슀λ₯Ό 톡해 λ‹€μ–‘ν•œ νƒ€μž…μ˜ 객체λ₯Ό κ³΅ν†΅λœ λ°©μ‹μœΌλ‘œ λ‹€λ£° 수 있으며, λ©”μ„œλ“œ μΈμžμ™€ λ°˜ν™˜ νƒ€μž…μ„ Object둜 μ„€μ •ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž…μ˜ 객체λ₯Ό μœ μ—°ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.

 

μ‚¬μš© μ˜ˆμ‹œ

public class Example {
    public static void main(String[] args) {
        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();
        
        System.out.println(obj1.toString());  // MyClass object
        System.out.println(obj1.equals(obj2));  // true or false based on implementation
        System.out.println(obj1.hashCode());  // Hash code of obj1
        System.out.println(obj1.getClass().getName());  // Fully qualified class name
    }
}

class MyClass {
    @Override
    public String toString() {
        return "MyClass object";
    }

    @Override
    public boolean equals(Object obj) {
        return this == obj;  // Basic equality check
    }

    @Override
    public int hashCode() {
        return 42;  // Example hash code
    }
}

 

 


ChatGPT의 좜처

 

좜처

  1. Java SE Documentation - Object Class
    • μžλ°”μ˜ Object ν΄λž˜μŠ€μ— λŒ€ν•œ 곡식 λ¬Έμ„œλ‘œ, 클래슀 및 λ©”μ„œλ“œμ— λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€.
  2. "Effective Java" by Joshua Bloch
    • μžλ°” ν”„λ‘œκ·Έλž˜λ°μ˜ λͺ¨λ²” 사둀λ₯Ό 닀룬 μ±…μœΌλ‘œ, Object ν΄λž˜μŠ€μ™€ κ΄€λ ¨λœ λ©”μ„œλ“œμ™€ κ·Έ μ‚¬μš©μ— λŒ€ν•΄ μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.
  3. "Java: The Complete Reference" by Herbert Schildt
    • μžλ°”μ˜ κΈ°λ³Έ κ°œλ…μ„ ν¬κ΄„μ μœΌλ‘œ μ„€λͺ…ν•˜λ©°, Object ν΄λž˜μŠ€μ™€ κ·Έ 역할에 λŒ€ν•΄ λ‹€λ£Ήλ‹ˆλ‹€.