๐ŸŒฑ ์ธํ”„๋Ÿฐ/โ˜•๏ธ ๊น€์˜ํ•œ์˜ ์‹ค์ „ ์ž๋ฐ” - ์ค‘๊ธ‰ 1ํŽธ

์ž๋ฐ” Object ํด๋ž˜์Šค

mallin 2025. 9. 1. 23:45

โ˜•๏ธ  ๊น€์˜ํ•œ์˜ ์‹ค์ „ ์ž๋ฐ” - ์ค‘๊ธ‰ 1ํŽธ ์„ ๋“ฃ๊ณ  ์ž‘์„ฑํ•˜๋Š” ๋ณต์Šต ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

 

1. java.lang ํŒจํ‚ค์ง€

  • java.lang ํŒจํ‚ค์ง€๋Š” ์ž๋ฐ”๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ
  • ์ž๋ฐ” ์–ธ์–ด๋ฅผ ์ด๋ฃจ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ํด๋ž˜์Šค๋“ค์„ ๋ณด๊ด€ํ•˜๋Š” ํŒจํ‚ค์ง€
  • java.lang ํŒจํ‚ค์ง€์˜ ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค๋“ค๋กœ๋Š” Object (๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค) , String (๋ฌธ์ž์—ด), Integer (๋ž˜ํผํƒ€์ž…), Class (ํด๋ž˜์Šค ๋ฉ”ํƒ€ ์ •๋ณด) , System (์‹œ์Šคํ…œ ๊ด€๋ จ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ) ๋“ค์ด ์žˆ๋‹ค
  • java.lang ํŒจํ‚ค์ง€์— ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์€ ๋ชจ๋‘ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ž๋™์œผ๋กœ ์ž„ํฌํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž„ํฌํŠธ ๊ตฌ๋ฌธ์„ ๋”ฐ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค
// import ๊ตฌ๋ฌธ ๋ฏธ์‚ฌ์šฉ ๊ฐ€๋Šฅ
public class LangMain {
    public static void main(String[] args) {
        System.out.println("hello java");
    }
}

 


2. Object ํด๋ž˜์Šค

  • ์ž๋ฐ”์—์„œ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ํด๋ž˜์Šค๋Š” ํ•ญ์ƒ Object
  • Object ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ๋ฌต์‹œ์  ์ƒ์†๋œ๋‹ค

 

2-1. ๋ฌต์‹œ์  ์ƒ์†

๐Ÿ”ฅ ๋ฌต์‹œ์  (Implicit)
๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ์— ์ง์ ‘ ๊ธฐ์ˆ ํ•˜์ง€ ์•Š์•„๋„ ์‹œ์Šคํ…œ ๋˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ

 

class Test {

}

 

 

๋งŒ์•ฝ ์ด๋Ÿฐ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜๊ณ , ํด๋ž˜์Šค์— ์ƒ์† ๋ฐ›์„ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ 

class Test extends Object {

}

 

์œ„์ฒ˜๋Ÿผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผ ์‹œ์ ์— extends Object ๋ฅผ ์ฝ”์Šค์— ๋ฌต์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Test ํด๋ž˜์Šค๋“ค์€ ์ž๋™์œผ๋กœ Object ์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ์ƒ์†๋ฐ›๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค (toString(), equals() ๋“ฑ)

 

2-2. ๋ช…์‹œ์  ์ƒ์†

๐Ÿ”ฅ ๋ช…์‹œ์  (Explicit)
๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ์— ์ง์ ‘ ๊ธฐ์ˆ ํ•ด์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ

 

class Test extends Parent {

}

 

์œ„์ฒ˜๋Ÿผ ํด๋ž˜์Šค์— ์ƒ์†๋ฐ›์„ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” Object ๋ฅผ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š”๋‹ค

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” Object ์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค

 

2-3. ์ž๋ฐ”์—์„œ Object ํด๋ž˜์Šค๊ฐ€ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ ์ด์œ 

  1. ๊ณตํ†ต ๊ธฐ๋Šฅ ์ œ๊ณต
    • ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋•Œ๋งˆ๋‹ค ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•ด์•ผํ•˜๋ฉด ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กญ๋‹ค 
    • ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋„ ์ผ๊ด€์„ฑ์ด ์—†๋‹ค
    • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Object ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฐ์ฒด์— ํ•„์š”ํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค
  2. ๋‹คํ˜•์„ฑ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„
    • Object๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค
    • ๋‹คํ˜•์„ฑ์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ง€์›ํ•œ๋‹ค
    • ๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด๋Š” Object ํƒ€์ž…์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ , ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

3. Object ๋‹คํ˜•์„ฑ

Object ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค

