๐Ÿ“š [Java] - ๋™์ผ์„ฑ(Identity)๊ณผ ๋™๋“ฑ์„ฑ(equality)

CodeByHanยท2025๋…„ 11์›” 7์ผ

์ž๋ฐ”

๋ชฉ๋ก ๋ณด๊ธฐ
8/13

์‚ฌ์‹ค ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ๋งŒ ํ•ด๋ดค์ง€, ๊นŠ๊ฒŒ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ ์ ์€ ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋งค๋ฒˆ โ€˜๋นจ๋ฆฌ ์ทจ์—…ํ•ด์•ผ์ง€!โ€™๋ผ๋Š” ์ƒ๊ฐ์— ์กฐ๊ธ‰ํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋งŒ ํ•˜๊ณ , ๊ธฐ๋ณธ ๊ฐœ๋…๋งŒ ๋Œ€์ถฉ ํ›‘๊ณ  ๋„˜์–ด๊ฐ€๋‹ˆ ๋ฉด์ ‘ ๋•Œ ์กฐ๊ธˆ๋งŒ ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋„ ๋Œ€๋‹ต์„ ์ œ๋Œ€๋กœ ๋ชป ํ–ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ๋‚ด ์ž์‹ ์ด ํ•œ์‹ฌํ•˜๊ฒŒ ๋А๊ปด์กŒ๋‹ค.
์ด์ œ๋Š” ์กฐ๊ธ‰ํ•ดํ•˜์ง€ ๋ง๊ณ , ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ œ๋Œ€๋กœ ์ค€๋น„ํ•ด๋ณด๋ ค ํ•œ๋‹ค.

๐Ÿ“Œ ๋™์ผ์„ฑ(Identity)

๋™์ผ์„ฑ์€ ๋ง ๊ทธ๋Œ€๋กœ ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์™„์ „ํžˆ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ง๋ณด๋‹ค๋Š” ์ฝ”๋“œ๋กœ ๋ณด๋ฉด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค.

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        Person personA = new Person("์ฒ ์ˆ˜");
        Person personB = new Person("์ฒ ์ˆ˜");
        Person personC = personB;

        System.out.println(personA == personB); // false (์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด)
        System.out.println(personB == personC); // true  (๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ)
    }
}

personA์™€ personB๋Š” ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋‹ค.

์™œ๋ƒํ•˜๋ฉด new ํ‚ค์›Œ๋“œ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ personC๋Š” personB๋ฅผ ๊ทธ๋Œ€๋กœ ์ฐธ์กฐํ•˜๋ฏ€๋กœ, ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ ์›์‹œ(Primitive) ํƒ€์ž…์€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ฃผ์†Œ๊ฐ€ ์—†๋‹ค.

์ด๋Ÿฐ ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜๋“ค์€ Stack ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๊ฐ’์ด ์ง์ ‘ ์ €์žฅ๋œ๋‹ค.

int a = 10;
int b = 10;

System.out.println(a == b); // true

๊ทธ๋ž˜์„œ == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๋™์ผํ•˜๋‹ค๊ณ  ๋งํ•œ๋‹ค.

โ‰๏ธ ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—๋Š” Stack, Heap, ๋ฉ”์„œ๋“œ(Method) ์˜์—ญ์ด ์žˆ๋‹ค.
Stack ์˜์—ญ์—๋Š” ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜๋‚˜ ์ฐธ์กฐ ๋ณ€์ˆ˜(์ฃผ์†Œ๊ฐ’)๊ฐ€ ์ €์žฅ๋œ๋‹ค.
Heap ์˜์—ญ์—๋Š” new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑํ•œ ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋œ๋‹ค.
๋ฉ”์„œ๋“œ ์˜์—ญ์—๋Š” ํด๋ž˜์Šค ์ •๋ณด(๋ฉ”์„œ๋“œ, static ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ๋“ฑ)๊ฐ€ ์ €์žฅ๋œ๋‹ค.

๐Ÿ“Œ ๋™๋“ฑ์„ฑ(equality)

๋ง ๊ทธ๋Œ€๋กœ ๋™๋“ฑํ•˜๋‹ค๋Š” ๋œป์œผ๋กœ, ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋™๋“ฑ์„ฑ์€ ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„,
๋‚ด์šฉ์ด ๊ฐ™์œผ๋ฉด ๋‘ ๋ณ€์ˆ˜๋Š” ๋™๋“ฑํ•˜๋‹ค๊ณ  ๋งํ•œ๋‹ค.

