본문 바로가기

디자인 패턴7

싱글톤(Singleton) 패턴 이해하기 인스턴스를 오직 한개만 제공하는 클래스 1. 간단한 싱글톤 구현 package me.likelen.study.singleton; public class Settings1 { private static Settings1 instance; private Settings1() { } public static Settings1 getInstance() { if (instance == null) { instance = new Settings1(); } return instance; } } 질문 1. 생성자를 private 으로 만든 이유는 무엇인가요? 오직 한 개의 인스턴스에만 접근하기 위해 생성자의 노출을 막기 위해서입니다. 2. getInstance() 메소드를 static으로 선언한 이유는 무엇인가요? 글로.. 2022. 2. 6.
State Pattern 이해하기 아래 내용은 클린 소프트웨어의 일부 내용을 재편집한 내용입니다. 스테이트 패턴 왜 이 패턴을 쓸까? 스테이트 패턴을 이해하기 위해서는 유한 상태 기계(FSM: finite state machine) 를 먼저 이해해보자. 이 다이어그램을 상태 전이 다이어그램(STD: state transition diagram) 이라 한다. 모서리가 둥근 상자는 상태(state) . 상태를 연결하는 화살표는 전이(transtion). 전이에는 이벤트(event) 의 이름과 그 이벤트에 따르는 행동(action) 이 이름표가 붙는다. 만약 기게가 Locked 상태가 있는데 coin 이벤트를 받는다면, unlocked 상태로 전이하고 unlock 행동을 호출 만약 기계가 Unlocked 상태에 있는데 pass 이벤트를 받는다.. 2021. 7. 14.
클린 소프트웨어 책에서 말하는 VISITOR PATTERN이란? 이 책에서 가장 서두에 쓰여져 있는 VISITOR PATTERN을 쓰기 위해서 문제를 제기하는데, 그 문제는 바로 이것입니다. "클래스 계층 구조에 새로운 메소드를 추가할 필요가 있지만, 그렇게 하는 작업은 고통스럽거나 설계를 해치게 된다." 이런 문제는 흔하게 발생합니다. 이전 포스트했던 클린 소프트웨어 책에서 말하는 어탭터패턴은 무엇인가?에서도 마찬가지의 문제로 어탭터 패턴을 통해서도 해결방안을 찾았다면 이번에는 비지터 패턴을 활용해서 해결하는 방법을 살펴봅시다. 우리는 흔히 SOLID 원칙이라 불리는 객체지향 원칙이 있습니다. 디자인패턴은 이런 SOLID 원칙을 보다 더 SOLID 하게 만들기 위한 하나의 패턴입니다. 비지터는 변경해야 할 계층 질서에 새로운 파생형을 자주 추가할 필요가 없는 프로그.. 2020. 11. 8.
클린 소프트웨어 책에서 말하는 어탭터 패턴이란? 디자인 패턴중 어탭터 패턴이라는 것이 있습니다. 위키에서 말하길 어탭터 패턴은 어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 클린 소프트웨어 예시로 설명하는 어탭터 패턴을 활용하는 예시는 아래와 같습니다. 위와같은 상황에서 Light가 서드파티에서 사온 것이라서, 소스코드가 없을 수도 있습니다. 아니면 Switch로 제어하고 싶은 다른 클래스가 있는데, 그 클래스가 Switchable로부터 파생받을 수 없다면 어떻게 해야 할까요? 여기서 ADAPTER 패턴이 등장합니다. 아래 그림은 클라이언트가 제어할 수 없는 Light 라는 클래스가 등장할.. 2020. 11. 8.
Template Pattern(템플릿 패턴) VS Strategy Pattern(전략 패턴) Photo by Mike Meyers on Unsplash 들어가기 대부분의 디자인 패턴 책에서는 이 두가지를 비교해서 설명합니다. 왜 일까요? 이 두가지 패턴은 데이터를 은닉화 시켜 구현될 수 있도록 도와주는 패턴입니다. 각각의 쓰이는 상황은 다르지만, 결론부터 이야기하면 잘 짜여진 코드는 템플릿 패턴에서 전략 패턴으로 손쉽게 전환할 수 있고, 반대로 전략패턴에서 템플릿 패턴으로 손쉽게 변경가능하다고 합니다. 그럼 왜 그런지 한번 살펴봅시다. 템플릿 패턴이란 무엇인가? 하위 클래스에서 구체적으로 처리하는 디자인 패턴 개인적으로 패턴을 어렵게 생각하면 끝없이 어렵고 쉽게 생각하면 너무 쉽게 생각하는 경향이 있다고 생각합니다. 그런 예시로 템플릿 패턴도 포함됩니다. 부주제로 '하위 클래스에서 구체적으로 처.. 2020. 9. 27.
로버트 마틴이 말하는 Factory Pattern 이란 무엇인가? Photo by Joshua Sortino on Unsplash 반 버논의 도메인 주도 설계에서 팩토리 패턴에 대한 설명이 나옵니다. 반버논이 말하는 팩토리 패턴이란? 이 때와 반버논 책과 중복된 내용도 있지만, 평소 팩토리패턴에 대해서 생각하던 부분과 마침 책에서 다시와서 읽으면서 느낀바를 다시금 정리하고자 관련 내용을 적습니다. 배경 클린 소프트웨어 라는 책은, 객체지향프로그래밍 원칙인 SOLID에 입각한 샘플 프로젝트 코드와, 물론 SOLID도 설명하구요. 마찬가지로 SOLID 원칙 중, 의존 관계 역전 법칙(DIP)에 해당하는 부분을 설명하기 위해 팩토리 패턴을 언급합니다. 개인적으로, DIP를 위해서 다양한 방법이 존재하는데, 템플릿 메소드 패턴- 전략패턴등 여러 방법이 있다고 생각합니다. 팩토.. 2020. 9. 9.
PayrollSystem 프로젝트에서 디자인 패턴은 어떻게 사용되었는가?(feat. 클린 소프트웨어) 들어가기 '클린 소프트웨어 - 로버트 마틴 저자' 에서 payroll 아키텍처 코드를 보고... Slipp 스터디에서 디자인패턴에 대한 학습을 하면서, 클린 소프트웨어 책을 학습하고 있습니다. (이 책의 좋은 점은 따로 또 포스팅하겠습니다.) 책의 일부분으로 로버트마틴이 PayrollSystem 코드가 나오는데, 그 부분을 보고 이해한 부분을 적어볼까합니다. 어떻게 만들어졌을가? 이 책에서는 총 5가지의 명세가 나오고 이를 해결하기 위해 다음과 같은 패턴을 활용합니다. 1. 커맨드 패턴와 액티브 오브젝트 패턴 2. 템플릿 메서드와 스트레티지 패턴 3. 퍼사드 패턴 4. 싱글톤과 모노스테이트 패턴 5. 널 오브젝트 패턴 코드에서 어떻게 사용되고 있는지 확인해봅시다. 각 패턴에 대한 자세한 설명은 스킵하고,.. 2020. 9. 9.