본문 바로가기

Book Review

(7)
객체지향의 사실과 오해 Chapter 07 리뷰 - 이번 포스팅으로 전반적인 객체지향설계 가능 Chapter 07 함께 모으기 코드와 모델을 밀접하게 연결시키는 것은 코드에 의미를 부여하고 모델을 적절하게 한다. -Eric Evans- 개념 관점 conceptual perspective에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 명세 관점 specification perspective은 도메인의 개념이 아니라 실제 sw안에서 살아 숨쉬는 객체들의 책임에 초점을 맞추게 된다. 객체의 인터페이스를 바라보는 것이다. 프로그래머는 객체가 협력을 위해 '무엇을' 할 수 있는가에 초점을 맞춘다. 구현 관점 implementation perspective은 프로그래머인 우리에게 가장 익숙한 관점으로, 실제 작업을 수행하는 코드와 연관돼 있다. 객체들이 책임을 수행하는 데 필요한 동..
객체지향의 사실과 오해 Chapter 06 리뷰 Chapter 06 객체 지도 유일하게 변하지 않는 것은 모든 것이 변한다는 사실뿐이다. -Heraclitus of Ephesus- 객체지향은 자주 변경되는 기능이 아니라 안정적인 구조를 기반으로 시스템을 구조화한다. 기능 설계 대 구조 설계 ✔ 모든 SW 설계에는 "기능 측면의 설계"와 "구조 측면의 설계"의 두 가지 측면이 존재한다. 기능 측면에서는 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다. 구조 측면에 설계에서는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다. SW개발 초기 단계에서는 사용자가 무엇을 원하는지, 사용자가 원하는 것을 만족시키기 위해 시스템이 어떤 기능을 제공해야 하는지에 초점을 맞춰야 한다. 미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 ..
객체지향의 사실과 오해 Chapter 05 리뷰 Chapter 05 책임과 메세지 의도는 "메세징"이다. 훌룡하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려있다. -Kay 1996- 자율적인 책임 설계의 품질을 좌우하는 책임 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 자신의 의지에 따라 증언할 수 있는 자유 객체가 책임을 자율적으로 수행하기 위해서는 객체에게 할당되는 책임의 수준이 자율적이여야 한다. 너무 추상적인 책임 책임이 너무 추상적이고 포괄적인 것도 무조건 좋지 않다. 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준 안에서 추상적이여야 한다. "어떻게"가 아니라 "무엇"을 자율적인 책임의 특징은 객체가 "어떻게"해..
객체지향의 사실과 오해 Chapter 04 리뷰 Chapter 04 역할, 책임, 협력 객체지향에 갓 입문한 사람들의 가장 흔한 실수는 협력이라는 문맥을 고려하지 않은 채 객체가 가져야 할 상태와 행동부터 고민하기 시작한다는 것이다. 객체들 간의 요청과 응답 속에서 창발 하는 협력에 초점을 맞춰 애플리케이션을 설계해야 한다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. 📌 설계를 하는 중에 객체 하나하나를 보았을 때, 객체가 비합리적이고 너무 비효율적이면 객체를 수정할 생각만 하고 있었다. 객체 자체를 좀 더 효율적이고 간단하게 만드려고만 했었는데 나도 무의식적으로 객체에만 집중을 했던 것 같다. 객체들을 따로 떼어놓고 보았을 때 겉모습이 다소 이상하고 기괴하더라도 협력이 훌룡하다면 훌룡한 객체지향 설계라..
객체지향의 사실과 오해 Chapter 03 리뷰 Chapter 03 타입과 추상화 "일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 (훌룡한) 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다" - Keith Devlin - 추상화를 통한 복잡성 극복 "진정한 의미의 추상화는 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다" - Root Bernstein- 추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다. 추상화는 복잡한 현실을 단순화하기 위해 사용하는 인간의 가장 기본적인 인지 수단이라고 할 수 있다. 추상화의 수준, 이익, 가치는 목적에 의..
객체지향의 사실과 오해 Chapter 02 리뷰 Chapter 02 이상한 나라의 객체 “객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다.” -Rebecca Wirfs-Brock- 객체지향과 인지 능력 심리학자인 엘리자베스 스펠크와 필립 켈만의 인지 실험 실험 결과를 토대로, 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 인간이 직접적으로 지각할 수 있는 물리적인 경계를 지닌 객체인 구체적인 사물들의 한계를 넘어서 추상적인 사물까지 객체적으로 인식할 수 있다. 즉, 객체는 인간이 분명하게 인지할 수 있고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 객체지향의 패러..
객체지향의 사실과 오해 Chapter 01 리뷰 Chapter 01 협력하는 객체들의 공동체 객체 객체지향 애플리케이션의 윤곽을 결정하는 것은 역할, 책임, 협력이지만 실제로 협력에 참여하는 주체는 객체다. 객체지향 프로그램의 아름다움을 결정하는 것이 협력이라면 협력이 조화를 이루는지 결정하는 것은 객체다. 협력 공동체의 일원으로서 객체는 충분히 “협력적”이여야 한다. 객체는 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야 한다. 모든 것을 스스로 처리하려고 하는 전지전능한 객체는 존재하지 않는다. 객체는 충분히 “자율적”이여야 한다. 객체 공동체에 속한 객체들은 공동의 목표를 달성하기 위해 협력에 참여하지만 스스로의 결정과 판단에 따라 행동하는 자율적인 존재다. 객체지향 설계의 묘미는 다른 객체와 조화롭게 협력할 수 있을 만큼 충분..