독서

[객체지향의 사실과 오해] 식별자 그리고 동등성과 동일성에 관하여

사랑우주인 2025. 1. 6. 02:44

식별자

객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다.

이 프로퍼티를 식별자라고 한다. 

 

모든 객체가 식별자를 가진다는 것은 반대로 객체가 아닌  단순한 값은 식별자를 가지지 않는다는 것을 의미한다.

 

값과 객체의 가장 큰 차이점은 값은 식별자를 가지지 않지만 객체는 식별자를 가진다는 점이다.

 

숫자, 문자열, 날짜, 시간, 금액 등과 같은 변하지 않는 양을 모델링한다. 흔히 값의 상태는 변하지 않기 때문에 불편 상태(immutable state)를 가진다고 한다. 값의 경우 두 인스턴스의 상태가 같다면 두 인스턴스를 같은 것으로 판단한다.

 

상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 동등성(equaliy)이라고 한다. 상태를 이용해 동등성을 판단할 수 있는 이유는 값의 상태가 변하지 않기 때문이다.

 

객체

객체는 시간에 따라 변경되는 값을 포함하며, 행동을 통해 상태를 변경한다. 따라서 객체는 가변 상태(mutable state)를 가진다고 말한다.

이름이 엘리스고 키가 동일한 두 사람이 있다고 하더라도 두 사람을 같은 사람이라고 하지 않는다. 이름과 키가 같지만 별개의 인격체다.

 

어린 시절의 나와 현재의 나는 같다. 키도 다르고 나이도 다르지만 나는 나다. 상태와 무관하게 동일한 사람으로 판단할 수 있는 일종의 식별자를 가지고 있는 객체다. 

 

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

 

상태를 기반으로 객체의 동일성을 판단할 수 없는 이유는 시간의 흐름에 따라 객체의 상태가 변하기 때문이다. 따라서 상태가 가변적인 두 객체의 동일성을 판단하기 위해서는 상태 변경에 독립적인 별도의 식별자를 이용할 수밖에 없다.

 

그래서

식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다.


정리

  • 값은 불변 상태를 갖는다. 따라서 값을 비교할 때 상태를 비교하면 된다.
    • 상태를 기반으로 두 값이 같은지 판단할 수 있는 성질을 동등성(equality)이라고 한다.
  • 객체는 가변 상태를 갖는다. 따라서 상태를 기반으로 비교할 수 없다. 그래서 상태 변화에 독립적인 별도의 식별자를 이용해 비교한다.
    • 식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질을 동일성(identical)이라고 한다.