๋™๋“ฑํ•œ์ง€๋Š” ์ฃผ๋กœ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒ๋ณ„ํ•œ๋‹ค.

String str1 = new String("hello");
String str2 = new String("hello");

System.out.println(str1 == str2); // false (์ฃผ์†Œ ๋‹ค๋ฆ„)
System.out.println(str1.equals(str2)); // true  (๋‚ด์šฉ ๊ฐ™์Œ)

๐Ÿšจ ๋™์ผํ•˜๋ฉด ๋™๋“ฑ, ํ•˜์ง€๋งŒ ๋™๋“ฑํ•˜๋‹ค๊ณ  ๋™์ผ์€ ์•„๋‹ˆ๋‹ค.

๐Ÿ“š equals()

๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•ด equals() ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฌด์กฐ๊ฑด ๋™๋“ฑ์„ฑ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฑด ์•„๋‹ˆ๋‹ค.

public boolean equals(Object obj) {
    return (this == obj);
}

์ด ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ์กฐ์ƒ์ธ Object ํด๋ž˜์Šค์—์„œ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋‹จ์ˆœํžˆ == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋™์ผ์„ฑ(์ฃผ์†Œ๊ฐ’ ๋น„๊ต)๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฆ‰, ์ž์‹ ํด๋ž˜์Šค์—์„œ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(override) ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ, equals()๋Š” ์‚ฌ์‹ค์ƒ ==์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

์ด์ œ ๋Œ€ํ‘œ์ ์œผ๋กœ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•œ ๋ช‡ ๊ฐ€์ง€ ํด๋ž˜์Šค๋“ค์„ ์‚ดํŽด๋ณด์ž.

1. String์˜ equals()

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String) anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

String ํด๋ž˜์Šค๋Š” ์œ„์ฒ˜๋Ÿผ equals()๋ฅผ ์žฌ์ •์˜ํ•ด์„œ, ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ์„ ํ•œ ๊ธ€์ž์”ฉ ๋น„๊ตํ•œ๋‹ค.

์ฝ”๋“œ ํ๋ฆ„์„ ๋ณด๋ฉด,

  1. ๋จผ์ € ==๋กœ ๋™์ผ์„ฑ(์ฃผ์†Œ)์„ ํ™•์ธํ•˜๊ณ ,

  2. ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๋ฉด instanceof๋กœ String ํƒ€์ž…์ธ์ง€ ๊ฒ€์‚ฌํ•œ ๋’ค,

  3. ๋ฌธ์ž ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋น„๊ตํ•ด์„œ ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰, ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ๋„ ๋‚ด์šฉ์ด ๊ฐ™์œผ๋ฉด ๋™๋“ฑํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

2. Integer์˜ equals()

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

Integer ํด๋ž˜์Šค๋„ equals()๋ฅผ ์žฌ์ •์˜ํ•ด์„œ, ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด๊ฐ€ Integer์ธ์ง€ ํ™•์ธํ•œ ํ›„, ๊ทธ ์•ˆ์˜ ๊ฐ’(value)์„ ==์œผ๋กœ ๋น„๊ตํ•œ๋‹ค.

๊ฒฐ๊ตญ ๋‘ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋Š” ๋‹ค๋ฅด๋”๋ผ๋„ ์ €์žฅ๋œ ์ •์ˆ˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๋™๋“ฑํ•˜๋‹ค๊ณ  ๋ณธ๋‹ค.

3. Objects์˜ equals()

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

Objects ํด๋ž˜์Šค์˜ equals()๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค. ๋‘ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•˜๋ฉด ๋ฐ”๋กœ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ ,

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฐ์ฒด์˜ equals() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋น„๊ตํ•œ๋‹ค.

์ฆ‰, ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์ธ์ž์˜ equals() ๊ตฌํ˜„์— ์ „์ ์œผ๋กœ ์˜์กดํ•œ๋‹ค.

