Taking baby-developer steps

[객체지향의 사실과 오해] 2. 이상한 나라의 객체 -3 객체는 "식별자"를 가진다. 본문

CS 지식/객체지향

[객체지향의 사실과 오해] 2. 이상한 나라의 객체 -3 객체는 "식별자"를 가진다.

Surin Lee 2023. 10. 31. 14:03

"객체가 식별 가능하다"는 "서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다"라는 말이다.

모든 객체는 식별자를 가지며, 이를 이용해 객체를 구별할 수 있다. 식별자란 특정한 프로퍼티를 말한다. 값과 객체의 가장 큰 차이점 또한 값은 식별자가 없고 객체는 식별자를 가진다는 것이다. -> 이는 시스템을 설계 할 때 값과 객체의 차이를 명시적으로 표현하는데 매우 중요하다.

 

값이란, 변하지 않는 불변의 상태(immutable state)를 가진다. 값의 경우 두 인스턴스의 상태가 같다면 두 인스턴스를 같은 것으로 판단한다. "상태가 같으면" 값이 같다. 상태가 다르면 두 인스턴스는 다른 것으로 판단한다. 이처럼 상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 동등성(equality)라고 한다. 상태로 동등성을 판단할 수 있는 것은 값의 상태가 변하지 않기 때문이다. 값은 오직 상태만으로 동등성을 판단하기 때문에 각 인스턴스를 구별하기 위한 별도의 식별자가 필요하지 않다.

 

객체란, 시간에 따라 변경되는 상태를 포함하기 때문에 가변상태(mutable state)를 가진다. 특히 행동을 통해 상태를 변경한다. 즉 객체는 상태와는 무관하게 식별자를 기반으로 같은가를 판단하며, 이런 성질을 동일성(identical)이라고 한다. 이름이 앨리스이고 키가 동일한 두사람을 그 누구도 같은 사람이라고 생각하지 않는다. 둘은 완전의 별개의 인격체다. 또 7살의 나와 현재의 나는 키, 성격, 좋아하는 것이 많이 다르지만 이런 상태와는 무관하게 동일한 인물로 판단될 수 있는 식별자를 가지고 있다.

 

객체와 값 모두 class를 이용해 구현된다. 예를들어 객체인 Person 클래스와 Integer 라는 클래스가 그렇다. 언어 관점에서 값과 객체는 모두 클래스로 생성된 객체이기 때문에 둘이 혼동 될 수 있다. 이런 불편을 줄이고자 참조객체(reference object) 또는 엔터티(entity)는 식별자를 객체를 가리키고, 값 객체(value object)는 식별자를 가지지 않는 값을 가리킨다. 

 

객체의 식별자 개념은 상속, 캡슐화, 다양성과 같은 두드러진 개념에 비해 간과되기 쉽다. 그러나 식별자는 객체지향 패러다임의 표현력을 높이는데 중요한 역할을 한다.

 

- 객체는 어떤 상태에 있더라도 유일하게 식별 가능하다.

 

 

 

Comments