객체지향
[객체지향] 상태, 행동, 식별자
메성
2020. 2. 24. 01:16
반응형
객체란, 상태, 행동, 식별자
- 객체의 행동의 결과는 상태에 영향을 받고, 객체는 유일하게 식별이 가능하다.
- 한 객체에서 상태가 다르면 같은 행동이라도 행동의 결과는 달라지지만 여전히 식별 가능한 객체이다.
- Ex. 앨리스의 키는 현재 상태에 따라 매우 커질수도 있고, 매우 작아질수도 있으나, 앨리스는 여전히 앨리스이다.
상태
- 상태를 알면 행동의 결과를 쉽게 예측할 수 있다.
- 객체의 상태는 정적인 프로퍼티(변하지 않는 상태), 동적인 프로퍼티(시간에 따라 변하는 상태)로 구성된다.
- 객체의 프로퍼티
- 객체를 구성하는 단순한 값인 속성과 객체와 객체를 연결하는 링크의 조합을 말한다.
- 객체는 스스로의 행동에 의해서만 상태가 변경된다.
- 즉, 외부의 객체 메시지를 통해 객체 스스로가 메시지를 참고하여 상태를 변경하는 것이다.
행동
-
객체의 상태를 변경하는 것은 객체의 자발적인 행동뿐이다. (메시지를 받아 상태가 변경되는 것도 결국 객체의 자발적인 행동에 의해 변경되는 것이다.)
-
행동과 상태
- 행동과 상태의 조합으로 행동을 우아하게 표현할 수 있다.
- 현재 행동의 결과를 확인할 때, 과거의 행동을 돌아볼 필요 없이 상태를 이용하면 결과를 쉽게 확인할 수 있다.
- Ex. 앨리스의 키가 40cm이면 문을 통과할 수 있다.
-
협력과 행동
- 객체의 행동은 두 가지 관점에서 살펴볼 수 있다.
- 첫번째로, 객체 자신의 상태 변경
- 두번째로, 협력하는 다른 객체에 대한 메시지 전송
-
상태 캡슐화
- 메시지 송신자는 메시지 수신자의 상태 변경에 대해서는 전혀 알지 못한다. 그저 그러기를 바라고 전달할 뿐이다.
- 상태를 외부에 노출시키지 않고 행동을 통해 캡슐화하는 것이다. (객체의 자율성을 높인 것이다.)
- 자율적인 객체는 스스로 판단하고 스스로 결정하기 때문에 자율성이 높아지고 객체의 지능도 높아진다.
- 객체의 지능이 높아진다는 것은, 협력하는 과정이 유연하고 간결해진다는 결과를 도출한다. 즉, 이것이 상태 캡슐화의 이유이다.
식별자
- 객체가 식별가능하다는 것은 객체를 서로 구별할 수 있는 특정 프로퍼티가 객체 안에 존재하다는 것이다.
- 객체와 값의 가장 큰 차이는 값은 식별자를 가지지 않지만, 객체는 식별자를 가진다는 점이다.
- 값과 객체
- 값(Integer, String)의 경우 불변상태이므로 두 인스턴스의 상태가 같으면 두 인스턴스는 동등하다고 본다.
- 객체의 경우 시간에 따라 변경되는 가변상태이므로 타입이 같은 두 객체의 상태가 같더라도 동등하다고 볼 수 없고, 상태가 다른데도 동일한 객체라고 볼 수있다.
- Ex. 이름이 같고, 나이가 같은 두 사람이 함께 있더라도 둘은 명백히 다른 사람이다.
- Ex. 10년전의 나와 10년 후의 나는 상태가 다르지만 결국 동일한 사람이다.
- 여기에서 말하는 것은, 상태를 기반으로 객체의 동일성을 판단할 수 없다는 것이다. 즉, 객체는 식별자에 의해서만 동일성을 검사할 수 있는 것이다.
행동이 상태를 결정한다.
- 상태를 먼저 결정하고 행동을 결정하는 것은 설계에 나쁜영향이 끼친다.
- 그 이유를 살펴보자
- 첫번째, 상태를 먼저 결정할 시 캡슐화가 저해된다.(상태가 외부에 노출하는 상황)
- 두번째, 객체가 협력자가 아닌 고립된 섬이 된다.
- 세번째, 재사용성이 저하된다.(협력을 하지 못하므로)
객체지향 세계와 현실 세계
- 객체지향 세계는 현실 세계를 추상화한 것이 아니라, 새로운 세계를 가지고 있되, 현실보다 더 많은 특징과 능력을 보유한 객체가 존재하는 것이다.
- 현실세계는 주가 사람이 되어 사람의 행동에 따라 객체들의 상태가 결정되는데, 객체지향 세계에서는 모두가 주체가 되어 스스로 자신의 상태를 결정한다.
반응형