<도서정리> 객체지향의 사실과 오해

객체지향이란.

    • 흔히 객체지향을 세상을 객체들의 모임으로 보고, 객체들이 상호작용하는 것을 소프트웨어 세계에 모방하는 방식으로 소개한다.
    • 하지만, 객체지향은 실세계를 모방하는 것이 아닌 새로운 세계를 창조하는 것이다.
    • 현실 속에서 수동적인 존재가 소프트웨어 객체로서는 능동적인 객체가 된다.
    • 사물의 의인화가 이루어지며, 얼마든지 필요한 능력을 가질 수 있다.
    • 객체 상태와 행동의 명명 또한 창조의 영역이다.

 

객체란.

    • 객체들 간에는 특정한 목표를 위해 협력하며, 객체는 협력 속에서 맡은 역할 책임을 진다.
    • 협력은 연쇄적인 요청응답으로 구성되어있다.
    • 객체 특징
      재활용성 - 여러 객체가 동일한 역할을 수행할 수 있다.
      활용성 - 역할을 대체가능성을 의미한다.
      다형성 - 책임을 수행하는 방법은 자율적으로 선택할 수 있으며, 다양한 방식으로 요청 수행이 가능하다.
      한 객체가 동시에 여러 가지 역할을 수행할 수 있다. 다양한 곳에 참여한다.(참조되어 사용된다)

 

협력.

    • 시너지; 전체는 부분의 합보다 크다.
    • 성공적인 협력을 위해서는 적절한 단위적인 책임을 부여하는 것이 중요하다. 
      • 객체는 충분히 협력적이어야한다.
        • 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야 하며, 모든 것을 스스로 해결하려는 전지전능한 객체는 복잡함에 의해 자멸한다.
      • 객체는 자율성을 가진다.

 

객체의 자율성.

    • 캡슐화 - 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.
      • 객체의 사적인 부분은 객체 스스로 관리하고, 외부에서 일체 간섭할 수 없도록 차단해야한다.
      • 객체의 외부에서는 접근이 허락된 수단을 통해서만 객체와 의사소통해야한다.
      • 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지에 대해서는 알 수 없다.
    • 객체는 상태와 행동을 지닌다. 
    • 객체는 자신의 상태를 직접관리하고 상태를 기반으로 스스로 판단하고 행동하는 자율적인 존재이다.
    • 객체의 행동이 상태를 결정한다.
      • 객체의 행동은 객체가 협력에 참여하는 방법이며,
      • 객체의 적합성은 객체의 행동으로부터 결정된다.
    • 책임주도설계 - 객체가 어떤 책임을 갖는가가 설계를 주도한다.
    • interface를 통해 제공가능한 정보와 서비스를 알려주는 동시에 캡슐화를 수행할 수 있다
      • 인터페이스가 변경되지 않는다면, 내부 방식을 변경하더라도 그것이 영향을 끼치지 않는다.
      • 동일한 인터페이스에 의존한다면, 어떠한 구현체와도 상호작용을 할 수 있다.

 

객체와 추상화.

    • 추상화를 통해 현실세계의 복잡성 극복할 수 있으며, 그를 통해 사물의 본질에 접근할 수 있다.
    • 추상화 과정 - 유사성, 공통점을 통해 분류한다.
    • 객체의 추상화는 분류(classification)를 통해 이루어진다.
    • 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다

일반화/특수화

    • 서브타입은 슈퍼타입(본질)을 대체할 수 있어야한다.
    • 슈퍼타입의 행동은 서브타입에 자동으로 상속된다.

타입

    • 타입은 추상화이다.
    • 타입은 동적인 상태 변경을 단순화하는 정적 객체 특징에 집중한다.
    • 클래스는 타입을 구현하는 도구이다.

추상화를 통해 다양한 객체들이 조립되어 역할을 수행할 수 있다면 협력이 유연해지며 객체들의 재사용성이 높아진다.

 

메세징

    • 메세징(요청)은 객체에게 접근할 수 있는 유일한 방법이다.
    • 어떻게 할지는 객체 스스로가 결정하며, 메세지로는 무엇을 할지만을 요청한다.
    • 요청을 받은 후 객체는 적절한 메서드를 선택하여(다형성) 요청을 수행할 것이다. 
    • 객체지향은 객체들이 주고받는 메세지들로 구성된다.
      • 클래스는 객체들의 속성과 행위를 담는 틀일 뿐이며, 객체의 속성과 행위가 중심이 되어야한다.
      • 또한 객체지향은 객체를 넘어서 객체들 간의 커뮤니케이션에 초점을 맞출 때 이루어진다.

  • 메세징을 이용한 객체지향
    • 객체가 책임을 완수하기 위해, 다른 객체의 도움이 필요하다고 판단되면
      도움 요청 메세지를 결정한다.
    • 메세지를 결정한 후 메세지를 수행하기에 적합한 객체를 선택한다.
    • -> 메세지가 수신자의 책임을 결정한다. 

 

댓글을 작성해보세요.

채널톡 아이콘