ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향의 사실과 오해] 객체에 대해서
    Book/객체지향의 사실과 오해 2023. 3. 9. 21:57

    객체

    • 객체는 상태를 가지며 상태는 변경 가능
    • 상태를 변경시키는 것은 객체의 행동
      • 행동의 결과는 상태에 의존적이며, 상태를 이용해 서술할 수 있음
      • 행동의 순서가 결과에 영향
    • 객체가 어떤 상태에 있더라도 유일하게 식별 가능
    객체
    식별 가능한 개체 또는 사물. 객체는 구체적인 사물일 수도, 추상적인 개념일 수도 있음. 객체는 구별 가능한 식별자, 특징적인 행동, 변경가능한 상태를 가짐. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현됨. 
    -47P. 객체 정의- 

     

    상태

    • 상태는 과거 했던 행동의 결과
    • 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있음
      • 상태를 이용하면 과거의 모든 행동 이력을 설명하지 않고도 행동의 결과를 쉽게 예측하고 설명할 수 있음
    • 상태는 복잡성을 완화하고 인지 과부화를 줄일 수 있는 중요한 개념

    프로퍼티(property)

    • 객체의 상태를 구성하는 모든 특징
    • 객체의 상태는 단순한 값(속성)과 객체의 조합(링크)으로 표현 가능
      • 다른 객체와 연결되었을 때 해당 객체도 상태
        • ex) 앨리스가 음료를 들고 있다. (음료를 마시면 키와 위치가 변경)
        • 앨리스(객체)의 상태는 키, 위치만이 아니라 음료(객체)도 포함
    • 일반적으로 프로퍼티는 변경되지 않고 고정되기 때문에 정적이며 프로퍼티 값(property value)는 시간이 흐름에 따라 변경되기 때문에 동적임

    링크(link)

    • 객체와 객체 사이 의미있는 연결
    • 링크가 존재할 때 협력이 가능 (요청 송수신)

    속성(attribute)

    • 객체를 구성하는 단순한 값
      • ex) 앨리스의 키와 위치
    상태
    특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현. 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분.
    -51P. 상태 정의-

     

    행동

    • 객체가 취하는 행동에 의해 객체 자신의 상태를 변경
    • 객체의 행동에 의해 객체의 상태가 변경되는다는 것은 부수효과(side effect)를 초래한 것
    • 객체의 행동은 객체의 상태를 변경시키지만, 행동의 결과는 객체의 상태에 의존적
      • 객체의 행동은 상태에 영향을 받음
      • 객체의 행동은 상태를 변화시킴

    협력과 행동

    • 객체는 다른 객체와 메시지를 통해서만 의사소통하며, 수신된 메시지에 따라 행동하면서 협력에 참여하고 그 결과로 자신의 상태를 변경함
    • 객체 행동의 부수효과
      • 객체 자신의 상태 변경
      • 행동 내에서 협력하는 다른 객체에 대한 메시지 전송
    행동
    외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지 전달. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 함.
    -55P. 행동 정의-

    상태 캡슐화

    • 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재
    • 현실세계 수동적인 존재가 객체지향에서는 메시지를 수신받는 능동적인 존재가 됨 
    • 객체는 상태를 캡슈 안에 감춰둔 채 외불 노출하지 않음
    • 객체가 외부에 노출하는 것은 행동 뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동 뿐
      • 메시지를 수신하더라도 상태를 변경하는 것의 자유는 객체에게 있음
      • 송신자는 간섭 불가
    • 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 객체의 자율성을 높이며, 협력은 단순하고 유연하게 만듦

     

    식별자

    • 객체를 서로 구별할 수 있는 특정한 프로퍼티
    • 단순한 값은 식별자를 가지지 않음

    동등성(equality)

    • 상태를 이용해 두 값이 같은지 판단할 수 있는 성질
    • 단순한 값은 불변 상태로 값이 같다면 두 인스턴스가 같은 것으로 판단
      • 따라서 값은 별도의 식별자를 필요로 하지 않음

    동일성(identical)

    • 식별자를 기반으로 객체가 같은지 판단할 수 있는 성질
    • 객체는 가변 상태를 가지며, 타입이 같은 두 객체의 상태가 완전히 똑같더라도 두 객체는 독립적인 별개의 객체 
    식별자
    어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티. 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야 함. 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있음.
    -59P. 식별자 정의-

    오해의 소지

    • 숫자는 Integer 클래스, 사람은 Person 클래스로 값과 객체 모두 클래스로 부터 생성된 객체이기 때문에 의미가 혼란 
    • 참조 객체(reference object), 엔티티(entity)는 식별자를 지닌 전통적인 의미의 객체
    • 값 객체(value object) 식별자를 가지지 않는 값

     

    객체 외부 접근

    • 객체에 접근할 수 있는 방법은 객체가 제공하는 행동(쿼리와 명령) 뿐
    • 상태와 행동이 하나의 단위로 캡슐화

    쿼리

    • 객체의 상태를 조회하는 작업 

    명령

    • 객체의 상태를 변경하는 작업

     

    행동이 상태를 결정한다

    • 객체는 다른 객체와 협력하기 위해 존재
    • 협력하기 위한 행동을 결정하고, 행동에 적절한 상태를 선택해야함
    • 협력안에서 객체의 행동은 객체가 협력에 참여하면서 해야할 책임을 의미
      • 즉, 필요한 책임을 결정하는 과정이 전체 설계를 주도해야함
      • 책임-주도 설계 (Responsibility-Driven Design, RDD)

     

    추상화

    • 객체지향은 현실세계의 추상화가 아님
      • 추상화는 실제 사물에서 원하는 특성만 취하고 필요없는 부분을 추려 핵심만 표현하는 행위
      • 객체지향은 현실세계의 단순한 모방이 아님  

    의인화

    • 현실 세계에서 수동적이던 객체는 객체지향에서 능동적 객체가 됨
    • 현실 객체가 가지지 못하는 추가적인 능력 존재 
    • 의인화란 현실 객체보다 더 많은 일을 할 수 있는 소프트웨어 객체의 특징

    은유

    • 객체지향과 현실 세계의 관계는 은유에 가까움
    • 실제 객체의 이름을 소프트웨어 객체의 이름으로 사용하면 표현적 차이를 줄여 소프트웨어의 구조를 쉽게 예측할 수 있음
      • 표현적 차이(representational gap) 또는 의미적 차이(semantic gap) : 소프트웨어에 대한 사람들의 생각과 실제 소프트웨어의 표현 사이의 차이
    • 실제세계인 도메인에서 사용되는 이름을 객체에 부여하는 이유도 이것 때문

     

    댓글

Designed by Tistory.