본문 바로가기

Architecture & Engineering10

[GoF Design Pattern] 3. 데코레이터(Decorator) 패턴 [GoF Design Pattern] 3. 데코레이터(Decorator) 패턴 데코레이터 패턴은 소위 말해 객체를 장식하는 패턴이다. 객체를 장식할 때 기존 코드는 수정하지 않고, 새로운 기능을 확장할 수 있도록 돕는 패턴이다. 여기서 장식이라는 것은 어떻게 수행하는 것인지 예시를 통해 살펴보자 [헤드퍼스트 디자인 패턴] 책에서는 다음과 같은 예시를 들었다. 커피에 새로운 첨가물을 추가하여 새로운 커피를 만들어내야 한다. 이때 첨가물의 종류에 따라 커피의 가격이 달라지도록 개발해야 한다. 커피의 구성요소는 크게 [기본 커피]와 [첨가물] 이라고 하자. 기본 커피에는 다양한 첨가물이 여러 경우의 수로 추가될 수 있다. 예를 들어 Dark Roast(1달러)라는 기본 커피에 Whip(+0.3달러), Moch.. 2023. 6. 18.
[GoF Design Pattern] 2. 옵저버(Obsever) 패턴 [GoF Design Pattern] 2. 옵저버(Obserer) 패턴 주제(Subject)를 구독하는 관찰자(Observer) 패턴. 여러 컴포넌트가 같은 주제를 구독하고 주제의 정보가 변경될 때, 각 컴포넌트는 즉각 업데이트를 받도록 한다. 주제(Subject)는 자신을 구독하고 있는 옵저버(Observer)들을 관리하고 옵저버는 주제에 의존적이다. 예를 들어 하나의 데이터 소스(날씨 서버)가 있고 여러 종류의 UI 화면이 날씨 정보를 갱신받아 업데이트한다고 할 때, 옵저버 패턴을 적용할 수 있겠다. 옵저버 패턴은 구조가 매우 간단하고 이해하기도 편한 패턴이다. 쉽지만 여러 가지 중요한 디자인 원칙을 내포하고 있기 때문에 잘 공부해 두면 좋다. -> 개방-폐쇄 원칙(OCP) , 느슨한 결합(Loose.. 2023. 5. 29.
[GoF Design Pattern] 1. 전략(Strategy) 패턴 [GoF Design Pattern] 1. 전략(Strategy) 패턴 흔히 디자인 패턴이라고 말하면, GoF(Gang of Four)라 불리는 소프트웨어 공학자 4명이 구체화한 23개의 디자인 패턴을 말한다. 디자인 패턴은 모듈 단위가 아닌 클래스 레벨에서 설계를 하는 기교이며 다음과 같이 목적(클래스, 객체), 범위(생성, 구조, 행위)에 따라 구분하기도 한다. 생성 패턴(Creational Pattern) : 객체를 생성하는 방법에 대한 패턴들이다. 생성 로직을 숨기면서, 사용 목적에 따라 어떻게 객체를 생성할 지에 대한 유연성을 제공한다. 특히 객체의 생성과 조합을 캡슐화하여 객체의 생성 또는 변경과정에서 프로그램 구조가 영향받지 않도록한다. ex) 팩토리 메서드(Factory Method) 패.. 2023. 5. 14.
[Clean Code] 4. 오류 처리 [Clean Code] 오류 처리 오류 처리는 매우 중요한데, 이것으로 인해 코드 논리의 이해가 방해받으면 안 된다. 따라서 깔끔하게 오류처리를 하는 기법을 알아보는 [Chapter 7. 오류처리]이다. [Chapter 7 오류 처리 요약] 오류 코드 보다는 예외를 사용하라 : 오류 코드는 Caller의 논리가 잘 안 보이게 만든다. try-catch 문 부터 사용하여 트랜잭션 처럼 활용하라 : try 문의 범위 정의 미확인 예외를 사용하라 : 추상화된 예외 클래스를 이용해 OCP를 준수하라 예외에 의미를 제공 : 전후 사정을 설명하는 Message 호출자를 고려한 예외 클래스를 정의 하라 : Wrapper Class를 이용할 것. 정상흐름을 정의하라 : 특수 사례 패턴(Special Case Patte.. 2023. 4. 2.
[Clean Code] 3. 객체와 자료구조 [Clean Code] 3. 객체와 자료구조 객체와 자료구조 : 자료 추상화 자료구조 : 구체적으로 데이터를 그대로 보여준다. 즉 데이터를 있는 그대로 표현하는 것으로, 쓸데없이 멤버변수를 private으로 하고 public 한 getter와 setter를 만드는 것은 매우 무의미한 행위 (이런 행위를 한다고 추상화가 된다고 착각해선 안된다.) public class Point { public double x; public double y; } public interface Vehicle { double getFuelTankCapacityInGallons(); double getGallonsOfGasoline(); } 객체 : 추상적인 개념으로 함수를 통해 자료를 설명한다. 이 객체를 사용하는 사용자는 .. 2023. 3. 17.
[Clean Code] 2. 주석, 형식 맞추기 Clean Code 2. 주석, 형식 맞추기 클린코드 [2장. 의미 있는 이름], [3장. 함수]는 다소 심오하고 단번에 이해하기 어려운 이야기였다면 4, 5장은 비교적 단순한 내용이었다. 클린코드 [4장. 주석]과 [5장. 형식 맞추기]는 두 줄로 요약하면 다음과 같다. 주석은 안 쓰는게 좋다. 코드 작성은 비슷한 것끼리 가까운 곳에 위치하도록 하고, 가로 형식은 IDE의 도움을 받고 언어별 Linter와 Analyzer를 잘 활용하자. 주석 : 주석은 나쁜 코드를 보완하지 못한다. 새로 짜라 저자의 말은 빌리면 사실상 주석은 필요악이라고 한다. 주석도 유지보수할 자신이 없다면, 최대한 코드로 의도를 표현하라고 한다. bad // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if((employe.. 2023. 3. 1.
[Clean Code] 1. 의미있는 이름과 함수 Clean Code 1 . 의미 있는 이름과 함수 이직 후 생각보다 큰 규모의 프로젝트를 담당하다 보니, 학부 때는 정말 그 의미가 크게 와닿지 않았던 것들이 이제야 왜 중요한지 알게 되어가는 중이다. 알게 되어간다는 말도 오만한 표현일 것 같을 정도로 생각보다 정말 많이 중요하더라. 특히 아키텍처와 패턴을 다루기 이전, [코드] 라는 것은 개발자 간 일종의 대화로도 볼 수 있다. 코드를 명료하게 표현하지 못한다면 대화를 못하는 개발자라 할 수 있다. 때문에 먼저 클린한 코드란 무엇인가부터 공부하고자 한다. (패턴에 대해, 아키텍처에 대해 수많은 임시 저장 글들이 있지만, 클린코드부터가 역시 순서상 맞는 것 같다) 사실 책은 입사 초에 읽었지만 정리가 귀찮았는데, 프로젝트가 조금 여유가 생겨 정리하면서 .. 2023. 2. 26.