class Test {

}

 

Test ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Object ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์†๋ฐ›๋Š”๋‹ค

void action(Object obj) {

}

 

Object ๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— action ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Test ํด๋ž˜์Šค๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค

์ด๋Ÿฐ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์—…์บ์ŠคํŒ…๋œ๋‹ค

 

3-1. Object ๋‹คํ˜•์„ฑ์˜ ์žฅ์ 

Object๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ๋ถ€๋ชจ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฐ์ฒด๋“ ์ง€ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค

class Test { }

public class Main {
    public static void main(String[] args) {
        Test test = new Test();
        action(test);
    }

    static void action(Object obj) {
        System.out.println("๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…: " + obj.getClass().getName());
    }
}

 

3-2. Object ๋‹คํ˜•์„ฑ์˜ ํ•œ๊ณ„

์ž์‹์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ๋ชปํ•œ๋‹ค.

๋งŒ์ผ, ์ž์‹์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋‹ค์šด์บ์ŠคํŒ…์„ ํ•ด์•ผํ•œ๋‹ค

if (obj instanceof Test test) {
	test.a();
}
  • instanceof ๋กœ Test ํด๋ž˜์Šค์ธ์ง€ ํ™•์ธํ•˜๊ณ , Test ํด๋ž˜์Šค๋กœ ๋‹ค์šด์บ์ŠคํŒ…ํ•˜๋ฉด์„œ ์ „๋‹ฌํ•œ๋‹ค
  • test.a() ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Test ํƒ€์ž„์—์„œ a() ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐพ์•„์„œ ํ˜ธ์ถœํ•œ๋‹ค

4. toString()

  • ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•œ๋‹ค
  • ๋””๋ฒ„๊น…๊ณผ ๋กœ๊น…์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • Object ํด๋ž˜์Šค์— ์ •์˜๋˜๋ฏ€๋กœ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

 

 

4-1. println ๋‚ด๋ถ€ ์ฝ”๋“œ

public void println(Object x) {
    String s = String.valueOf(x);
    if (getClass() == PrintStream.class) {
        // need to apply String.valueOf again since first invocation
        // might return null
        writeln(String.valueOf(s));
    } else {
        synchronized (this) {
            print(s);
            newLine();
        }
    }
}

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

 

println ๋‚ด๋ถ€ ์ฝ”๋“œ์—์„œ๋„ ๋„˜์–ด์˜จ ๊ฐ์ฒด(x) ๋ฅผ ๊ณง๋ฐ”๋กœ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ , String.valueOf(x) ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค

  1. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์–ด๋–ค ๊ฐ์ฒด๋“ ์ง€ ๋ฐ›๋Š”๋‹ค (Object x)
  2. String.valueOf(x) ๋ฅผ ํ˜ธ์ถœํ•ด์„œ null ์„ ํ™•์ธํ•˜๊ณ  toString() ์„ ์‹คํ–‰ํ•œ๋‹ค
  3. toString() ์˜ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ์‹ค์ œ๋กœ ์ถœ๋ ฅํ•œ๋‹ค

๊ฐ์ฒด์˜ ์ถœ๋ ฅ ํ˜•ํƒœ๋ฅผ ์ œ์–ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด toString() ์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ฉด ๋œ๋‹ค

 

 

4-2. toString() ์˜ค๋ฒ„๋ผ์ด๋”ฉ

toString() ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค์˜ ์ •๋ณด์™€ ์ฐธ์กฐ๊ฐ’๋งŒ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด์ง€ ๋ชปํ•œ๋‹ค

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ํด๋ž˜์Šค์—์„œ toString() ์„ ์žฌ์ •์˜ (์˜ค๋ฒ„๋ผ์ด๋”ฉ) ํ•ด์„œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค

public class Test {
    private String name;
    private int age;
    
