[객체지향의 사실과 오해 | 조영호]02장: 이상한 나라의 객체

2025. 11. 14. 23:20·IT서적/객체지향의사실과오해
728x90

02/ 이상한 나라의 객체

객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다.

객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다.

객체지향과 인지 능력

인간은 물리적(e.g. 자동차, 모니터, 과일) 객체뿐만 아니라 추상적인 사물(e.g. 계좌 입금, 출금) 까지도 객체로 인식할 수 있다.

객체지향 패러다임은 인간이 세상을 다양한 객체들의 집합으로 인식하는 것처럼 SW의 세계도 다양한 SW 객체들의 집합으로 모여 있다는 믿음에서 출발한다.
하지만, 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아닌, 현실 세계 기반 새로운 세계를 창조하는 것이다.


 

객체, 그리고 이상한 나라

이상한 나라의 앨리스

앨리스의 키를 변화시키는 것은 케이크를 먹으면 커지고, 버섯을 먹으면 작아진다. 이때 앨리스의 키를 변화시키는 것은 앨리스의 행동이다. 앨리스의 행동에 따라 앨리스의 키, 상태가 달라진다.

  • 앨리스는 상태를 가진다. 상태는 변경 가능하다
  • 앨리스의 상태는 행동으로 바뀐다.
  • 행동의 결과는 상태에 의존적이고 상태를 이용해 서술할 수 있다.
  • 앨리스는 어떤 상태에 있더라도 유일하게 식별(앨리스는 단 한 명) 가능하다.

객체, 그리고 소프트웨어 나라

앨리스는 상태(State), 행동(Behavior), 식별자(Identity)를 지닌 실체다.

상태

인간은 행동의 과정과 결과를 단순하게 기술하기 위해 '상태' 라는 개념을 고안했다.

e.g. 비행기 탑승 가능 여부 상태는 항공권의 발권 상태를 보고 예측할 수 있다.

e.g. 자판기는 현재까지 투입된 금액의 상태를 기억한다.

e.g. 텔레비전 전원이 들어온 상태여야만 채널을 변경할 수 있다.

상태를 이용하면 과거에 얽매이지 않고(비행기를 타기 위해 공항으로 이동하고, 발권하고 등) 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.

상태와 프로퍼티

상태(state)

  • 객체가 특정 시점에 가지고 있는 정보의 집합
  • 정적 프로퍼티와 동적 프로퍼티 값으로 구성됨

앨리스의 '키', '나이' 등은 객체가 아니다. 그 자체의 '양'이다. 이처럼 단순한 값 자체는 객체가 아니지만, 객체의 상태를 표현하기 위한 중요한 수단이다. 객체를 사용해 다른 객체의 상태를 표현할 수 있다. 앨리스가 케이크를 먹고 있다고 가정하자. 앨리스도 객체, 케이크도 객체이다. 앨리스 객체 안에 케이크 객체를 넣어 표현할 수 있다.

프로퍼티(property)

  • 변경되지 않는 고정되어 있는것 ⇒ 정적(Static)
    • 속성(attribute): 링크와 달리 객체를 구성하는 단순한 값
      • 예: 키, 위치, 음료의 양
    • 링크(link): 객체와 객체 사이 의미 있는 연결

프로퍼티 값(property value)

  • 변경될수 있는 '값' ⇒ 동적(Dynamic)

행동

상태와 행동
객체의 행동은 자신의 상태를 변경시킨다. 행동은 부수효과(side effect)가 있다.

협력과 행동

  • 객체는 다른 객체와 협력한다. 협력하는 유일한 방법은 다른 객체에게 요청하는 것이다.

    요청하기 위해선 메시지를 보낸다. 메시지를 수신한 객체는 메시지에 따라 자율적으로 행동한다.
  • 행동: 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동

    행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다.

상태 캡슐화

  • 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.
  • 객체가 외부에 노출하는 것, 외부에서 객체에 접근할 수 있는 것은 행동뿐이다.
  • 상태를 잘 정의된 행동 집합 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다.

