# software design

15개의 포스트
post-thumbnail

Typescript로 다시 쓰는 GoF - Chain of Responsibility

Chain of Responsibility란? 책임 떠넘기기란 말 그대로 각 객체가 본인이 처리하지 못하는 업무를 다른 객체에게 처리할 것을 떠넘기는 것을 의미한다. Express로 만든 API 서버에서 어떤 요청이 들어왔을 때 해당 요청을 어느 엔드포인트에서 처리할지 적합한 처리 주체를 만날때까지 미들웨어와 라우터 스택을 따라 내려가는 것을 생각하면 된다. 다만, 여기서는 보다 객체 지향적으로 코드를 다루며, 스택이 아닌 체인의 형태로 책임이 전가된다. 왜 사용할까? "떠 넘긴다"는 표현 때문에 자칫 부정적으로 들릴 수 있지만, Chain of Responsibility는 각자의 객체가 자신의 일에 집중하며, 처리를 요구하는 객체와 실제로 처리하는 객체가 느슨하게 결합된 구조일 뿐

약 2시간 전
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Visitor

Visitor 패턴이란? 어떤 데이터의 구조를 나타내는 객체가 있고 이 객체로 수행하는 처리작업을 별도의 객체로 분리할 때 사용할 수 있는 것이 Visitor 패턴이다. 즉, 데이터의 구조와 처리를 분리하는 패턴이다. 예를들어, 어떤 사각형을 나타내는 객체 Square가 있고 이 객체는, 사각형의 폭과 넓이를 나타내는 속성 width와 height를 가진다. 이때, 이 사각형을 그려주는 메소드 draw를 Square 안에 구현을 해도 가능하지만, 주어진 도형을 그리는 작업만을 담당하는 Drawer라는 객체를 만들 수도 있다. 이렇게 처리 객체를 분리함으로서, 유사한 객체에 같은 처리가 필요할 경우 같은 코드를 중복으로 작성하지 않고 같은 그룹의 객체는 일괄적으로 관리를 할

2023년 9월 17일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Decorator

Decorator란? 우선, GoF에서 이야기하는 디자인 패턴으로서의 Decorator는 Java, Python, Typescript 등의 언어에 등장하는 Decorator@라는 기능과는 별개의 개념이다. 둘 다 상위 컨텐츠가 하위 컨텐츠를 감싸고 부가적인 기능을 제공하기에 같은 이름이 사용되지만, 다음의 두 가지 차이가 있다. 먼저, 디자인 패턴으로서의 Decorator는 어디까지나 개념이고 패턴이며, 개발자가 직접 구현해야하는 코드 작성의 방식이다. 반면, 언어 기능으로서의 Decorator는 주로 다른 함수나 클래스를 감싸기 위해 @키워드와 함께 사용되는 언어 문법이다. 그리고, 디자인 패턴으로서의 Decorator는 꾸며주는 대상이 되는 객체를 변형하지 않으며, 그 위에

2023년 9월 11일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Composite

Composite이란? Composite이란 사전적으로 혼합물이라는 뜻이다. 언뜻 다른 패턴들과는 다르게 이름만으로 직관적으로 그 역할을 유추하기가 다소 쉽지는 않지만, 이름 그대로 서로 다른 무엇인가를 혼합하여 하나인것처럼 취급하는 패턴이다. 보통 내용물과 그릇, 혹은 단수와 복수를 하나로 동일시한다고 이야기하는데 예시를 살펴보면 이해가 보다 빠르다. 언제쓸까? Composite 패턴은 어떤 위계질서를 트리 형태로 나타낼 수 있는 상황에서 쓰이며 일상적으로 굉장히 자주 등장하는 패턴이다. 예를들어, 파일 시스템: 파일과 디렉토리는 서로 다른 객체지만, 둘 다 디렉토리라는 그릇 안에 집어넣을 수 있다. 조직 구조도: 개개인이 팀을 이루고, 이 팀은 다시 다른 팀의

2023년 9월 2일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Strategy

Strategy패턴이란? Strategy는 전략이며, 소프트웨어에서의 전략은 특정 기능을 어떤식으로 구현할지에 대한 알고리즘 혹은 비즈니스 로직이다. Strategy 패턴은 하나의 목적을 가지는 여러개의 전략이 있을 때 이를 효과적으로 관리하고 또 교체하여 사용하기 편리하게 하기 위해 사용한다. 각 전략들 간에 공통된 인터페이스를 두고, 구체적인 구현체만 추가 혹은 수정하여 사용한다. 언제 쓸까? Strategy 패턴은 굉장히 다양하게 쓰일 수 있다. 그중 대표적으로는 결제 시스템에서 결제 수단을 관리할 때, 혹은 게임에서 몬스터의 상태에 따라 행동패턴을 변화시킬 때 사용할 수 있다. Strategy 구현 Strategy 패턴의 구조는 비교적

