[BOOK : 오브젝트 14장] 일관성 있는 협력
·
BOOK
이번 장에서는 코드를 통해 협력에 대한 예제들을 보여주고 있었다.  이번 장과 15장을 끝으로 오브젝트 1회독은 마무리하게 된다. 이 책을 읽으며 많이 배우기도 하였지만 이번 정독을 끝으로 두는 것이 아닌 한번 더 읽어보며 내가 얼마만큼 더 이해할 수 있는지 더 확인해보려고 한다.  0. 서론 객체는 협력을 위해 존재한다.협력은 객체가 존재하는 이유와 문맥을 제공한다.잘 설계된 애플리케이션은 이해하기 쉽고, 수정이 용이하며 재사용 가능한 협력의 모임이다.객체지향 설계의 목표는 적절한 책임을 수행하는 객체들의 협력을 기반으로 결합도가 낮고 재사용 가능한 코드 구조를 창조하는 것이다.  유사한 요구사항을 계속 추가해야 하는 상황에서 각 협력이 서로 다른 패턴을 따를 경우 전체적인 설계의 일관성이 서서히 무너..
[BOOK : 오브젝트 12장] 다형성
·
카테고리 없음
다형성 많음을 의미하는 'poly'와 형태를 의미하는 'morph'의 합성어로 '많은 형태를 가질 수 있는 능력'을 의미한다. 객체지향 프로그래밍에서 사용되는 다형성은 그림과 같이 나눌 수 있다. 오버 로딩 다형성 일반적으로 하나의 클래스 안에 동일한 이름의 메서드가 존재하는 경우를 카리 킨다. 강제 다형성 언어가 지원하는 자동적인 타입 변환이나 사용자가 직접 구현한 타입 변환을 이용해 동일한 연산자를 다양한 타입에 사용할 수 있는 방식을 가리킨다. 오버 로딩 다형성 일반적으로 하나의 클래스 안에 동일한 이름의 메서드가 존재하는 경우를 가리킨다. 유사한 역할을 하는 메서드지만 시그니처가 다른 경우 사용한다. 매개변수 다형성 제네릭 프로그래밍과 관련이 깊다. 변수나 메서드의 매개변수 타입을 임의의 타입으..
[BOOK: 오브젝트 11장] 합성과 유연한 설계
·
BOOK
서론 상속과 합성은 객체지향 프로그래밍에서 가장 널리 사용되는 코드 재사용 기법을 이야기한다. 상속이 부모 클래스와 자식 클래스를 연결해서 부모 클래스의 코드를 재사용하지만, 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해 부분 객체의 코드를 재사용한다.  상속관계는 is - a라고도 불리고, 합성 관계는 has-a 관계라고 부른다.  여러 가지 내용이 있지만, 이는 결국 하나를 이야기하고 있는 것 같았다.   객체의 합성이 상속보다 더 좋은 방법이다. 상속을 합성으로 변경하기 코드 재사용을 위한 상속 남용시 발생하는 세 가지는 다음과 같다. 불필요한 인터페이스 상속 문제 메서드 오버라이딩의 오작용 문제 부모 클래스와 자식 클래스의 동시 수정 문제  포워딩 ( forwarding ) 오퍼레이..
[BOOK: 오브젝트 10장] 상속과 코드 재사용
·
BOOK
DRY ( Don't Repeat Yourself ) 원칙 모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을 만한 표현 양식을 가져야 한다. DRY (Don't Repeat Yourself)는 '반복하지 마라'라는 뜻 중복 코드는 변경을 방해한다. 코드를 수정하는 데 필요한 노력을 몇배로 증가시킨다. 중복 여부를 판단하는 기준은 변경요구사항이 변경됐을 때 두 코드를 함께 수정해야 한다면 이 코드는 중복이다.한번, 단 한번( Once and Only Once ) 원칙 또는 단일 지점 제어 (Single-Point Controller ) 원칙이라고도 한다.  중복과 변경 중복코드는 새로운 중복코드를 부르고, 버그 발생 가능성도 높아진다. 민첩하게 변경하기 위해서는 중복 코드를 추가하는 대신 ..
[BOOK: 오브젝트 9장] 유연한 설계
·
카테고리 없음
개방 - 폐쇄 원칙 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 해당 내용에서의 키워드는 "확장"과 "수정" 확장에 대해 열려 있다. 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. 수정에 대해 닫혀 있다 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. 컴파일 타임 의존성을 고정시키고 런타임 의존성을 변경하라 사실 개방-폐쇄 원칙은 런타임 의존성과 컴파일 타임 의존성에 관한 이야기이다. 런타임 의존성 실행 시에 협력에 참여하는 객체들 사이의 관계 컴파일 타임 의존성 코드에서 드러나는 클래스들 사이의 관계 이 할인정책은 사실 이미 O..
[BOOK: 오브젝트 5장] 책임 할당하기
·
BOOK
이전 내용에 대해 간략하게 요약을 해봤을 때 나는 데이터 주도설계가 아닌 책임 주도 설계를 해라 였다. 이때 책임 주도 설계에서 중요한 건 캡슐화를 강조했다.  해당 장에서는 4장의 내용에 이어 책임 주도 설계에서 책임을 할당하는 것에 대해 자세하게 나와 있었다. 그럼 한번 살펴보도록 하자! 책임 주도 설계를 향해 데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위해서는 다음의 두 가지 원칙을 따라야한다고 한다. 데이터보다 행동을 먼저 결정해라 협력이라는 문맥 안에서 책임을 결정해라  데이터주도 설계 vs 책임 주도 설계  데이터주도 설계이 객체가 포함해야 하는 데이터가 무엇인가? 데이터를 처리하는데 필요한 오퍼레이션은 무엇인가? 책임 주도 설계 이 객체가 수행해야 하는 책임은 무엇인가?이 책임을 ..
[BOOK : 오브젝트 4장] 설계 품질과 트레이드 오프
·
BOOK
이번 주 스터디에서의 목표는 3,4장을 읽는 것이 목표였다.  주말에 시간이 많이 남아 그동안 못읽었던 책들이나 내용을 공부하는 편인데, 다음 주는... 생일이나 다른 일정들이 있기 때문에 미리 평일에 조금씩 해둬야겠다..  서론은 이쯤하고 본질적인 내용을 들어가 보도록 하자  내가 생각한 이 챕터의 핵심 데이터 중심적인 설계는 지향하세요! 객체지향중 제일 중요한 건 책임입니다. 캡슐화 x 100 해당 챕터에서는 3장에 내용이 이어졌었고, 해당 챕터를 읽을수록 캡슐화의 중요성과 데이터 중심적인 설계는 하지 말아라라는 게 핵심으로 보였다.  데이터 중심의 영화 예매 시스템 객체 지향 설계에서는 두가지의 방법을 이용해 시스템을 객체로 분할하는 것이 가능하다. 상태 ( 데이터 )를 분할의 중심축으로 삼는 방법..
[BOOK : 3장] 역할, 책임, 협력
·
BOOK
해당 챕터에서는 객체지향 패러다임의 핵심 3가지에 대해 이야기하고 있다.   서론 객체지향 패러다임의 핵심은 다음과 같다. 역할 (role) 책임 (responsibility)협력 (collaboration) 객체들의 책임과 협력이 어느 정도 자리 잡은 후 사용할 수 있는 구현 메커니즘 클래스상속객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 발생한다.   나는 다음과 같은 구절이 정말 나에게 많이 와닿았다.  "애플리케이션의 기능을 구현하기 위해 어떤 협력이 필요하고 협력을 위해 어떤 역할과 책임이 필요한지를 고민하지 않은 채 너무 이른 시기에 구현에 초점을 맞추는 것은 변경하기 어렵고 유연하지 못한 코드를 낳는 원인이 된다 "  맞다. 진행했던 프로젝트..