티스토리 뷰

객체지향과 인지능력

  • 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤것.
  • 객체지향 패러다임은 인간이 인지 가능한 다양한 객체들이 모여 이뤄짐
  • 객체지향의 목적은 현실세계를 기반으로 새로운 세계를 창조하는 것.

이상한 나라의 앨리스

🏰 이상한 나라의 앨리스 내용 요약
앨리스는 회중시계를 들고 뛰어가는 토끼를 따라감 토끼를 쫓다가 작은 문을 발견, 문이 40cm가 안되었기에 들어갈 수 가 없었음 탁자 위에 있던 액체를 마시자 키가 작아짐 탁자 아래에 있던케이크를 먹으니 키가 커짐 토끼가 두고간 부채로 부채질하니 몸이 서서히 작아짐 쐐기벌레가 둔 버섯의 한쪽을 먹으면 몸이 커지고 다른쪽을 먹으면 몸이 작아짐 …. 키를 작게 해 문을 통과, 아름다운 정원으로 들어가게 됨 ….

앨리스 객체

  • 앨리스는 문을 통과 하기위해 자신의 키(상태)를 변화시키기 위해 액체, 케이크, 부채질(행동)을 함.
  • 앨리스는 문을 통과(행동)하여 위치(상태)를 변경함
  • 행동에 의해 앨리스의 상태가 변경되더라도 앨리스가 앨리스라는 사실은 변치않음 (식별 가능)

앨리스 객체의 특징

  • 앨리스는 상태를 가지며 상태는 변경 가능함.
  • 앨리스의 상태를 변경시키는 것은 앨리스의 행동임
    • 행동의 결과는 상태에 의존적이며 상태를 이용해 서술가능 ex) 앨리스의 키가 120cm였는데 행동으로 인해 125cm로 상태 변경됨
    • 행동의 순서가 결과에 영향을 미침 ex) 문을 통과하기 위해서는 충분히 키가 작아야 함 (키를 먼저 줄여야 통과 가능)
  • 앨리스는 어떤 상태에 있더라도 식별 가능

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

객체의 구성

  • 객체를 상태, 행동, 식별자를 지닌 실체로 보는것이 가장 효과적

상태

  • 객체가 주변과 상호작용에 어떻게 반응하지가는 그 시점까지 객체에 어떤 일이 발생했느냐에 좌우됨. ex) 비행기 탑승 여부는 발권하는 행동이 선행 되었냐에 좌우됨
  • 과거에 발생한 행동의 이력을 통해 행동 결과를 판단하는 것은 복잡하고 번거롭기 때문에 상태라는 개념 고안 ex) 비행기 탑승 여부는 발권 상태를 보고 판단 가능
  • 상태를 이용하면 과거에 얽메이지 않고 현재를 기반으로 객체의 행동을 이해 가능 (복잡성 완화)

상태와 프로퍼티

  • 숫자, 문자열, 참/거짓과 같은 단순 값들은 객체가 아님, 독립적인 의미보다는 다른 객체의 상태 표현에 사용
  • 모든 객체의 상태는 단순 값과 객체의 조합으로 표현됨.
  • 상태를 구성하는 모든 특징을 프로퍼티라 하며 변경되지 않기때문에 정적임
  • 프로퍼티의 값은 시간에 따라 변경되므로 동적임

링크와 속성

  • 객체와 객체 사이의 의미 있는 연결을 링크라고 함
  • 객체를 구성하는 단순 값은 속성이라고 함
  • 프로퍼티 = 단순 값 || 객체 링크

행동

  • 객체의 행동에 의해 객체의 상태가 변경된다는 것은 행동이 부수효과(Side Effect)를 초래한다는 것을 의미 ex) 앨리스가 케잌을 먹으면 자신의 키가 작아지게되고 케잌의 양을 줄이는 부수효과 발생

상태와 행동의 관계

  • 객체의 행동은 상태에 영향을 받는다.
  • 객체의 행동은 상태를 변경시킨다.

협력과 행동

  • 객체의 행동은 객체가 협력에 참여할 수 있는 유일한 방법이므로 가시적이여야 함

상태 캡슐화

  • 객체지향의 세계에서 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재 ex) 음료의 양을 줄이는것은 음료 자신

  • 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않고 행동만 노출한다.
  • 외부에서는 메시지만 전달할 뿐 수신자의 상태 변경에 대해서는 알지 못함
  • 상태를 행동 집합 뒤로 캡슐화 하는것이 객체의 자율성을 높이고 협력을 단순/유연하게 만듦

식별자

  • 모든 객체는 식별자를 가지며 식별자를 이용해 객체를 구별
  • 단순 값은 식별자를 가지지 않으며 값의 상태는 변하기 않기에 불변 상태를 가짐
    • 상태를 이용해 두 값이 같은지를 판단할 수 있는 성질을 동등성(equality)라고 함
  • 객체는 시간에 따라 변경되는 상태를 포함하면 가변상태를 가지므로 식별자로 구분함.
    • 식별자를 기반으로 객체가 같은지를 판단하는 성질은 동일성(identical)이라고 함

엔티티(Entity)와 값 객체(Value Object)

  • 객체지향 언어의 경우 숫자(Integer)의 경우에도 클래스로 취급함
  • 값과 객체 모두 클래스로 부터 생성된 객체이기에 구분을 위해 별도 용어 사용
    • 참조객체, 엔티티: 식별자를 지닌 객체
    • 값 객체(VO): 식별자를 가지지 않는 값만 가지는 객체

객체의 특성

  • 객체는 상태를 가지며 상태는 변경 가능
  • 객체의 상태를 변경시키는 것은 객체의 행동
    • 행동의 결과는 상태에 의존적
    • 행동의 순서가 실행 결과에 영향 미침
  • 객체는 어떤 상태에 있더라도 유일하게 식별 가능

행동이 상태를 결정한다

  • 대부분의 개발자는 객체에 필요한 상태를 먼저 정한 후에 행동을 결정함, 이경우 나쁜 영향을 끼침
    1. 상태를 먼저 결정할 경우 캡슐화 저해
    2. 객체를 협력자가 아닌 고립된 섬으로 만듦
    3. 객체의 재사용성이 저하됨 (재사용성은 다양한 협력에 참여하는 능력에서 나옴)
  • 객체는 다른 객체와 협력하기 위해 존재하고 협력에 참여하는 유일한 방법은 행동임

의인화

  • 현실속 객체와 소프트웨어 객체의 가장큰 차이점은 능동적으로 변한다는 것
  • 현실의 객체보다 더 많은 일을 할수 있는 소프트웨어 객체의 특징을 의인화라고 함
  • 현실의 객체를 조금 참조할 뿐 전혀 다른 새로운 세계를 창조함

은유

  • 은유의 본질은 한 종류의 사물을 다른 종류의 사물 관점에서 이해하고 경험하는것 ex) 그 여자는 양 같아요
  • 현실 객체의 의미 일부가 소프트웨어 객체로 전달되기 때문에 프로그램 내 객체는 현실 속 객체에 대한 은유임
  • 소프트웨어 객체에 대한 현실 객체의 은유를 사용할 경우 표현적 차이를 줄여 이해하기 쉽고 유지보수 용이함
  • 이러한 이유로 현실 세계인 도메인에서 사용되는 이름을 객체에게 부여하라고 가이드 함.
현실을 닮아야 한다는 어떤 제약이나 구속도 없음!
현실 속의 객체 이름을 이용해 객체를 묘사하라!
그렇지 않다면 깔끔하게 현실을 무시하고 자유롭게 새로운 세계를 창조하라!

 

댓글