객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다 -레베카 워프스브록-
애기들 테스트
객체지향과 인지 능력
인간이 선천적으로 타고난 인지 능력을 이용해 세상에 존재하는 다양한 객체를 식별하고 분류함으로써 세상을 이해한다는 사실을 보여준다.
인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다.
그럼 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임 이라고 하는 이유는?
객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다.
주위를 둘러보면 객체라고 부를 수 있는 다양한 존재를 볼 수 있다.
걷는 사람들, 미끄러지는 자동차, 가로수, 컴퓨터 등등
하나의 단위로 인식할 수 있고 다른 사물과 구분할 수 있는 모든 것들이 모여 객체의 스펙트럼을 형성한다.
인간은 직접적으로 지각할 수 있는 대부분의 객체는 물리적인 경계를 지닌 구체적인 사물이다.
그러나 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계 지을 수 있는 추상적인 사물까지도 객체로 인식할 수 있게 한다.
어제의 주문, 오늘의 주문, 출금 계좌에서 동일한 입금 계좌로 동일한 금액을 두번 이체하더라도 각 계쫘 이체는 명확하게 구분이 가능하다.
즉 물리적인 실체는 존재하지 않아도 인간이 쉽게 구분하고 하나의 단위로 인지할 수 있는 개념적인 객체의 일종이다.
세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작은 몸부림이다.
인간은 좀 더 단순한 객체들로 주변을 분해함으로써 자신이 몸담고 있는 세상을 이해하려고 한다.
즉 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 or 개념적인 경계를 지닌 어떤 것이다.
객체지향 패러다임은 인간이 인지할 수 있는 다양한 객체들이 모여 현실 세계를 이룬다.
소프트웨어 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다는 믿음에서 출발한다.
하지만 리얼 월드와 소프트웨어의 세계 사이의 유기성은 딱 여기까지다.
객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 ! 현실 세계를 기반으로 새로운 세계를 창조 하는 것이다 !
그렇기 때문에 소프트웨어 세계의 살아가는 객체는 현실세계에 존재하는 객체와 전혀 다른 모습을 보이는 것이다 !
현실 세계의 전등은 사람의 손길 없이는 스스로 불을 밝힐 수는 없지만
소프트웨어 세계의 전등은 외부의 도움 없이도 스스로 붉을 키거나 끌 수 있다.
현실 세계에서는 사람이 직접 주문 금액을 계산하지만
소프트웨어 세계에서는 주문 객체가 자신의 금액을 계산한다.
객체 그리고 이상한 나라
객체, 그리고 소프트웨어 나라
하나의 개별적인 실체로 식별 하능한 물리적인 또는 개념적인 사물은 어떤 것이라도 객체가 될 수 있다.
인간의 인지 능력 안에서 개수를 셀 수 있고, 다른 사물과 구분할 수 있으며, 생성 시점을 알 수 있고, 독립적인 하나위 단위로 인식할 수 있는 모든 사물은 객체다.
객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태, 행동, 식별자를 지닌 실체로 보는 것이 가장 효과적이다.
이상한 나라의 앨리스는 상태, 행동, 식별자를 지닌 실체다.
그리고 소프트웨어 안에 창조되는 객체 역시 상태, 행동, 식별자를 지닌다.
객체란 식별 가능한 개체 또는 사물이다, 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간 처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자 특정적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
상태
왜 상태가 필요할까? * 객체가 주변 환경과의 상호작용에 어떻게 반응하는가는 그 시점에 객체에 어떤 일이 발행했느냐에 좌우된다. * 여행을 위해 비행기를 이용하려면 탑승 전에 항공권을 발권해야 한다. * 발권하지 않았다면 못탄다 즉 탑승 여부는 과거에 발권하는 행동이 발생했는지 여부에 따라 결정될 것이다.
상태와 프로퍼티
상태패턴
일련의 규칙에 따라 객체의 상태를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴을 말한다.
상태도
상태도의 목적은 시스템이나 어떠한 객체가 외부 이벤트에 따라 어떻게 반응하며 상태 변화를 일으키는가를 모델링하기 위한 것
상태도는 주로 하나의 클래스에 대하여 그에 소속된 객체가 외부 이벤트에 반응하는 동적인 상황을 기술하기 위한 것이니 때문에 시퀀스 다이어그램과 같이 동적인 모델로 분류된다.
객체가 갖는 본질적인 속성중의 하나는 객체는 생명주기를 갖으며 계속 변한다는 것이다. 상태도를 이용해서 객체가 태어나고 변하며 사라지는 상황을 정확하게 묘사