IT

동등하다?(동등성) 동일하다?(동일성) 개념 정리

hoonylab 2025. 4. 17. 14:05
728x90
반응형

✅ 동등성과 동일성의 차이 (Equality vs Identity)

Java를 포함한 객체지향 프로그래밍 언어에서는 동등성(equality)동일성(identity)을 구분하는 것이 매우 중요합니다. 겉보기에는 같아 보여도 내부적으로는 완전히 다른 의미를 가지기 때문이죠.

🧠 1. 용어 정리

구분 설명
동일성 (Identity) 두 객체가 완전히 같은 객체인지 확인. 즉, 메모리 주소가 같은지를 비교. Java에서는 == 연산자를 사용.
동등성 (Equality) 두 객체의 내용이 같은지를 비교. Java에서는 equals() 메서드를 오버라이딩하여 비교.

🔍 2. 자바 코드 예제로 이해하기


public class Person {
    private String name;

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

    // equals 메서드 오버라이딩
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return this.name.equals(person.name);
    }

    public static void main(String[] args) {
        Person p1 = new Person("Alice");
        Person p2 = new Person("Alice");
        Person p3 = p1;

        System.out.println("p1 == p2: " + (p1 == p2));           // false (동일성)
        System.out.println("p1.equals(p2): " + p1.equals(p2));   // true  (동등성)
        System.out.println("p1 == p3: " + (p1 == p3));           // true  (동일성)
    }
}

📌 3. 요약 정리

  • ==동일성 확인 (메모리 주소 비교)
  • equals()동등성 확인 (내용 비교)
  • 커스텀 클래스에서는 equals() 메서드를 오버라이딩해야 의미 있는 동등성 비교가 가능
728x90
반응형