식별자
어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티

  • 값(value)은 불변 상태(immutable state) , 객체는 가변 상태(mutable state)
  • 동등성(equality) : 상태를 이용해 두 값이 같은지 판단할 수 있는 성질
  • 동일성(identical) : 식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질

정리

  • 객체는 상태를 가진다.
  • 상태는 변경 가능하다.
  • 상태를 변경시키는 것은 객체의 행동이다.
  • 객체는 어떤 상태에 있더라도 유일하게 식별 가능하다.

기계로의 객체

  • 쿼리(Query): 객체의 상태를 조회하는 작업
  • 명령(Command) 객체의 상태를 변경하는 작업

행동이 상태를 결정한다

초보자들은 객체의 상태를 먼저 결정하고 행동을 나중에 결정한다. 이는 설계에 나쁜 영향을 미친다.

  1. 캡슐화 저해, 2. 협력하지 못하는 객체 창조, 3. 재사용성 저하

좋은 객체 설계를 위해선 행동에 초점을 맞춰야 한다. 다르게 말해서 객체의 행동은 책임을 의미한다. 어떤 책임이 필요한가 결정하는 과정으로 설계해야 한다. 이를 '책임-주도 설계'(Responsibility-Driven Design) 이라고 한다.


은유와 객체

의인화

  • 현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다.
    • 현실 객체가 가지지 못한 추가적인 능력을 보유하게 된다.
  • 객체지향 세계는 현실의 모습을 조금 참조할 뿐 궁극적인 목적은 현실과 전혀 다른 새로운 세계를 창조하는 것이다.
  • 객체지향의 세계는 현실의 추상화가 아니다. 객체지향 세계의 거리는 현실 속의 객체보다 더 많은 특징과 능력을 보유한 객체들로 넘쳐난다,

은유

  • 현실 속의 객체의 의미 일부가 소프트웨어 객체로 전달되기 때문에 프로그램 내의 객체는 현실 속의 객체에 대한 은유다
  • 현실 세계인 도메인에서 사용되는 이름을 객체에게 부여하자.

현실 속의 객체의 이름을 이용해 객체를 묘사하고 우리들 만의 새로운 세계를 창조해보자.

728x90
반응형

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

[객체지향의 사실과 오해 | 조영호]06장: 객체 지도  (0) 2025.11.14
[객체지향의 사실과 오해 | 조영호]05장: 책임과 메시지  (0) 2025.11.14
[객체지향의 사실과 오해 | 조영호]04장: 역할, 책임, 협력  (0) 2025.11.14
[객체지향의 사실과 오해 | 조영호]03장: 타입과 추상화  (0) 2025.11.14
[객체지향의 사실과 오해 | 조영호]01장: 협력하는 객체들의 공동체  (0) 2025.11.14
'IT서적/객체지향의사실과오해' 카테고리의 다른 글
  • [객체지향의 사실과 오해 | 조영호]05장: 책임과 메시지
  • [객체지향의 사실과 오해 | 조영호]04장: 역할, 책임, 협력
  • [객체지향의 사실과 오해 | 조영호]03장: 타입과 추상화
  • [객체지향의 사실과 오해 | 조영호]01장: 협력하는 객체들의 공동체
lakedata
lakedata
lakedata 님의 블로그 입니다.
  • lakedata
    lakedata 님의 블로그
    lakedata
  • 전체
    오늘
    어제
    • 분류 전체보기 (193)
      • cs (85)
        • dev (28)
        • sec (31)
        • ops (25)
      • 자격증 (32)
        • 정보처리기사 (20)
        • 정보보안기사 (1)
        • aws dva (6)
        • aws dop (2)
      • IT서적 (27)
        • 클린아키텍처 (10)
        • 객체지향의사실과오해 (7)
        • 오브젝트 (10)
      • 알고리즘과 CTF (44)
        • 알고리즘 (20)
        • 백준 (13)
        • 프로그래머스 (7)
        • CTF (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    SQL
    Java
    Security
    CS
    알고리즘
    docker
    AWS
    Spring
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
lakedata
[객체지향의 사실과 오해 | 조영호]02장: 이상한 나라의 객체
상단으로

티스토리툴바