    public Test(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Test{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
  }

 

 

Test test = new Test("๋ฐฅ", 25);
System.out.println(test);

 

  1. println(Object obj) ๋ฉ”์†Œ๋“œ๋กœ test ํด๋ž˜์Šค๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค
  2. ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ obj.toString() ์„ ํ˜ธ์ถœํ•œ๋‹ค
  3. ์ž์‹์—์„œ ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์ฐพ๋Š”๋‹ค
  4. Test ํด๋ž˜์Šค์— ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ Test.toString() ์„ ์‹คํ–‰ํ•œ๋‹ค

5. Object ์™€ OCP

public class ObjectPrinter {
     public static void print(Object obj) {
          String string = "๊ฐ์ฒด ์ •๋ณด ์ถœ๋ ฅ: " + obj.toString();
          System.out.println(string);
     }
}

 

๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ObjectPrinter

์ถ”์ƒ์ ์ธ Object ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ถ”์ƒ์ ์ธ ๊ฒƒ์— ์˜์กดํ•œ๋‹ค

์œ„ ์ฝ”๋“œ๋Š” ๋‹คํ˜•์  ์ฐธ์กฐ์™€ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋‹คํ˜•์„ฑ์„ ๋งค์šฐ ์ž˜ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค

  • ๋‹คํ˜•์  ์ฐธ์กฐ : Object ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•ด์„œ ๋‹คํ˜•์  ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
  • ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ : Object ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ toString() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค

 

5-1. OCP ์›์น™

Open : ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , toString() ์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค

Closed : ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ Object ์™€ toString() ์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค

 

 

5-2. System.out.println()

  • System.out.println() ๋ฉ”์„œ๋“œ๋„ Object ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋‚ด๋ถ€์—์„œ toString() ์„ ํ˜ธ์ถœํ•œ๋‹ค
  • ์ž๋ฐ”๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋‹ต๊ฒŒ ์–ธ์–ด ์Šค์Šค๋กœ๋„ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์ง•์„ ๋งค์šฐ ์ž˜ ํ™œ์šฉํ•œ๋‹ค
  • ์ž๋ฐ” ์–ธ์–ด๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋“ค์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”์— ๋”ฐ๋ผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

6. equals()

6-1. ๋™์ผ์„ฑ๊ณผ ๋™๋“ฑ์„ฑ

๋™์ผ์„ฑ (Identity) : == ์—ฐ์‚ฐ์ž

  • ๋‘ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ€ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค
  • ์™„์ „ํžˆ ๊ฐ™์Œ์„ ์˜๋ฏธ
  • ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์ธ์ง€ ์ฐธ์กฐ๊ฐ’์„ ํ™•์ธํ•œ๋‹ค

 

๋™๋“ฑ์„ฑ (Equality) : equals() ๋ฉ”์„œ๋“œ

  • ๋‘ ๊ฐ์ฒด๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™๋“ฑํ•œ์ง€ ํ™•์ธํ•œ๋‹ค
  • ๊ฐ™์€ ๊ฐ€์น˜๋‚˜ ์ˆ˜์ค€์„ ์˜๋ฏธํ•˜์ง€๋งŒ, ๊ทธ ํ˜•ํƒœ๋‚˜ ์™ธ๊ด€์ด ์™„์ „ํžˆ ๊ฐ™์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋‹ค
  • ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค
User a = new User("id-100"); // x001
User b = new User("id-100"); // x002

 

์œ„์˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ๐Ÿ™…‍โ™€๏ธ ๋™์ผ์„ฑ์€ x001, x002 ๋กœ ๋‹ค๋ฅด์ง€๋งŒ ๐Ÿ™†‍โ™€๏ธ ๋™๋“ฑ์„ฑ์€ id-100, id-100 ์œผ๋กœ ๊ฐ™๋‹ค

 

6-2. Object equals()

public boolean equals(Object obj) {
    return (this == obj);
}
  • Object ์˜ equals() ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ == ๋กœ ์ œ๊ณตํ•œ๋‹ค
  • ๋™๋“ฑ์„ฑ ๋น„๊ต๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด equals() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค
@Override
public boolean equals(Object obj) {
    User user = (User) obj;
    return this.id.equals(user.id);
}

 

6-3. equals() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ง€์ผœ์•ผ ํ•˜๋Š” ๊ทœ์น™

  • ๋ฐ˜์‚ฌ์„ฑ : ๊ฐ์ฒด๋Š” ์ž๊ธฐ ์ž์‹ ๊ณผ ๋™๋“ฑํ•ด์•ผ ํ•œ๋‹ค
  • ๋Œ€์นญ์„ฑ : ๋‘ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ์— ๋Œ€ํ•ด ๋™์ผํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด, ์ด๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค
  • ์ถ”์ด์„ฑ : ๋งŒ์•ฝ ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‘ ๋ฒˆ์งธ ๊ฐ์ฒด์™€ ๋™์ผํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ๊ฐ์ฒด๊ฐ€ ์„ธ๋ฒˆ์งธ ๊ฐ์ฒด์™€ ๋™์ผํ•˜๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฐ์ฒด๋Š” ์„ธ๋ฒˆ์งธ ๊ฐ์ฒด์™€๋„ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค
  • ์ผ๊ด€์„ฑ : ๋‘ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ, equals() ๋ฉ”์†Œ๋“œ๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค
  • null ์— ๋Œ€ํ•œ ๋น„๊ต : ๋ชจ๋“  ๊ฐ์ฒด๋Š” null ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ false ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค