개발 도서
[객체지향의 사실과 오해] 부록A : 추상화 기법
추상화 기법 추상화 : 도메인의 복잡성을 단순화하고 직관적인 멘탈 모델을 만드는 데 사용하는 인지 수단 추상화 기법의 종류 분류와 인스턴스화 분류 : 객체의 구체적인 세부사항을 숨기고 인스턴스 간에 공유하는 공통적인 특성을 기반으로 범주를 형성하는 과정 인스턴스화 : 범주로부터 객체를 생성하는 과정 (분류의 역) 예시 : 승용차, 버스, 트럭을 자동차로 분류 일반화와 특수화 일반화 : 범주 사이의 차이를 숨기고 범주 간에 공유하는 공통적인 특성을 강조하는 과정 특수화 : (일반화의 역) 예시 : 자동차와 자전거를 운송 수단으로 일반화 집합과 분해 집합 : 부분과 관련된 세부 사항을 숨기고 부분을 사용해서 전체를 형성하는 과정 분해 : 전체를 부분으로 분리하는 과정 (집합의 역) 예시 : 자동차를 섀시, ..
[객체지향의 사실과 오해] 07장 : 함께 모으기
객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점 클래스는 세 가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야 함 동시에 코드 안에서 세 가지 관점을 쉽게 식별할 수 있도록 깔끔하게 분리해야 함 개념 관점 (Conceptual Perspective) 사용자가 도메인을 바라보는 관점 실제 도메인의 규칙과 제약을 최대한 유사하게 반영 소프트웨어 클래스가 도메인 개념의 특성을 최대한 수용하면 변경 관리 및 유지보수 용이 명세 관점 (Specification Perspective) 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어 안에서 살아 숨쉬는 객체들로 초점이 옮겨짐 객체의 인터페이스를 바라봄 (인터페이스와 구현을 분리) 객체가 협력을 위해 '무엇'을 할 수 있는..
[객체지향의 사실과 오해] 06장 : 객체 지도
기능 설계 vs 구조 설계 기능 설계 : 제품이 사용자를 위해 무엇을 할 수 있는지에 초점 구조 설계 : 제품의 형태가 어떠해야 하는지에 초점 훌륭한 기능은 훌륭한 소프트웨어를 만드는 충분조건 훌륭한 구조는 훌륭한 소프트웨어를 만드는 필요조건 성공적인 소프트웨어는 훌륭한 기능을 제공하는 동시에 사용자의 요구를 빠르고 안정적으로 추가할 수 있어야 함 기능이 아니라, 구조를 기반으로 모델을 구축하는 것이 이해하기 쉽고 변경에 안정적 (기능은 계속 변하기 때문) 안정적인 구조를 설계하면 변경에 대비하고 변경의 여지를 남겨놓을 수 있음 객체지향 > 기능분해 객체지향 : 기능을 더 작은 책임으로 분할하고, 책임을 객체에 분배함으로써 기능이 객체의 구조를 따르게 만듦 기능분해 : 기능을 중심으로 설계한 후 구조가 ..
[객체지향의 사실과 오해] 05장 : 책임과 메시지
자율적인 책임 객체지향 공동체는 스스로 정한 원칙에 따라 판단하고,스스로의 의지를 기반으로 행동하는 '자율적'인 객체로구성됨 객체에게 할당되는 책임이 자율적 ⇒ 객체의 자율성↑ 자율적인 책임은 객체가 '어떻게(how)' 해야 하는가가 아니라 '무엇(what)'을 해야하는가를 설명 추상적이고 포괄적인 책임 ⇒ 재사용성↑ ⇒ 객체의 자율성 ↑ (협력에 참여하는 의도를 명확하게 설명할 수 있는 수준 안에서 추상적이어야 함) 상세한 수준의 책임 명시 ⇒ 객체의 자율성↓ (∵ 객체가 선택할 수 있는 부분이 제한됨) 메시지와 메서드 메시지 객체가 다른 객체에게 전송하는 요청 메시지 전송 = 수신자, 메시지 이름, 인자의 조합 송신자는 메시지 전송을 통해서만 다른 객체의 책임을 요청할 수 있고, 수신자는 오직 메시지..
[객체지향의 사실과 오해] 04장 : 역할, 책임, 협력
협력 중요도 : 개별 객체의 품질 < 여러 객체들이 모여 이뤄내는 협력의 품질 어떤 협력에 참여하는지가 객체에 필요한 행동을 결정하고, 필요한 행동이 객체의 상태 결정 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성됨 책임 객체에 의해 정의되는 응집도 있는 행위의 집합으로, 객체가 알아야 하는 정보와 객체가 수행할 수 있는 행위에 대해 서술한 문장 객체가 '무엇을 알고 있는가(knowing)'와 '무엇을 할 수 있는가(doing)'으로 구성됨 아는 것 (knowing) : 외부에 제공해줄 수 있는 정보 개인적인 정보에 관해 아는 것 관련된 객체에 대해 아는 것 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것 하는 것 (doing) : 외부에 제공해 줄 수 있는 서비스 객체를 생성하거나 계산을 하..
[객체지향의 사실과 오해] 03장 : 타입과 추상화
객체지향과 추상화 추상화 목적 : 현실의 복잡성 극복하기 위한 방법으로, 복잡한 것을 이해하기 쉬운 수준으로 단순화하는 것 방법1 : 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만듦 방법2 : 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만듦 개념 개념 : 일반적으로 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념 ⇒ 객체를 여러 그룹으로 분류 가능 & 각 객체는 특정한 개념을 표현하는 그룹의 일원으로 포함됨 (인스턴스(instance)) 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스(instance)라고 함 개념의 세 가지 관점 심볼(symbol): 개념을 가리키는 간략한 이름이나 명칭 내연(intension): 개념의..
[객체지향의 사실과 오해] 02장 : 이상한 나라의 객체
객체 하나의 개별적인 실체로 식별 가능한 물리적인 또는 개념적인 사물은 어떤 것이라도 객체가 될 수 있음 객체는 변경 가능한 상태, 특징적인 행동, 구별 가능한 식별자를 가지며, 객체는 저장된 상태와 실행가능한 코드를 통해 구현된다. 상태 특정 시점에 객체가 가지고 있는 정보의 집합 상태를 이용하면 과거의 모든 행동 이력을 설명하지 않고도 현재를 기반으로 객체의 행동 방식을 이해하고 행동의 결과를 쉽게 예측하고 설명할 수 있음 모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다. 객체의 상태 = 프로퍼티 + 프로퍼티 값 프로퍼티 객체의 상태를 구성하는 모든 특징 프로퍼티는 정적 (변경되지 않고 고정됨) 프로퍼티 값(property value)은 동적 (시간이 흐름에 따라 변경됨) 객체의 프로..
[객체지향의 사실과 오해] 01장 : 협력하는 객체들의 공동체
객체지향 프로그래밍이란? 현실 속에 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업 객체지향의 목표는 실세계를 모방하는 것이 아니라, 오히려 새로운 세계를 창조하는 것 소프트웨어 객체와 실세계 사물 사이에 존재하는 연관성은 희미하다. (ex. 현실 세계에서는 사람이 TV를 켜지만, 소프트웨어 세계에서는 TV 객체가 TV를 켠다. 객체지향에서 가장 중요한 개념 3가지 : 역할, 책임, 협력 역할 : 관련성 높은 책임의 집합으로, 재사용 가능한 협력관계를 구축하는 데 중요 여러 객체가 동일한 역할을 수행할 수 있다. (대체가능성) ⇒ 다형성과 관련 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다. (자율성) 하나의 객체가 동시에 여러 역할을 수행할 수 있다. 책임 협력 :..