본문으로 건너뛰기

#설계

10
BlogBook Review

헤드퍼스트 소프트웨어 아키텍처 - 책 소개

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." 원제 : Head First Software Architecture 저자 : Raju Gandhi, Mark Richards, Neal Ford 출판 : 한빛미디어, 2025 / O'Reilly, 2024 소프트웨어 아키텍처란, 시스템의 구조를 정의하는 중요한 의사결정들의 집합이다. 단순히 컴포넌트를 나누거나, 흐름도를 그리는것이 아니라, 비즈니스 요구사항과 기술적 제약 사이에서 최적의 균형점을 찾는 과정입니다. 좋은 아키텍처는 변화에 유연하고, 이해하
BlogBook Review

소프트웨어 설계의 정석 - 책 소개

한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다. 원제 : はじめての設計をやり抜くための本 第2版 (처음 설계를 시작하는 사람들을 위한 책 제2판) 저자 : 吉原 庄三郎 출간 : 翔泳社, 2022 / 한빛미디어, 2024 설계라는 영역의 세부 분야에 대해서 다루는 책은 많다, 아키텍처, UML, RDB 설계, 각종 개발 방법론, 프레임워크 개론 등, 제목만 붙여도 생각나는 책들이 많이 있다. 그러나 이들을 하나로 묶어내어 프로젝트가 진행되는 전체 과정을 다루는 실체는 대부분 다루지 않는다. 정답이 없는 영역이
FundamentalOOP

오브젝트; 절차 추상화와 타입 추상화

타입 : 변수에 저장할 수 있는 내용물의 종류와 변수에 적용될 수 있는 연산의 가짓수를 의미. 안타깝게도 프로시저만으로는 충분히 풍부한 추상화의 어휘집을 제공할 수 없다. 이것은 언어 설계에서 가장 중요한 추상 데이터 타입의 개념으로 우리를 인도한다. 추상 데이터 타입은 추상 객체의 클래스를 정의한 것으로 추상 객체에 사용할 수 있는 오퍼레이션을 이용해 규정된다. 이것은 오퍼레이션을 이용해 추상 데이터 타입을 정의할 수 있음을 의미한다. 추상 데이터 객체를 사용할 때 프로그래머는 오직 객체가 외부에 제공하는 행위에만 관심을 가지며
FundamentalOOP

오브젝트; 디미터 법칙

퍼블릭 인터페이스의 품질에 영향을 미치는 원칙과 기법 디미터 법칙 묻지 말고 시켜라 의도를 드러내는 인터페이스 명령-쿼리 분리 디미터 법칙 낯선 자에게 말하지 마라. 오직 인접한 이웃하고만 말하라. 오직 하나의 도트만 사용하라. 클래스 내부의 메서드가 아래 조건을 만족하는 인스턴스에만 메시지를 전송하도록 프로그래밍해야 한다. this 객체 메서드의 매개변수 this의 속성 this의 속성인 컬렉션의 요소 메서드 내에서 생성된 지역 객체 부끄럼타는 코드 Shy code : 불필요한 어떤 것도 다른 객체에게 보여주지 않으며, 다른 객체
FundamentalOOP

오브젝트; 메시지와 인터페이스

객체지향 프로그래밍에서 어플리케이션이 클래스의 집합으로 구성된다는것은 오해다. 클래스라는 구현 도구에 지나치게 집착하면 경직되고 유연하지 못한 설계에 이를 수 있다. 좋은 객체지향 코드를 얻기 위해서 클래스가 아닌 객체를 지향해야 한다. 이는 곧 협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다. 책임은 객체가 수신할 수 있는 메시지의 기반이 된다. 메시지는 객체 사이의 협력을 가능하게 하는 매개체다. 객체가 다른 객체에게 접근할 수 있는 유일한 방법은 메시지를 전송하는 것뿐이다. 협력 안에서 메시지를 전송하는 객체를 클라이언
FundamentalOOP

오브젝트; GRASP와 책임 할당하기

데이터를 먼저 결정하고 고립된 객체의 상태에 초점을 맞추면 캡슐화를 위반하기 쉽고, 요소들 사이의 결합도가 높아지며, 코드를 변경하기 어려워진다. 책임에 초점을 맞춰서 설계할 때 어떤 객체에게 어떤 책임을 할당할지를 결정 하는 것이 어렵다. 책임 할당 과정은 트레이드오프 활동이다. 데이터 중심의 설계에서 책임 중심의 설계로 전환하는 방법 클라이언트 관점에서 객체가 수행하는 행동이란 곧 객체의 책임을 의미한다. 객체는 협력에 참여하기 위해 존재하며 협렵 안에서 수행하는 책임이 객체의 존재가치를 증명한다. 너무 이른시기에 데이터에 초점
FundamentalOOP

오브젝트; 자율적인 객체

객체를 설계할 때 "이 객체가 어떤 데이터를 포함해야 하는가?" 라는 질문은 다음과 같은 두개의 개별적인 질문으로 분리해야 한다. 이 객체가 어떤 데이터를 포함해야 하는가? 이 객체가 데이터에 대해 수행해야 하는 오퍼레이션은 무엇인가? DiscountCondition (할인조건) 클래스에 대한 개선 Movie 클래스에 대한 개선 Screening 클래스에 대한 개선 ReservationAgency 클래스에 대한 개선 DiscountCondition 자신의 데이터를 이용해 할인 가능 여부를 스스로 판단하게 되었지만, isDiscoun
FundamentalOOP

오브젝트; 데이터 중심 설계의 문제

객체지향 설계의 핵심 협력 : 애플리케이션의 기능을 구현하기 위해 메시지를 주고받는 객체들 사이의 상호작용 책임 : 객체가 다른 객체와 협력하기 위해 수행하는 행동 역할 : 대체 가능한 책임의 집합 객체지향 설계 객체에 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동 객체지향의 설계의 핵심은 책임이다. 책임을 할당하는 작업이 응집도와 결합도 같은 설계 품질과 깊이 연관되어 있다. 설계 설계는 변경을 위해 존재한다. 훌륭한 설계한 합리적인 비용안에서 변경을 수용할 수 있는 구조를 만드는 것이다. 변경