Deep Dive Into Design Patterns - 중재자 패턴

    💡 중재자(Mediator) 패턴이란? 객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 행동 디자인 패턴입니다. 이 패턴은 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 합니다. 중재자 패턴은 각 객체들의 강한 연결(참조)를 끊고, 그 대신 컴포넌트들이 특수 중재자 객체를 호출하여 적절한 컴포넌트들로 리다이렉션하게끔 합니다. 이로 인해 컴포넌트들은 간접적으로 협력하게 되고, 수십 개의 동료 컴포넌트들과 결합되는 대신 단일 중재자 클래스에만 의존합니다. ⭐ 옵서버 패턴과 중재자 패턴? 옵서버 패턴은 1개의 발행자에 N개의 구독자가 존재하여 옵서버가 발행을 담당하고 중재자 패턴은 M개의 퍼블리셔와 N개의 구독자 사이에서 1개의 중재자를 통해 통신합니다. 옵서버 패턴은 재사용성은 좋지만 ..

    Deep Dive Into Design Patterns - 옵서버 패턴

    💡 옵서버(Observer) 패턴이란? 객체에 발생하는 모든 이벤트에 대하여 옵서버(관찰자)들에게 알리고, 옵서버들은 알림을 받아 조치를 취하는 행동 패턴입니다. 일명 구독 매커니즘을 구현한 패턴으로, 다른 디자인 패턴들과 다르게 일대다 의존성을 가집니다. 옵서버 패턴의 예시로는 MVC 패턴(Model, View, Controller)이 있습니다. MVC의 Model과 View의 관계는 Observer 패턴의 Subject 역할과 Observer 역할의 관계에 대응됩니다. 즉, 하나의 Model에 복수의 View가 대응합니다. 💡 클래스 다이어그램으로 본 옵서버 패턴 Publisher(Subject) : 관찰 당하는 대상으로, Subscriber(Observer)들을 리스트로 갖고 있다. (Aggrega..

    Deep Dive Into Design Patterns - 싱글톤 패턴

    💡 싱글톤(Singleton) 패턴이란? 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공하는 생성 디자인 패턴입니다. 쉽게 말해, 단 하나의 유일한 객체를 만들기 위한 코드 패턴이며 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법을 말합니다. 보통 싱글톤 패턴이 적용된 객체가 필요한 경우는 그 객체가 리소스를 많이 차지하는 역할을 하는 무거운 클래스일때 적합합니다. 대표적으로 데이터베이스 연결 모듈을 예로 들 수 있는데, 데이터베이스에 접속하는 작업(I/O 바운드)은 그 자체로 무거운 작업에 속하며 또한 한번만 객체를 생성하고 돌려쓰면 되지 굳이 여러번 생성할 필요가 없기 때문입니다. 💡 클래스 다이어그램으로 본..

    Deep Dive Into Design Patterns - 브리지 패턴

    💡 브리지 패턴이란? 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조(추상화 및 구현)로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴입니다. 💡 문제? Circle(원) 및 Square(직사각형)라는 한 쌍의 자식 클래스들이 있는 기하학적 Shape(모양) 클래스가 있다고 가정해 봅시다. 이 클래스 계층 구조를 확장하여 색상을 도입하기 위해 Red(빨간색) 및 Blue(파란색) 모양들의 자식 클래스들을 만들 계획입니다. 그러나 이미 두 개의 자식 클래스가 있으므로 Blue­Circle(파란색 원) 및 Red­Square(빨간색 직사각형)와 같은 네 가지의 클래스 조합을 만들어야 합니다. 새로운 모양 유형들과 색상 유형들을 추가할 때마다 계층 구조는 기하급수적..

    Deep Dive Into Design Patterns - 컴포지트 패턴

    💡 컴포지트(복합체) 패턴이란? 객체들을 트리 구조들로 구성한 후, 이러한 구조들을 개별 객체들처럼 작업할 수 있도록 하는 구조 패턴입니다. 즉, 복합 객체(Composite)와 단일 객체(Leaf)를 동일한 컴포넌트로 취급하여 클라이언트가 무엇이 복합 객체이고 무엇이 단일 객체인지 구분하지 않고도 사용할 수 있게끔 하는 패턴입니다. 💡 클래스 다이어그램으로 본 컴포지트 패턴 Component(인터페이스) : Leaf와 Compsite 를 묶는 공통적인 상위 인터페이스 Composite : 복합 객체로서, Component 구현체들을 내부 리스트로 관리 Leaf : 단일 객체로서, 하위 요소가 없다. Client : Component Interface를 통해 단일/복합 객체를 하나의 객체로 다룬다. 복합..

    Deep Dive Into Design Patterns - 퍼사드 패턴

    💡 퍼사드 패턴이란? 라이브러리에 대한, 프레임워크에 대한, 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터페이스를 제공하는 구조적 디자인 패턴입니다. 라이브러리의 각 클래스와 메서드들이 어떤 목적의 동작인지 이해하기 어려워 바로 가져다 쓰기에는 난이도가 높을 때, 이에 대한 적절한 네이밍과 정리를 통해 사용자로 하여금 쉽게 라이브러리를 다룰 수 있도록 인터페이스를 만드는 데 사용합니다. ⭐ 퍼사드는 움직이는 부분이 많이 포함된 복잡한 하위 시스템에 대한 간단한 인터페이스를 제공하는 클래스입니다. 💡 클래스 다이어그램으로 본 퍼사드 패턴 퍼사드 패턴을 사용하면 하위 시스템 기능들의 특정 부분에 편리하게 접근할 수 있습니다. 또한, 퍼사드는 클라이언트의 요청을 어디로 보내야 하는지와 움직이는 모든 ..

    Deep Dive Into Design Patterns - 어댑터 패턴

    💡 어댑터 패턴이란? 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴입니다. 📌 문제 상황 주식 시장 모니터링 앱을 만들고 있고, 이 앱은 여러 소스에서 주식 데이터를 XML 형식으로 다운로드한 후 사용자에게 보기 좋은 차트들과 다이어그램들을 표시한다고 상상해 봅시다. 어느 시점에 당신은 타사의 스마트 분석 라이브러리를 통합하여 당신의 앱을 개선하기로 결정했습니다. 그런데 이 분석 라이브러리는 JSON 형식의 데이터로만 작동합니다. 즉, 앱과 라이브러리가 호환되지 않는 상황입니다. 이 라이브러리를 XML과 작동하도록 변경할 수 있으나, 그러면 라이브러리에 의존하는 일부 기존 코드가 손상될 수 있습니다. 또 처음부터 타사의 라이브러리 소스 코드에 접근하는 것이 불가능하여..

    Deep Dive Into Design Patterns - 디자인 패턴의 개요

    💡 패턴 자세히 알아보기📌 생성 패턴 Deep Dive Into Design Patterns - 싱글톤 패턴💡 싱글톤(Singleton) 패턴이란? 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공하는 생성 디자인 패턴입니다. 쉽게 말해, 단 하나의 유일한 객체를easyhomputer.tistory.com 📌 구조 패턴 Deep Dive Into Design Patterns - 어댑터 패턴💡 어댑터 패턴이란? 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴입니다. 📌 문제 상황 주식 시장 모니터링 앱을 만들고 있고, 이 앱은 여러 소스에easyhomputer.tistory.com Deep Dive Into Desig..

    [💻알고리즘] Time Complexity(시간 복잡도)

    취업을 위해 코딩테스트를 본격적으로 준비하기 전, "효율적인 알고리즘"이란 무엇인가에 대한 고민을 해보았다. 아래 글은 여러 블로그와 인프런의 'Do it! 알고리즘 코딩테스트 with JAVA' 강의를 보고 내린 답이다. 주어진 문제를 풀기 위한 효율적인 방법을 고민한다는 것은 시간 복잡도를 고민한다는 것과 같은 말이다. 🌈시간복잡도 "문제를 해결하기 위한 알고리즘의 로직을 코드로 구현할 때, 시간 복잡도를 고려한다는 것"은 무슨 의미일까? 입력값의 변화에 따라 연산을 실행할 때 연산 횟수에 비해 시간이 얼마만큼 걸리는가를 고려한다는 의미라고 필자는 생각한다. 효율적인 알고리즘을 구현하였다는 것은 다시 말해 입력 값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘을 구성하였다는 이야기이다. 🌈B..

    휴학일지 1편.

    보호되어 있는 글입니다.

    [✍혼자서 스프링 공부하기] 4일차 - DB 연결, H2 데이터베이스 설치 및 테이블 생성

    이전까지는 메모리에 데이터를 저장했다면, 이제 DB를 연결하여 서버를 재부팅하여도 데이터가 유실되지 않게끔 개발할 것이다. DB는 개인 및 팀 프로젝트에서 주로 사용하던 mysql이 아닌 H2라는 DB를 사용할 것이다. H2 데이터베이스는 개발이나 테스트 용도로 가볍고 편리하고, 웹 화면을 제공해주므로 별도의 IDE 없이 쉽게 사용 가능하다. > https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com 공식 페이지에 들어가서 H2 1.4.200 ver. 을 다운받는다. Window PowerShell을 키고 설치 폴더 > bin으로 이동한다. 프로그램 실행 명령어는 다음과 같다. # mac chmod..

    PRG(POST-Redirect-GET) 패턴

    💡 PRG 패턴이란? 웹 MVC 구조에서 흔하게 사용하는 패턴으로, HTTP POST 요청에 대한 응답이 또 다른 URL로의 GET 요청을 위한 Redirect여야 한다는 것을 의미한다. 다시 말해, POST 방식으로 온 요청에 대해서 GET 방식의 웹페이지로 Redirect 시키는 패턴을 말한다. 💡 PRG 패턴을 사용하지 않으면 발생하는 문제점 새로고침으로 인한 동일한 요청이 연속적으로 보내지는 이슈가 발생한다. 만약 이 이슈가 중요하지 않은 로직이 있는 부분이라면 상관없겠지만 결제 같은 중요한 로직에서는 중복 결제가 일어나는 문제가 발생한다. POST 요청은 URL을 복사하더라도 다른 사람과 공유할 수 없다. POST 요청을 보내게 되면 Parameter 값들이 URL에 남겨있지 않기에 특정 Par..