2023년 8월 29일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Abstract Factory

Abstract Factory란? 앞서서 이미 Factory Method라는 디자인 패턴에 대해서 다루었었다. 인스턴스를 생성해내는 추상적인 객체를 만들어두고, 구체적으로 어떤 인스턴스를 어떻게 만들지는 하위에서 구체적인 객체를 작성하면서 결정하는 디자인 패턴이었다. Abstract Factory도 유사하다. 하지만 다른 것이라면 Abstract Factory의 목적은 하나의 "인스턴스"를 어떻게 만들지가 아닌 "비슷한 유형"의 객체들을 어떻게 만들어낼지에 대한 디자인 패턴이다. 그래서 추

2023년 8월 27일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Bridge

Bridge란? Bridge 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 연결하는 역할을 한다. 따라서, 브릿지 패턴을 이해하기 위해서는 먼저 클래스 계층이 어떻게 구분되는지를 먼저 이해해야한다. 기능의 클래스 계층 어떤 기능을 구현한 클래스 Something이 있다고 가정하자. 이때 Something에 새로운 기능을 추가하고 싶을 때는 상속을 받아 새로운 클래스 SomethingGood을 만들 수 있다. 여기서 두 클래스 간에 계층이 생겨나는데 이처럼 상위 클래스의 기능을 가지고 새로운 기능을 만들기 위해 하위 클래스를 새로 만드는 형태를 기능의 클래스 계층이라고 부른다. 만약 SomethingGood을 이용해 다

2023년 8월 17일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Builder

Builder란? Builder란 복잡한 객체를 만들 때 마치 건물처럼 각 프로퍼티를 하나하나 순서대로 쌓아가면서 객체를 완성해나가는 디자인 패턴의 일종이다. 여기서 "복잡한 객체"라는 말이 굉장히 추상적인데, 이는 그만큼 Builder 패턴이 쓰이는 경우가 다양하기 때문이다. 언제 쓸까? Builder는 정말 많은 곳에서 쓰일 수 있다. 어느 객체의 생성자가 많은 매개변수를 받아서 인스턴스를 초기화하여야 할 때 불변 객체를 만들어야할 때. 즉, 객체의 생성과 객체의 표현을 분리하고 싶을 때 객체의 생성 순서가 복잡할 때 동일한 구조를 여러 객체에서 재사용하려 할 때 이 이외의 상황에서도, 그리고 다른 디자인패턴과 혼합하여서도 사용될 수

2023년 8월 16일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Prototype

Prototype이란? Prototype 패턴은 이름에서 나타나는 것처럼 어떤 인스턴스의 원형을 정하는 패턴이다. 클래스를 인스턴스화하고 내부 구조를 만드는 과정이 복잡할 때, 이를 매번 새로 인스턴스화하고 만드는 것은 비효율적이다. 이럴 때, 프로토타입 패턴에 따라 설계된 객체라면 손쉽게 인스턴스를 복사, 혹은 클로닝하여 같은 데이터를 유지한 새로운 인스턴스를 만들어낼 수 있다. 자바스크립트의 Prototype과의 차이 이때, 자바스크립트의 Prototype과 헤깔릴 수 있는데, 둘의 이름이 같고 어느정도 기능적으로 유사한 부분도 있지만 엄연히 다른 개념이다. 목적 우선 두 개념의 목적이 다르다. 디자인 패턴으로서의 프로토타입은 이미 존재하는 객체를

2023년 8월 14일
·
1개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Singleton

Singleton이란? 클래스는 new 키워드를 사용하여 인스턴스화 시킬 수 있으며, new를 사용할때마다 말 그대로 새로운 인스턴스를 생성한다. 하지만 경우에 따라서 인스턴스를 단 하나만 생성하여 재사용 하고 싶은 때도 있다. 예를들어, 클래스 안에 프로그램 내 여러 곳에서 공용으로 접근하는 자원을 저장하는 경우가 있을 수 있다. Singleton의 구현 Singleton 패턴은 비교적 단순하게 Singleton이 될 클래스 하나만 있으면 된다. 단, 생성된 인스턴스를 얻기위한 static메소드를 구현하는 것이 일반적이며 생성자를 private으로 처리하여 안정성을 더할 수 있다. Singleton Singleton의 인스턴스는