๋งŒ์•ฝ ์ฒซ ๋ฒˆ์งธ ๊ฐ์ฒด๊ฐ€ equals()๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๊ฒฐ๊ตญ ๋™์ผ์„ฑ(์ฃผ์†Œ) ๋น„๊ต๋งŒ ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ํด๋ž˜์Šค์—์„œ ๋‚ด์šฉ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ๋ฐ˜๋“œ์‹œ equals()๋ฅผ ์žฌ์ •์˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

4. ArrayList์˜ equals()

private boolean equalsArrayList(ArrayList<?> other) {
    final int otherModCount = other.modCount;
    final int s = size;
    boolean equal;
    if (equal = (s == other.size)) {
        final Object[] otherEs = other.elementData;
        final Object[] es = elementData;
        if (s > es.length || s > otherEs.length) {
            throw new ConcurrentModificationException();
        }
        for (int i = 0; i < s; i++) {
            if (!Objects.equals(es[i], otherEs[i])) {
                equal = false;
                break;
            }
        }
    }
    other.checkForComodification(otherModCount);
    return equal;
}

ArrayList๋Š” ์ž์‹ ์ด ๊ฐ€์ง„ ์š”์†Œ(element)๋“ค๊ณผ ๋น„๊ต ๋Œ€์ƒ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•ด์„œ ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด Objects.equals()๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์ฆ‰, ArrayList์˜ equals()๋Š” ๋‘ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋™๋“ฑํ•˜๋ฉด ์ „์ฒด๊ฐ€ ๋™๋“ฑํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“š hashCode()์™€ equals()์˜ ๊ด€๊ณ„

์‚ฌ์‹ค equals()๋ฅผ ์ด์•ผ๊ธฐํ•  ๋•Œ hashCode()๋ฅผ ๋นผ๋†“์„ ์ˆ˜ ์—†๋‹ค.

์™œ๋ƒํ•˜๋ฉด ์ด ๋‘ ๋ฉ”์„œ๋“œ๋Š” ํ•ญ์ƒ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ์„ธํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

HashMap, HashSet ๊ฐ™์€ ์ปฌ๋ ‰์…˜์€ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•  ๋•Œ, ๋จผ์ € hashCode()๋กœ ๋น ๋ฅด๊ฒŒ ํ›„๋ณด๋ฅผ ์ฐพ๊ณ , ๊ทธ๋‹ค์Œ์— equals()๋กœ ์‹ค์ œ ๋‚ด์šฉ์ด ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค.

import java.util.Objects;

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // ๋‚ด์šฉ(๋™๋“ฑ์„ฑ) ๋น„๊ต
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof Person)) return false;
        Person other = (Person) obj;
        return age == other.age && name.equals(other.name);
    }

    // ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜์„ ์œ„ํ•œ hashCode ์žฌ์ •์˜
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
Person p1 = new Person("์ฒ ์ˆ˜", 20);
Person p2 = new Person("์ฒ ์ˆ˜", 20);

System.out.println(p1.equals(p2));   // true
System.out.println(p1.hashCode() == p2.hashCode()); // true

๐Ÿšจ equals๋งŒ ์žฌ์ •์˜ํ•˜๊ณ  hashCode๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด?

Person p1 = new Person("์ฒ ์ˆ˜", 20);
Person p2 = new Person("์ฒ ์ˆ˜", 20);

HashSet<Person> set = new HashSet<>();
set.add(p1);
set.add(p2);

System.out.println(set.size()); // 2 (๐Ÿšจ ์ค‘๋ณต ํŒ๋‹จ ์‹คํŒจ)

โž• ์ฐธ๊ณ 
equals()๊ฐ€ true๋ผ๋ฉด, hashCode()๋„ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
hashCode()๊ฐ€ ๊ฐ™๋‹ค๊ณ  ํ•ด์„œ equals()๋„ true์ธ ๊ฑด ์•„๋‹ˆ๋‹ค.


์˜ˆ์ƒ์งˆ๋ฌธ

1. ๋™์ผ์„ฑ๊ณผ ๋™๋“ฑ์„ฑ์˜ ์ฐจ์ด๋Š”?

๋‘ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๊ฐ™์œผ๋ฉด ๋™์ผํ•˜๊ณ , ๋‘ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ๊ฐ™์œผ๋ฉด ๋™๋“ฑํ•˜๋‹ค๊ณ  ๋งํ•œ๋‹ค. ๋™์ผ์„ฑ์€ == ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด, ๋™๋“ฑ์„ฑ์€ eqauls ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ํŒ๋ณ„ํ•œ๋‹ค.

