객체란, 상태, 행동, 식별자를 지닌 실체로 보는 것이 가장 효과적이다.
상태
객체가 주변 환경과 상호작용에 어떻게 반응하는가는, 그 시점까지 객체에 어떤 일이 발생했느냐에 따라 다르다.
예를 들어, 여행을 위해 비행기를 이용하려면 탑승전에 항공권을 발권해야 한다. 비행기 탑승 여부는 탑승권 발권 행위의 발생 여부에 따라 달라지는 것이다.
상태는, 과거의 모든 행동 이력을 설명하지 않고도 결과를 쉽게 예측하고 설명할 수 있는 수단이다.
객체의 모든 정적 상태/동적 상태를 "property/property value"라 부른다.
객체와 다른 객체 간의 연결을 "link"라 부른다(앨리스가, 음료 0.5L를 들고 있는 것에 비유).
객체는 자율적 존재라는 것을 명심해야 한다. 객체는 다른 객체의 상태에 직접 접근할 수도, 상태를 변경할 수도 없다. 자율적인 객체는 자신의 상태에 책임을 가진다. 직접 접근이 안되면 간접 접근을 통해 상태를 변경해야 한다. 이를 위해 행동이라는 개념이 등장한다.
행동
객체의 상태는 저절로 바뀌지 않는다. 객체의 상태를 변경하는 것은 객체의 자발적 행동뿐이다. 객체가 취하는 행동은 객체 자신의 상태를 변경시킨다. 객체의 행동에 의해 객체의 상태가 변경된다는 것은 행동이 부수 효과(Side Effect)를 초래하는 것을 의미한다.
객체가 다른 객체와 협력하는 유일한 방법은 다른 객체에게 요청을 보내는 것 뿐이고, 메시지를 통해서만 의사소통할 수 있다. 협력하는 과정에서 자기 자신의 상태뿐만 아니라, 다른 객체의 상태 변화를 유발할 수 있다.
객체의 행동으로 발생하는 결과
- 객체 자신의 상태 변경
- 행동 내에서 협력하는 다른 객체에 대한 메시지 전송앨리스가 음료를 마신다. 현실세계에서 음료는 스스로 아무것도 하지 못하는 수동적인 존재이다. 하지만, 객체지향의 세계에선 얘기가 다르다. 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재이다. 객체-앨리스는, 객체-음료에게 "음료수를 마셨다"라는 메시지만 보낼 수 있다. 객체-음료가 스스로, 본인의 음료 양을 줄여야 한다. 이는 객체-음료의 자율이자 책임이다. 이후에도, 객체-앨리스는 객체-음료의 상태를 직접적으로 전혀 알 수 없다. 이것이 캡슐화가 의미하는 바이다.
- 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 결과적으로 객체의 자율성을 높인다.
- 상태 캡슐화
식별자
객체를 서로 구별할 수 있는 특정 프로퍼티를 식별자라고 한다. '값'과 '객체'의 가장 큰 차이는, 값은 식별자를 가지지 않지만 객체는 식별자를 가진다. 이런 단순한 값과 객체의 차이점을 명확하게 구분하고, 명시적으로 표현하는 것이 아주 중요하다.
- 값: 숫자, 문자열, 날짜, 시간, 금액 등-상태가 같으면, 같은 것으로 간주(동등성)
- 객체: 시간에 따라 변경되는 상태를 포함하고, 행동을 통해 상태를 변경한다.
사람을 예시로 들어보자. 어릴때의 나와 어른의 나의 상태는 많이 다르다. 나이, 키 등등... 하지만 이름, 주민등록번호와 같은 고유 값을 가지고 있다. 이를 식별자라고 하고, 식별자를 기반으로 객체가 같은지 판단할 수 있는 성질을 동일성이라고 한다.객체는 어떤 상태에 있더라도, 유일하게 식별 가능하다
객체의 상태를 조회(쿼리), 변경(명령) 할 수 있다.객체에 접근할 수 있는 유일한 방법은 객체가 제공하는 행동뿐이다. 쿼리와 명령버튼으로 객체에 간접 접근만 가능할 뿐이다.
상태를 중심으로 객체를 설계하면 안된다(객체 앨리스를 만들때, 필요한 키와 위치 프로퍼티를 추가하는 방식).
- 상태를 먼저 결정할 경우 캡슐화가 저해된다.
- 객체를 협력자가 아닌, 고립된 섬으로 만든다.
- 객체의 재사용성이 저해된다.
행동에 초점을 맞춰야 한다. 행동이 상태를 결정한다.
*인터페이스에 메서드 위주로 세팅하는 이유와 연관될듯
현실세계 객체지향 세계의 차이
현실에서는, 음료수가 스스로 본인의 양을 줄이지 않는다. 전화기가 스스로 통화버튼을 누르지 않는다. 바로 이런 차이가 가장 크다고 할 수 있다. 이러한, 현실의 객체보다 더 많은 일을 할 수 있는 소프트웨어 객체의 특징을의인화라고 한다. 심지어는 현실 세계에 존재하지 않는 것 조차 소프트웨어 세계에선 생생한 생명을 지닌 존재로 탄생한다.
그래도, 객체를 설명하거나 이름을 정할때는 현실에 있는 유사한 기능을 하는것과 매칭시켜 설명한다. 이해하기 쉽고 유지보수와 관리에 용이하기 때문이다. "그녀는 양같이 온순한 성격을 지녔다" 에서, 양의 성격을 빗대어 그녀의 성격을 설명하는 것과 같은 맥락이다.
'책 > 객체지향의 사실과 오해' 카테고리의 다른 글
5장 Part1. 책임과 메시지 (1) | 2025.01.01 |
---|---|
4장. 역할, 책임, 협력 (0) | 2025.01.01 |
3장. 타입과 추상화 (0) | 2025.01.01 |
1장. 협력하는 객체들의 공동체 (0) | 2025.01.01 |
0장. 서론, 객체지향으로 가는 발걸음 (1) | 2025.01.01 |
객체란, 상태, 행동, 식별자를 지닌 실체로 보는 것이 가장 효과적이다.
상태
객체가 주변 환경과 상호작용에 어떻게 반응하는가는, 그 시점까지 객체에 어떤 일이 발생했느냐에 따라 다르다.
예를 들어, 여행을 위해 비행기를 이용하려면 탑승전에 항공권을 발권해야 한다. 비행기 탑승 여부는 탑승권 발권 행위의 발생 여부에 따라 달라지는 것이다.
상태는, 과거의 모든 행동 이력을 설명하지 않고도 결과를 쉽게 예측하고 설명할 수 있는 수단이다.
객체의 모든 정적 상태/동적 상태를 "property/property value"라 부른다.
객체와 다른 객체 간의 연결을 "link"라 부른다(앨리스가, 음료 0.5L를 들고 있는 것에 비유).
객체는 자율적 존재라는 것을 명심해야 한다. 객체는 다른 객체의 상태에 직접 접근할 수도, 상태를 변경할 수도 없다. 자율적인 객체는 자신의 상태에 책임을 가진다. 직접 접근이 안되면 간접 접근을 통해 상태를 변경해야 한다. 이를 위해 행동이라는 개념이 등장한다.
행동
객체의 상태는 저절로 바뀌지 않는다. 객체의 상태를 변경하는 것은 객체의 자발적 행동뿐이다. 객체가 취하는 행동은 객체 자신의 상태를 변경시킨다. 객체의 행동에 의해 객체의 상태가 변경된다는 것은 행동이 부수 효과(Side Effect)를 초래하는 것을 의미한다.
객체가 다른 객체와 협력하는 유일한 방법은 다른 객체에게 요청을 보내는 것 뿐이고, 메시지를 통해서만 의사소통할 수 있다. 협력하는 과정에서 자기 자신의 상태뿐만 아니라, 다른 객체의 상태 변화를 유발할 수 있다.
객체의 행동으로 발생하는 결과
- 객체 자신의 상태 변경
- 행동 내에서 협력하는 다른 객체에 대한 메시지 전송앨리스가 음료를 마신다. 현실세계에서 음료는 스스로 아무것도 하지 못하는 수동적인 존재이다. 하지만, 객체지향의 세계에선 얘기가 다르다. 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재이다. 객체-앨리스는, 객체-음료에게 "음료수를 마셨다"라는 메시지만 보낼 수 있다. 객체-음료가 스스로, 본인의 음료 양을 줄여야 한다. 이는 객체-음료의 자율이자 책임이다. 이후에도, 객체-앨리스는 객체-음료의 상태를 직접적으로 전혀 알 수 없다. 이것이 캡슐화가 의미하는 바이다.
- 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 결과적으로 객체의 자율성을 높인다.
- 상태 캡슐화
식별자
객체를 서로 구별할 수 있는 특정 프로퍼티를 식별자라고 한다. '값'과 '객체'의 가장 큰 차이는, 값은 식별자를 가지지 않지만 객체는 식별자를 가진다. 이런 단순한 값과 객체의 차이점을 명확하게 구분하고, 명시적으로 표현하는 것이 아주 중요하다.
- 값: 숫자, 문자열, 날짜, 시간, 금액 등-상태가 같으면, 같은 것으로 간주(동등성)
- 객체: 시간에 따라 변경되는 상태를 포함하고, 행동을 통해 상태를 변경한다.
사람을 예시로 들어보자. 어릴때의 나와 어른의 나의 상태는 많이 다르다. 나이, 키 등등... 하지만 이름, 주민등록번호와 같은 고유 값을 가지고 있다. 이를 식별자라고 하고, 식별자를 기반으로 객체가 같은지 판단할 수 있는 성질을 동일성이라고 한다.객체는 어떤 상태에 있더라도, 유일하게 식별 가능하다
객체의 상태를 조회(쿼리), 변경(명령) 할 수 있다.객체에 접근할 수 있는 유일한 방법은 객체가 제공하는 행동뿐이다. 쿼리와 명령버튼으로 객체에 간접 접근만 가능할 뿐이다.
상태를 중심으로 객체를 설계하면 안된다(객체 앨리스를 만들때, 필요한 키와 위치 프로퍼티를 추가하는 방식).
- 상태를 먼저 결정할 경우 캡슐화가 저해된다.
- 객체를 협력자가 아닌, 고립된 섬으로 만든다.
- 객체의 재사용성이 저해된다.
행동에 초점을 맞춰야 한다. 행동이 상태를 결정한다.
*인터페이스에 메서드 위주로 세팅하는 이유와 연관될듯
현실세계 객체지향 세계의 차이
현실에서는, 음료수가 스스로 본인의 양을 줄이지 않는다. 전화기가 스스로 통화버튼을 누르지 않는다. 바로 이런 차이가 가장 크다고 할 수 있다. 이러한, 현실의 객체보다 더 많은 일을 할 수 있는 소프트웨어 객체의 특징을의인화라고 한다. 심지어는 현실 세계에 존재하지 않는 것 조차 소프트웨어 세계에선 생생한 생명을 지닌 존재로 탄생한다.
그래도, 객체를 설명하거나 이름을 정할때는 현실에 있는 유사한 기능을 하는것과 매칭시켜 설명한다. 이해하기 쉽고 유지보수와 관리에 용이하기 때문이다. "그녀는 양같이 온순한 성격을 지녔다" 에서, 양의 성격을 빗대어 그녀의 성격을 설명하는 것과 같은 맥락이다.
'책 > 객체지향의 사실과 오해' 카테고리의 다른 글
5장 Part1. 책임과 메시지 (1) | 2025.01.01 |
---|---|
4장. 역할, 책임, 협력 (0) | 2025.01.01 |
3장. 타입과 추상화 (0) | 2025.01.01 |
1장. 협력하는 객체들의 공동체 (0) | 2025.01.01 |
0장. 서론, 객체지향으로 가는 발걸음 (1) | 2025.01.01 |