2023년 8월 12일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Factory Method

Factory Method란? 앞선 장에서 살펴봤던 Template Method를 인스턴스를 생성할 때 적용한 패턴이 Factory Method이다. Factory Method에서는 인스턴스 생성 방법을 상위 클래스에서, 즉 Template Method를 통해 결정하되, 구체적으로 어떻게 생성할지는 하위 클래스에 맡긴다. Factory Method 구현 Factory Method에는 다음의 네 가지 객체가 등장한다. Product Product는 Factory를 거쳐 생산되는 결과물, 즉 제품을 추상화한 객체다. 따라서, 해당 제품을 사용하기 위한 인터페이스의 형태가 이곳에서 정의된다. Creator Creator는 Template Method가

2023년 8월 9일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Template Method

Template Method란? 어떤 모양이나 형식과 같은 틀만 정해져있고 어떻게가 비어있는 것을 템플릿이라고 한다. 그리고 Template Method는 이름 그대로 템플릿이 되는 메소드를 추상 메소드Abstract Method를 사용해 뼈대만 만들고 하위 클래스에서 구현방식을 직접 정의하는 패턴이다. Template Method 구현 Template Method를 구성하는 객체는 비교적 단순하게 두 가지 객체가 필요하다. Abstract Class(추상 클래스) Template Method를 구현하는 객체이며, 해당 템플릿 메소드에서 사용하는 추상 메소드를 선언한다. Concrete Class(구현 클래스) Abstract Class에서 정의한 추

2023년 8월 4일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Adapter

Adapter란? 현실에서 전가기기들의 어댑터가, 콘센트에서 제공되는 전류와 전압을 사용하려는 전가기기가 지원하는 규격에 맞게 바꿔주는 것처럼 Adapter란 주어진 객체를 필요한 상황에 맞게 바꾸는 패턴이다. Adapter 패턴은 Wrapper 패턴이라고도 불리며, 기존의 객체를 포장하듯이 감싸서 새로운 객체를 만들어내는데 이 때 두 가지 형태의 Adapter 패턴이 존재하게 된다. 클래스 상속을 이용한 패턴 인스턴스 위임을 이용한 패턴 왜 쓸까? Adapter 패턴을 쓰게되면 이미 기존에 검증된 코드를 재사용할 수 있기 때문에 버그가 발생하더라도 디버깅해야하는 범위가 훨씬 좁아진다. 또, 목적이 바뀌어서 기존 코드를 수정해야하는 상황에서도 수정하기보다 Ad

2023년 8월 3일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Iterator

Iterator란? 반복문을 사용해서 개발자가 직접 인덱스를 통해 각각의 원소를 꺼내오는 대신, 자동으로 모든 원소를 차례대로 꺼내서 작업을 연속적으로 할 수 있게 해주는 행동 패턴(Behavioral Pattern)의 일종. 왜 쓸까? 반복로직을 구현과 분리가 가능하다. 예를들어, 위와 같은 반복문이 있을 때 BookShelf의 내부로직이 어떻게 바뀌더라도 while문은 영향을 받지 않는다. Javascript의 Iterator? 자바스크립트에도 Iterator라는 패턴은 정의되어 있다. [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/IteratorsandG

2023년 7월 30일
·
0개의 댓글
·
post-thumbnail

<Modern Software Engineering> by. Dave Farley 읽기 시작

평소에 관심을 갖고 보던 유튜브 채널 주인이 책을 출판했다고 하기에 큰 맘 먹고 구매를 했다. 역시 원서는 비싸다. 개발 또는 코딩을 잘 하는 사람이 되고 싶은 욕심도 많지만 훨씬 더 본질적인 이슈, 소프트웨어 엔지니어링이란 무엇인지에 대해서도 고민이 많은 요즘이다. 비싼 돈을 주고 구매한 만큼 본전을 꼭 뽑아내야겠다. 목차 Contents Part 1: What is Software Engineering 1. Introduction Engineering - The Practical Application of Science What is Software Engineering? Reclaiming "Software Engineering" How to Make Progress The Birth of Software Engineering Shifting the Paradigm Summary 2. What is Engineering?

2022년 4월 19일
·
1개의 댓글
·