๊ผฌ๋ฆฌ ์งˆ๋ฌธ : == ์—ฐ์‚ฐ์ž, eqauls ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ์„ธ์š”

== ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์ฒด์˜ ๋™์ผ์„ฑ์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ, eqauls ์—ฐ์‚ฐ์ž๋Š” ๋‘ ๊ฐ์ฒด์˜ ๋™๋“ฑ์„ฑ์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. eqauls ์—ฐ์‚ฐ์ž๋Š” ์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ) ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ == ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ฐจ์ด๊ฐ€ ์—†๊ณ , ๋”ฐ๋ผ์„œ eqauls ์—ฐ์‚ฐ์ž๋Š” ๊ฐ ๊ฐ์ฒด์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ) ํ•ด์•ผํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, String ํด๋ž˜์Šค๋Š” equals()๋ฅผ ์žฌ์ •์˜ํ•ด์„œ "hello".equals(new String("hello")) ์™€ ๊ฐ™์ด
๋‚ด์šฉ์ด ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

Integer ํด๋ž˜์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚ด๋ถ€์˜ ๊ฐ’(value)์ด ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก equals()๊ฐ€ ์žฌ์ •์˜๋˜์–ด ์žˆ๋‹ค.

2. equals()์™€ hashCode()๋Š” ์™œ ํ•ญ์ƒ ๊ฐ™์ด ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋‚˜์š”?

equals()๋Š” ๋‚ด์šฉ ๋น„๊ต, hashCode()๋Š” ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜์—์„œ ๊ฐ์ฒด ์œ„์น˜๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

HashSet, HashMap์€ ๋จผ์ € hashCode()๋กœ ๋น ๋ฅด๊ฒŒ ํ›„๋ณด๋ฅผ ์ฐพ๊ณ , ๊ทธ๋‹ค์Œ equals()๋กœ ์‹ค์ œ ๋™๋“ฑ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์—, equals()๊ฐ€ true์ธ๋ฐ hashCode()๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ™์€ ๊ฐ์ฒด**๋กœ ์ธ์‹๋˜์ง€ ์•Š๋Š”๋‹ค.


๋งˆ์น˜๋ฉฐ...

์œ„ ์‚ฌ์ง„์€ ์˜ˆ์ „์— ์—ฌ๋ฆ„์— ๋‚จ์–‘์ฃผ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ ๋จธ๋ฌผ๋ €๋˜ ์ˆ™์†Œ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐฑ์—”๋“œ ๋ฐ๋ธŒ์ฝ”์Šค ๋ฐฉํ•™ ๊ธฐ๊ฐ„ ์ค‘์— ๋ฐฉ๋ฌธํ–ˆ๋Š”๋ฐ, ๊ณต๊ธฐ๋„ ๋ง‘๊ณ  ํž๋ง๋˜๋Š” ๊ธฐ๋ถ„์ด์—ˆ๋‹ค.

๋‹ค๋งŒ ๋ฒŒ๋ ˆ๊ฐ€ ๋งŽ์•„์„œ ๊ฝค ๊ณ ์ƒํ–ˆ๋˜ ๊ธฐ์–ต๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜๋„ ์–ธ์  ๊ฐ€ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•˜๊ณ  ์‹ถ๋‹ค.

์š”์ฆ˜ ๋งˆ์Œ์ด ๋„ˆ๋ฌด ์กฐ๊ธ‰ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์ŠคํŠธ๋ ˆ์Šค๋„ ๋ฐ›๊ณ , ๋ถˆ์•ˆํ•  ๋•Œ๋„ ๋งŽ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋‹ค์‹œ ๋งˆ์Œ์„ ๋‹ค์žก๊ณ  ์ฒœ์ฒœํžˆ ๊ณต๋ถ€ํ•ด๋ณด๋ ค ํ•œ๋‹ค.

โ€œ์ฒœ์ฒœํžˆ ๊ฐ€๋„ ๊ดœ์ฐฎ๋‹ค. ์ค‘์š”ํ•œ ๊ฑด ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.โ€

profile
๋…ธ๋ ฅ์€ ๋ฐฐ์‹ ํ•˜์ง€ ์•Š์•„ ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€