ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Value와 Object, identity와 equality의 차이
    Programming 2021. 8. 7. 22:36

    객체 지향의 개념에는 값과 객체를 명확히 구분한다.

    Pizza pizza = new Pizza("Margherita");

     

     

    Value and Equality

     

    이란 숫자, 문자, 문자열, 날짜 같이 그 자체로 변하지 않는 데이터를 의미한다.

    5, "Hello", 'E', 등등은 변하지 않는 속성인 immutable state를 지닌다.

    서로 다른 두 인스턴스가 같은 값인지 확인하기 위해서는 두 인스턴스의 상태가 동일한지 확인한다.

    동일한 숫자 두 개가 있고 같은지 다른지 판별해야 한다면 똑같은 숫자 값을 가지고 있는지 확인해서 그 여부를 가릴 수 있다.

    이렇게 두 인스턴스의 상태를 이용해 동일하다고 판별하는 성질동등성(equality)이라고 한다.

    값의 상태는 절대 변하지 않기 때문에 특정 시점에 동일 타입의 두 값이 같으면 언제까지나 같을 것이라고 말할 수 있다. 따라서 값은 식별자가 필요하지 않다.

     

    Object and Identity

     

    하지만 객체는 변할 수 있는 상태, 그리고 상태를 바꿀 수 있는 행동으로 이루어져 있기 때문에 mutable state를 가진다.

    서로 다른 두 객체가 특정 시점에 완전히 동일한 상태를 가진다고 해도, 각각에 영향을 끼치는 행동의 대상이 달라질 수 있기 때문에 같은 객체라고 말할 수 없다.

    같은 객체는 상태의 여부로 결정하는 것이 아닌 식별자로 구분된다.

    같은 객체가 여러 시점에서 다른 상태를 지닌다고 해서 다른 객체로 분류되지 않기 때문이다.

    이처럼 식별자를 기반으로 객체가 같은지 판단할 수 있는 성질동일성(identity)이라고 한다.

     

    그래서 전통적인 객체를 다른 용어로는 참조 객체(reference object), 또는 엔티티(entity)라 부르고 값 객체(value object)는 식별자를 가지지 않는 값을 가리킨다.

Designed by Tistory.