객체의 기준

수많은 객체는 본질적으로 해당 객체의 속성이 아닌 연속성과 식별성이 이어지느냐를 기준으로 정의된다.

Entity 란

어떤 객체를 일차적으로 해당 객체의 식별성으로 정의할 경우 그 객체를 ENTITY 라 한다. ENTITY 에는 모델링과 설계상의 특수한 고려사항이 포함돼 있다. ENTITY 는 자신의 생명주기 동안 형태와 내용이 급격하게 바뀔 수도 있지만 연속성은 유지해야 한다. 또한 사실상 ENTITY 를 추적하려면 ENTITY 에 식별성이 정의돼 있어야 한다. ENTITY 의 클래스 정의와 책임, 속성, 연관관계는 ENTITY 에 포함된 특정 속성보다는 ENTITY 의 정체성에 초점을 맞춰야한다. ENTITY 가 그렇게까지 급격하게 변형되지 않거나 생명주기가 복잡하지 않더라도 의미에 따라 ENTITY 를 분류한다면 모델이 더욱 투명해지고 구현은 견고해질 것이다.

예) 사람, 도시, 자동차, 복권 티켓, 은행 거래

한편 모델 내의 모든 객체가 의미있는 식별성을 지닌 ENTITY 인 것은 아니다.

한 객체가 속성보다는 식별성으로 구분될 경우 모델 내에서 이를 해당 객체의 주된 정으로 삼아라. 클래스 정의를 단순하게 하고 생명주기의 연속성과 식별성에 집중하라. 객체의 형태나 이력에 관계없이 각 객체를 구별하는 수단을 정의하라. 객체의 속성으로 객체의 일치 여부를 판단하는 요구사항에 주의하라. 객 객체에 대해 유일한 결과를 반환하는 연산을 정의하라. 이러한 연산은 외부에서 가져오거나 시스템에서 자체적으로 만들어 내는 임의의 식별자 일 수도 있지만, 모델에서 식별성을 구분하는 방법과 일치해야 한다. 모델은 동일하다는 것이 무슨의미인지 정의해야 한다.

ENTITY 모델링

ENTITY 의 가장 기본석인 책임은 객체의 행위가 명확하고 예측 가능해질 수 있게 연속성을 확립하는 것이다. ENTITY 는 별도로 분리되어 있을때 자신의 책임을 가장 잘 수행한다. ENTITY 의 속성이나 행위에 집중하기 보다는 ENTITY 객체의 본질적인 특징만으로 정의해야한다. 개념에 필수적인 행위만 추가하고 그행위에 필요한 속성만 추가한다. 그 밖의 객체는 행위와 속성을 검토해서 가장 중심이되는 ENTITY 와 연관관계에 있는 다른 객체로 옮긴다.

식별 연산의 설계

식별성에 대한 정의는 모델로부터 나온다. 따라서 식별성을 정의하려면 도메인을 이해해야 한다.

때때로 어떤 데이터의 속성의 조합이 시스템에서 유일함을 보장받거나 단순히 유일하도록 제약되기도 한다.(예로 들면, 각신문은 제목과 도시, 발행일로 구분할 수 있을 것이다.) 한객체의 속성으로 구성되는 실질적인 고유키가 없다면 또 다른 일반적인 해법은 각 인스턴스에 해당 클래스 내에서 유일한 기호를 덧붙이는 것이다. 이러한 ID 기호가 생성되어 ENTITY 의 속성으로 저장되면 ID는 붋변성을 갖는다.

"두 객체가 동일하다는 것이 무엇을 의미하는가"라는 근원적인 문제를 놓치기 쉽다. ID 를 지닌 각 객체를 표시하거나 두 인스턴스를 비교하는 연산을 작성하기는 쉽지만 이러한 ID 나 연산이 도메인에 의미있는 구분법에 부합하지 않는다면 문제를 더욱 혼란스럽게 만들뿐이다. 이는 식별성 할당 연산에 간혹 사람이 개입할 때가 있기 때문이다.