이론 vs 실무당연히 이론이겠지 하는 고정관념을 지우게 되는 단락대부분의 사람들은 이론이 먼저 정립된 이후 실무가 그 뒤를 따라 발전한다고 생각한다. 라고 한다. 하지만 로버트 L. 글래스가 말하길 이론보다 실무가 먼저라고 한다. 특히 소프트웨어 개발에서 두드러진다고 한다.다른 분야와 달리, 소프트웨어 개발은 보다 최근에 만들어진(발견된) 분야여서 역사가 짧고 이론과 실무의 격차가 매우 심한 편이다. 컴퓨터라는 도구의 등장 이후, 개발과 유지보수 등에서 수많은 소프트웨어와 프레임워크 등이 만들어졌다. 하지만 개발과 유지보수 측면에 있어 효과적인 이론이 발표된 적은 거의 없거니와, 심지어 이론은 소프트웨어 유지보수에 전혀 관심이 없는 듯 하다.따라서, 이 책에서는 추상적인 이론과 추상적인 개념을 앞세우지 ..
전통적인 소프트웨어 개발 방법변경이 반번하게 발생하는 기능에 안정적인 구조를 종속시키는 길을 묻는 방법길찾기라는 기능을 위한 지도를 그리는 방식객체지향 개발 방법안정적인 구조에 변경이 빈번하게 발생하는 기능을 종속시키는 방법안정적인 지도 위에서 길찾기라는 기능을 구현기능 위주 개발 : To-Do list에서의 "작업 추가", "작업 수정", "작업 삭제", "작업 조회"와 같은 독립된 기능 단위구조 위주 개발 : 사용자 인터페이스(프런트엔드), 비즈니스 로직(서비스 레이어), 데이터베이스(데이터 액세스 레이어)로 나누어 구성자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라미래의 변경에 대비할수는 있지만, 예측할 수는 없다객체 지도는 안정적이면서 재사용 가능하며 범용적이다. ..
인터페이스의 세가지 특징인터페이스의 사용법을 익히기만 하면 내부 구조나 동작 방식을 몰라도 쉽게 조작자동차 엔진의 구조, 구동 방식등을 몰라도 "핸들", "페달"과 같은 사용법만 익히면 운전 가능인터페이스 자체는 변경 하지 않고 단순히 내부 구성이나 작동방식만을 변경하는 것은 인터페이스 사용자에게 영향을 미치지 않음정비소에서 자동차 엔진을 교체하거나, (말이 안되지만) 가솔린을 전기모터로 바꿔도 문제없다대상이 변경 되더라도 동일한 인터페이스를 제공하기만 하면 아무런 문제 없이 상호 작용 가능하나의 자동차의 운전에 익숙하다면, 비슷한 다른 자동차의 운전에 문제없다공용 인터페이스 - 외부에 공개된 구역(메세지 요청 등)놀라운 사실 - 객체가 자기 자신과 상호작용 할 때도 메시지를 통해 상호작용 해야 함멧 와..
자율적인 책임 - 설계의 품질을 좌우하는 책임이전에 말했다시피, 모든 객체는 책임을 지닌다. 중요한 조건이 있는데, 이 책임은 객체가 자율적으로 행해야 한다는 것이다. 아래 재판을 하는 예시를 보자.모자 장수는 증언을 해야 하는 책임을 가질 뿐, 증언을 하는 방식에서 자율성을 가진다.증언을 어떤 방식으로 하는지, 무엇을 증언할지는 모자 장수의 자유이다.모자 장수는 증언을 해야 하는 책임을 가지고, 그 방법까지 요구받는다.모자 장수가 누려야 하는 선택의 자유를 심각하게 훼손한다.훌륭한 책임과 너무 추상적인 책임그림과 같이 설명하라 라는 책임을 수행한다고 하자. 이때 모자장수는 무엇을 설명해야 하는가? 본인의 일생? 오늘 모자를 팔았는지? 왜 증언대에 섰는지?...추상적인 책임은 재사용과 유연성이라는 이점을..
협력은 요청과 응답들의 모임이다어떠한 일을 수행하는 것을 협력이라고 하자. 이 일은 혼자서는 하지 못하고, 다양한 사람들의 힘을 합쳐야 한다. 이때, 이 사람들 사이에서는 수많은 요청과 응답이 있을 것이다. 객체지향도 이와 같다.책임의 분류어떠한 객체가 어떠한 요청에 대해 대답할 수 있거나, 적절한 행동을 해야 할 의무가 있다면 이를 책임을 가진다 고 한다. 책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소이다.하는 것(doing)객체를 생성하거나 계산을 하는 등의 스스로 하는 것다른 객체의 행동을 시작시키는 것다른 객체의 활동을 제어하고 조절하는 것아는 것개인적인 정보에 관해 아는 것관련된 객체에 관해 아는 것자신이 유도하거나 계산할 수 있는 것에 관해 아는 것객체가 지닌 책임의 집합으로, 객체..
추상화란?복잡한 현실을 단순화하기 위해 사용하는 인간의 가장 기본적인 인지수단이다. 훌륭한 추상화는 목적에 부합하는 것이어야 한다.공통점을 기반으로 객체들을 묶기 위한 그릇을 개념(concept)이라고 한다.어떠한 객체가 특정 개념에 소속될 수 있다면, 그 객체를 해당 개념의 인스턴스(instance)라 칭한다.개념*은, 객체들의 복잡성을 극복하기 위한 추상화 도구이다.개념의 세 가지 관점심볼(symbol):개념을 가리키는 간략한 이름이나 명칭내연(intension):개념의 완전한 정의. 객체가 개념에 속하는지 판별할 수 있음외연(extension):개념에 속하는 모든 객체 집합타입(개념)과 객체의 타입(개념)타입과 개념의 정의는 같다. 둘 다 객체를 한데 묶어 추상화하기 위한 방법이다.객체에서 중요한 ..
객체란, 상태, 행동, 식별자를 지닌 실체로 보는 것이 가장 효과적이다.상태객체가 주변 환경과 상호작용에 어떻게 반응하는가는, 그 시점까지 객체에 어떤 일이 발생했느냐에 따라 다르다.예를 들어, 여행을 위해 비행기를 이용하려면 탑승전에 항공권을 발권해야 한다. 비행기 탑승 여부는 탑승권 발권 행위의 발생 여부에 따라 달라지는 것이다.상태는, 과거의 모든 행동 이력을 설명하지 않고도 결과를 쉽게 예측하고 설명할 수 있는 수단이다.객체의 모든 정적 상태/동적 상태를 "property/property value"라 부른다.객체와 다른 객체 간의 연결을 "link"라 부른다(앨리스가, 음료 0.5L를 들고 있는 것에 비유).객체는 자율적 존재라는 것을 명심해야 한다. 객체는 다른 객체의 상태에 직접 접근할 수도..
객체지향은 실세계를 직관적으로 모델링할 수 있는 패러다임이라고 알고 있다.하지만 아니다.객체지향은, 고객과 사용자를 만족시킬 수 있는 "신세계"를 만드는 것이다.그러나, 객체지향에 관한 기본적인 설명을 위해 과거의 관습적인 설명, 대중적으로 많이 알고 있는 설명을 활용해 보겠다.손님, 캐시어, 바리스타라는 역할이 있고, 해당 역할에는 그에 맞는 책임이 있다.역할 은 책임을 내포한다(역할이 있으면, 그에 해당하는 책임이 무조건 있다는 의미).여러 사람이 동일한 역할을 수행할 수 있다.대체 가능성을 의미한다.책임을 수행하는 방법은 자율적으로 선택할 수 있다-커피를 만드는 방법은 자유, 커피를 완성만 하면 됨.한 사람이 동시에 여러 역할을 수행할 수 있다(캐셔가 바리스타 역할도 수행함).역할은 책임의 집합이다..