[Design Pattern] Command Pattern 커맨드 패턴에 대해 알아보자!
·
BOOK
학습목표캡슐화를 더 높은 수준으로 끌어올려보자어떻게? 메서드 호출을 캡슐화를 통해메서드 호출을 캡슐화하면 계산 과정의 각 부분을 결정화할 수 있기에 계산하는 코드를 호출한 객체는 그 일이 어떤 식으로 처리되는지 전혀 신경 쓸 필요가 없다.캡슐화된 메서드 호출을 로그 기록용으로 저장한다거나 재사용으로 취소 기능을 구현하는 일과 같이 스마트한 일도 할 수 있다.커맨드 패턴이란?요청 내역을 객체로 캡슐화하여 객체를 서로 다른 요청 내역에 따라 매개변수화가 가능하다.이러한 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있다.커맨드 객체일련의 행동을 특정 리시버와 연결함으로써 요청을 캡슐화한 것이다. 그렇기에, 행동과 리시버를 하나의 객체에 넣고 execute()라는 메서드 하나만 외부에 ..
[Design Pattern] Factory Pattern 팩토리 패턴에 대해 알아보자!
·
BOOK
서론오늘은 팩토리 패턴에 대해 알아보려고 한다. 헤드퍼스트 디자인패턴 책을 너무나 재미있게 읽고 있다. 알기 쉽게 그림이나 예제들을 통해 확인해 볼 수 있고 설명도 잘 되어있는 느낌이 많이 들었다. 사람마다 좋아하는 책 스타일은 다르겠지만… 나와 같은 성향인 분들에게는 한 번쯤은 꼭 읽어봐도 좋을 것 같다고 이야기하고 싶은 책이랄까…? 거두절미하고 시작해 보겠다. 팩토리 패턴의 학습목표부터 살펴보겠다.느슨한 결합으로 객체지향 디자인을 만들어보자!new 연산자를 사용한다고 해서 새로운 객체가 만들어지지 않는다.객체의 인스턴스를 만드는 작업을 공개하면 결합적인 문제가 발생할 수 있다.팩토리 패턴은 불필요한 의존성을 없애서 결합 문제를 해결할 수 있다. new 연산자new 연산자는 자바의 뼈대를 이루는 연산자..
[Design Pattern] Decorator Pattern 데코레이터 패턴에 대해 알아보자!
·
BOOK
서론 디자인 패턴 중, 데코레이터 패턴은 이전 건수님께서 프로젝트 적용 시 해당 패턴을 이용해 구현을 하시고 이에 대해 기술블로그까지 작성과 리뷰를 해주신 적이 있어서 이 패턴에 대해 당시 찾아봤던 경험을 가지고 있다.  혹시나 궁금하신 분들이 계실수도 있으니, 해당 부분에 대해 링크를 첨부하고자 한다. https://zuminternet.github.io/vote-architecture/ OOP 기반 선착순 투표 시스템 아키텍처선착순 투표 시스템과 앞으로 확장적으로 늘어날 투표 시스템 아키텍처에 대해 OOP 기반으로 구성한 것을 공유합니다.zuminternet.github.io 내용이 정말 좋아서 관심있으신분들은 한 번씩 읽어보셔도!? 좋을 것 같다.  위와 같은 이유들로 데코레이터 패턴에 대해 한번 ..
[Design Pattern] Observer Pattern 옵저버 패턴에 대해 알아보자!
·
BOOK
서론 최근, 헤드퍼스트 디자인패턴이라는 책을 통해 디자인 패턴을 공부하고 있다.  오브젝트를 읽고, 해당 책을 보니 내용을 그림으로 설명해주기도 하고 비유를 해주시며 설명을 하니, 머리에 쏙쏙 들어오는 느낌이 들었다.  아무튼, 해당 책을 기반으로 여기서 나오는 디자인 패턴들을 기억하고 리마인드를 해보고자 게시물을 하나씩 적어보려고 한다.  옵저버 패턴옵저버 패턴 ( Observer Pattern ) 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고, 자동으로 내용이 갱신되는 방식으로 일대다 ( One-to-many ) 의존성을 정의한다.  하나의 객체의 상태가 변경되면 그 객체를 의존하는 모든 객체는 연락을 받게 된다.  그림을 통해 알아보면 다음과 같다.  간략하게 그려보는데, ..
[BOOK : 오브젝트 15장] 디자인 패턴과 프레임워크
·
BOOK
0. 서론 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법을 디자인 패턴이라고 한다.  디자인 패턴은 다양한 변경을 다루기 위해 반복적으로 재사용할 수 있는 설계의 묶음이다. 디자인 패턴이 설계를 재사용하기 위한 것이라면 프레임워크는 설계와 코드를 함께 재사용하기 위한 것이다.  프레임워크는 애플리케이션의 아키텍처를 구현 코드의 형태로 제공한다. 프레임워크가 제공하는 아키텍처가 요구사항에 적합하다면 다양한 환경에서 테스트를 거친 견고한 구현 코드를 쉽고 빠르게 재사용할 수 있다.  디자인 패턴과 프레임워크 모두 협력을 일관성 있게 만들기 위한 방법이다.   1. 디자인 패턴과 설계 재사용 소프트웨어 패턴 패턴은 반복적으로 발생하는 문제와 해법의 쌍으로 정의된다. ..
[BOOK : 오브젝트 14장] 일관성 있는 협력
·
BOOK
이번 장에서는 코드를 통해 협력에 대한 예제들을 보여주고 있었다.  이번 장과 15장을 끝으로 오브젝트 1회독은 마무리하게 된다. 이 책을 읽으며 많이 배우기도 하였지만 이번 정독을 끝으로 두는 것이 아닌 한번 더 읽어보며 내가 얼마만큼 더 이해할 수 있는지 더 확인해보려고 한다.  0. 서론 객체는 협력을 위해 존재한다.협력은 객체가 존재하는 이유와 문맥을 제공한다.잘 설계된 애플리케이션은 이해하기 쉽고, 수정이 용이하며 재사용 가능한 협력의 모임이다.객체지향 설계의 목표는 적절한 책임을 수행하는 객체들의 협력을 기반으로 결합도가 낮고 재사용 가능한 코드 구조를 창조하는 것이다.  유사한 요구사항을 계속 추가해야 하는 상황에서 각 협력이 서로 다른 패턴을 따를 경우 전체적인 설계의 일관성이 서서히 무너..
[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 ) 원칙이라고도 한다.  중복과 변경 중복코드는 새로운 중복코드를 부르고, 버그 발생 가능성도 높아진다. 민첩하게 변경하기 위해서는 중복 코드를 추가하는 대신 ..