티스토리 뷰
반응형
객체란, 상태, 행동, 식별자
- 객체의 행동의 결과는 상태에 영향을 받고, 객체는 유일하게 식별이 가능하다.
- 한 객체에서 상태가 다르면 같은 행동이라도 행동의 결과는 달라지지만 여전히 식별 가능한 객체이다.
- Ex. 앨리스의 키는 현재 상태에 따라 매우 커질수도 있고, 매우 작아질수도 있으나, 앨리스는 여전히 앨리스이다.
상태
- 상태를 알면 행동의 결과를 쉽게 예측할 수 있다.
- 객체의 상태는 정적인 프로퍼티(변하지 않는 상태), 동적인 프로퍼티(시간에 따라 변하는 상태)로 구성된다.
- 객체의 프로퍼티
- 객체를 구성하는 단순한 값인 속성과 객체와 객체를 연결하는 링크의 조합을 말한다.
- 객체는 스스로의 행동에 의해서만 상태가 변경된다.
- 즉, 외부의 객체 메시지를 통해 객체 스스로가 메시지를 참고하여 상태를 변경하는 것이다.
행동
-
객체의 상태를 변경하는 것은 객체의 자발적인 행동뿐이다. (메시지를 받아 상태가 변경되는 것도 결국 객체의 자발적인 행동에 의해 변경되는 것이다.)
-
행동과 상태
- 행동과 상태의 조합으로 행동을 우아하게 표현할 수 있다.
- 현재 행동의 결과를 확인할 때, 과거의 행동을 돌아볼 필요 없이 상태를 이용하면 결과를 쉽게 확인할 수 있다.
- Ex. 앨리스의 키가 40cm이면 문을 통과할 수 있다.
-
협력과 행동
- 객체의 행동은 두 가지 관점에서 살펴볼 수 있다.
- 첫번째로, 객체 자신의 상태 변경
- 두번째로, 협력하는 다른 객체에 대한 메시지 전송
-
상태 캡슐화
- 메시지 송신자는 메시지 수신자의 상태 변경에 대해서는 전혀 알지 못한다. 그저 그러기를 바라고 전달할 뿐이다.
- 상태를 외부에 노출시키지 않고 행동을 통해 캡슐화하는 것이다. (객체의 자율성을 높인 것이다.)
- 자율적인 객체는 스스로 판단하고 스스로 결정하기 때문에 자율성이 높아지고 객체의 지능도 높아진다.
- 객체의 지능이 높아진다는 것은, 협력하는 과정이 유연하고 간결해진다는 결과를 도출한다. 즉, 이것이 상태 캡슐화의 이유이다.
식별자
- 객체가 식별가능하다는 것은 객체를 서로 구별할 수 있는 특정 프로퍼티가 객체 안에 존재하다는 것이다.
- 객체와 값의 가장 큰 차이는 값은 식별자를 가지지 않지만, 객체는 식별자를 가진다는 점이다.
- 값과 객체
- 값(Integer, String)의 경우 불변상태이므로 두 인스턴스의 상태가 같으면 두 인스턴스는 동등하다고 본다.
- 객체의 경우 시간에 따라 변경되는 가변상태이므로 타입이 같은 두 객체의 상태가 같더라도 동등하다고 볼 수 없고, 상태가 다른데도 동일한 객체라고 볼 수있다.
- Ex. 이름이 같고, 나이가 같은 두 사람이 함께 있더라도 둘은 명백히 다른 사람이다.
- Ex. 10년전의 나와 10년 후의 나는 상태가 다르지만 결국 동일한 사람이다.
- 여기에서 말하는 것은, 상태를 기반으로 객체의 동일성을 판단할 수 없다는 것이다. 즉, 객체는 식별자에 의해서만 동일성을 검사할 수 있는 것이다.
행동이 상태를 결정한다.
- 상태를 먼저 결정하고 행동을 결정하는 것은 설계에 나쁜영향이 끼친다.
- 그 이유를 살펴보자
- 첫번째, 상태를 먼저 결정할 시 캡슐화가 저해된다.(상태가 외부에 노출하는 상황)
- 두번째, 객체가 협력자가 아닌 고립된 섬이 된다.
- 세번째, 재사용성이 저하된다.(협력을 하지 못하므로)
객체지향 세계와 현실 세계
- 객체지향 세계는 현실 세계를 추상화한 것이 아니라, 새로운 세계를 가지고 있되, 현실보다 더 많은 특징과 능력을 보유한 객체가 존재하는 것이다.
- 현실세계는 주가 사람이 되어 사람의 행동에 따라 객체들의 상태가 결정되는데, 객체지향 세계에서는 모두가 주체가 되어 스스로 자신의 상태를 결정한다.
반응형
'객체지향' 카테고리의 다른 글
[객체 지향] 객체 지도 (0) | 2020.03.05 |
---|---|
[객체지향] 책임과 메시지 그리고 캡슐화 (0) | 2020.03.03 |
[객체지향] 타입과 추상화 (0) | 2020.02.28 |
[객체지향] 역할, 책임, 협력(2) (0) | 2020.02.26 |
[객체지향] 역할, 책임, 협력(1) (0) | 2020.02.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- try catch finally
- mustache
- 점층적 생성 패턴
- 빈 순환 참조
- 생성자
- try with resources
- 정적팩터리메서드
- Effective Java
- 이펙티브자바
- springboot
- @Lazy
- 복사 팩토리
- jdk버전
- 김영한
- 인프런
- 이펙티브 자바
- java8
- ifPresent
- 빌더 패턴
- 팩토리 메소드 패턴
- effectivejava
- junit
- Spring
- JPA
- 자바8
- 스프링부트
- package-private
- 연관관계
- java
- flatMap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함