본문 바로가기

객체지향의 사실과 오해

2장 이상한 나라의 객체 - 2

식별자

객체란 인가의 인지 능력을 이용해 식별 가능한 경계를 가진 모든 사물을 의미한다. 객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다. 이 프로퍼티를 식별자라고 한다. 모든 객체는 식별자를 가지며 식별자를 이용해 객체를 구별할 수 있다.

 

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

 

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

 

객체는 시간에 따라 변경되는 상태를 포함하며,  행동을 통해 상태를 변경한다. 따라서 객체는 가변 상태(mutable state)를 가진다. 두 객체의 상태가 완전히 똑같더라도 두 객체는 독립적인 별개의 객체로 다뤄야 한다. 이름이 앨리스이고 키가 동일한 사람이 함께 있다고 하더라도 어떤 그 누구도 두 사람을 같은 사람이라고 생각하지 않는다. 비록 이름과 키 등 상태가 완전히 동일하지만 두 사람은 완전히 별개의 인격체다.

 

나 자신이라는 객체가 있다고 하자. 나의 어렸을적 키와 몸무게와 현재 나의 키와 몸무게 즉, 상태는 다르지면 나 자신이란 사실은 변함이 없다. 이처럼 두 객체가 상태가 다르더라도 식별자가 같다면 두 객체를 같은 객체로 판단할 수 있다. 식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질을 동일성(identical)이라고 한다.

 

식별자 정의

식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼다. 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야 한다. 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있다.

기계로서의 객체

기계로서의 객체라는 이미지는 차가운 금속 외피로 둘러싸인 블랙박스다. 기계의 부품은 단단한 금속 외피 안에 감춰져 있기 때문에 기계를 분해하지 않는 한 기계의 내부를 직접 볼 수 없다. 대신 사람은 기계의 외부에 부착된 사각형과 원 모양의 버튼을 이용해야만 기계와 상호작용할 수 있다.

 

사각형 모양의 버튼은 상태를 변경할 수 있다. 원 모양의 버튼 객체의 상태를 조회할 수 있다. 사용자가 객체 기계의 버튼 눌러 상태를 변경하거나 상태를 조회를 요청하는 것은 객체의 행동을 유발하기 위해 메시지를 전송하는 것과 유사하다. 버튼을 누르는 것은 기계의 사용자지만 눌린 버튼에 따라 어떤식으로 동작할지는 기계 스스로 결정한다. 이것은 전달된 메시지에 따라 스스로 판단하고 결정하는 자율적인 객체의 특성을 정확하게 묘사한다.

 

어떤 사용자도 직접 기계를 열어 기계 냅의 상태를 직접 접근하려고 하지 않는다. 객체에 접근할 수 있는 유일한 방법은 객체가 제공하는 행동뿐이라는 점을 강조한다. 즉 객체가 제공하는 명령 버튼과 쿼리 버튼으로 구성된 인터페이스를 통해서만 객체에 접근 할 수 있다. 객체 기계가 제공하는 버튼을 통해서만 상태에 접근할 수 있다는 점은 객체의 캡슐화를 강조한다.

행동이 상태를 결정한다.

객체는 다른 객체와 협력하기 위해 존재한다. 객체의 행동은 객체가 협력에 참여하는 유일한 방법이다. 따라서 객체가 적합하지를 결정하는 것은 그 객체의 상태가 아니라 행동이다. 설계자로서 우리는 협력의 문맥에 맞는 적절한 행동을 수행하는 객체를 발견하거나 창조해야 한다.

 

객체지향 설계는 어플리케이션에 필요한 협력을 생각하고 협력에 참여하는 데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택하는 방식으로 수행된다. 행동을 결정한 후에야 행동에 필요한 정보가 무엇인지를 고려하게 되며 이 과정에서 필요한 상태가 결정된다. 따라서 먼저 객체의 행동을 결정하고 그 후에 행동에 적절한 상태를 선택하게 된다.

 

 

 

'객체지향의 사실과 오해' 카테고리의 다른 글

3장 타입과 추상화  (0) 2022.04.06
2장 이상한 나라의 객체 - 1  (0) 2022.04.01
1장. 협력하는 객체들의 공통체  (0) 2022.04.01