7장 함께 모으기개념관점에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 사용자가 도메인을 바라보는 관점을 반영하며, 실제 도메인의 규칙과 제약을 최대한 유사하게 반영한다.명세 관점에 이르면 도메인을 벗어나 소프트웨어로 초점이 옮겨진다. 실제 소프트웨어 객체의 책임에 초점을 맞추며 객체의 인터페이스를 바라본다. 명세 관점에서는 객체가 협력을 위해 무엇을 할 수 있는가에 초점을 맞춘다.구현 관점은 실제 작업을 수행하는 코드와 연관돼 있다. 객체들이 책임을 수행하는 데 필요한 동작을 코드로 직접 작성하는 것이다. 이때 어떻게 수행할 것인가에 초점을 맞춰 인터페이스를 구현하는 데 필요한 속성과 메서드를 추가한다.이러한 관점은 개발 순서가 아닌 세 가지 관점이다. 클래스는 세 가지 관점을..
etc
6장 객체 지도만약 길을 찾는다면 두 가지 방법을 사용할 수 있다. 첫 번째 방법은 길을 물어 보는 것이다. 이는 기능적이고 해결책 지향적인 접근법 이다. 길을 가르쳐 주는 사람은 매우 상세하게 단계별로 설명해줘야한다. 현재 위치에 기반하기에 일반적이지도 않고 재사용도 어렵다. 두 번째 방법은 지도를 사용하는 것이다. 지도는 실세계를 추상화한 모델이다. 지도 안에는 다양한 정보들이 내재되어있다. 이를 구조적이고 문제 지향적인 접근법 이라 표현한다. 지도는 현재의 요구뿐만 아니라 다양한 목적에서 사용될 수 있다. 범용적이고 재사용도 가능하다. 이는 기능에 비해 지도가 가진 구조가 더 안정적이기 때문이다. 이렇게 구조적인 지도는 시간이 많이 지나더라도 사용될 수 있다. 다시말해 기능이 아니라 구조를 기반으로..
5장. 책임과 메시지핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가 이다. 사회 실험 중 한 명이 위급한 상황이 발생했을 때, 자신 이외에 다른 사람들이 있다고 판단하면 도움을 요청하지 않은 결과가 있다. 이 같은 현상을 책임감 분산이라고 불렀으며, 사건에 대한 목격자가 많을 수록 개인이 느끼는 책임감이 적어진다는 뜻이다. 이러한 실험해서는 실험자들이 도와줘야하는 명확한 책임을 가지고 있지 않기에 타인의 책임으로 간주해버린다. 즉, 명확한 책임과 역할을 지닌 참가자들이 협력에 참여해야한다는 것이다.자율적인 책임객체지향 공동체를 구성하는 기본 단위가 자율적인 객체이다. 객체들은 애플리케이션의 기능을 구현하기 위해 협력하고, 과정에서 책임을 다하기 위해 자율적으로 판단하고 행동..
4장. 역할, 책임, 협력최후통첩 게임 실험이 있다. 게임은 제안자와 응답자로 이루어져있으며, 제안자는 100만원을 응답자와 나누어가져야한다. 이때 나누는 비율은 제안자의 마음이며 응답자는 이를 수락하거나 거절할 수 있다. 거절하면 제안자, 응답자 모두 한 푼도 가져가지 못한다. 인간이 만약 합리적이라면 응답자는 1원 이상만 받으면 수락하는 것이 합리적이다. 0원보다야 낫기 때문이다. 하지만 실제 결과는 30% 미만의 금액을 제안한다면 대부분이 거절하였다. 이러한 결과는 인간은 이기적이고 합리적인 특성이 상황과 충돌하여 자신의 이익을 최소화하는 불힙리한 선택을 보여준다. 즉, 인간은 어떤 상황, 문맥에 존재하는 지가 행동 방식을 결정한다는 것이다. 객체의 세계에서도 문맥이 객체의 행동 방식을 결정한다. ..
3장 타입과 추상화지하철 노선도초기에는 실제 지형과 유사하게 표현하였지만 이는 이해를 더욱 어렵게 만들었다.얼마나 사실적이 보다 연결성을 얼마나 직관적으로 표현했는 지가 더 중요하다.정확성을 버리고 목적에 집중한 결과추상화현실에서 출발하되 불필요한 부분을 도려내 본질을 드러나게 하는 과정현실의 복잡성을 극복목적에 부합하는 방향으로 도려내야한다이상한 나라의 앨리스앨리스는 정원사, 병사, 왕자와 공주, 하트 잭, 하트 여왕 등을 "트럼프" 로 표현한다.이를 통해 정원의 복잡도가 낮아진다.이처럼 공통점을 기반으로 객체들을 묶기 위한 그릇을 개념이라 한다.등장인물들은 모두 다른 객체이지만 하나의 트럼프라는 개념으로 추상화했다.개념을 사용하면 객체를 분류할 수 있다.트럼프와 토끼 라는 두 개의 개념으로 등장인물을..
소프티어 부트캠프를 하면서 멘토님이나 현직자 분들이 공통적으로 추천해준 책이라 읽어보고자 한다.실제 코드가 없어서 "그래서 어떻게 적용시키라는 건데?" 라는 의문이 든다고 익히 알고 있다. 실제 서문에서도 비슷한 내용이 있고, 내용을 경험과 연결 짓기 위해 어느 정도의 지식이 필요하다고 한다. 다시 말해 결국 경험도 필요하다는 것이다.실제 다회독 할 때마다 보이는 것이 많다고 하니 이번 기회에 1회독을 시작해보고자 한다.1장. 협력하는 객체들의 공동체객체지향이란?실세계를 소프트웨어로 구현하는 것이 객체 지향의 철학하지만 실제 소프트웨어 객체와 실세계 사물 간 연관성은 희미하다실세계를 모방하는 것이 아니라 새로운 세계를 창조하는 것생명체에 비유하는 이유는 캡슐화와 자율성을 설명하기 효과적이기 때문이다.현실..
10장 실행 계획MySQL 서버에서 보여주는 실행 계획을 읽고 이해하려면 서버가 데이터를 처리하는 로직을 이해해야한다.10.1 통계 정보테이블과 인덱스, 데이터 분포도를 수집해서 저장하는 히스토그램 정보를 통해 실행 계획을 수립한다.10.1.1 테이블 및 인덱스 통계 정보비용 기반 최적화에서 가장 중요한 것이 통계 정보이다.서버의 통계 정보InnoDB 스토리지 엔진을 사용하는 테이블에 대한 통계 정보를 영구적으로 관리할 수 있다. 이전에는 메모리에서만 관리되었는데, 서버가 재시작되면 모든 수집 정보가 사라진다. 따라서 통계 정보를 테이블로 관리할 수 있게 되었다.10.1.2 히스토그램이전에는 통계 정보가 단순히 인덱스된 칼럼의 유니크한 값 개수 정도만 가지고 있었다. 그래서 실제 인덱스의 일부 페이지를 ..
9장 옵티마이저와 힌트9.3 고급 최적화서버의 옵티마이저는 실행 계획을 수립할 때 통계 정보와 옵티마이저 옵션을 결합해 최적의 실행 계획을 수립한다. 옵션은 크게 조인 관련 옵션과 스위치로 구분할 수 있다.옵티마이저 스위치 옵션스위치 옵션은 optimizer_switch 시스템 변수를 통해 제어한다.글로벌과 세션별 모두 설정할 수 있는 변수이므로 서버 전체 및 커넥션에 대해 설정할 수 있다. MRR과 배치 키 액세스 Multi-Range Read 이다. 조인은 드라이빙 테이블에서 하나의 레코드를 읽어 드리븐 테이블의 일치하는 레코드를 찾는 방식이다. 이를 네스티드 루프 조인이라 한다. 내부적으로는 MySQL 엔진이 조인을 처리하지만, 레코드를 검색하고 읽는 것은 스토리지 엔진이 담당한다. 따라서 레코드..