-
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)는 식별자를 가지지 않는 값을 가리킨다.
'Programming' 카테고리의 다른 글
Overriding(오버라이딩)과 Overloading(오버로딩) (1) 2021.08.16 [Python] Datetime 시간 객체 활용하기(문자열 변환, 증감, 대소비교) (0) 2021.03.24