디자인 패턴 14

컴포지트 패턴 적용 - SecurityFilterChain 적용

👣 개요 컴포지트 패턴이란? Composite Pattern - 구조 👣 문제 상황 코드 가독성과 유지보수성을 높이기 위해 개별 객체와 집합 객체를 동일하게 다루고 싶은 경우가 존재한다. 예를 들어, 포토샵과 같은 프로그램을 설계한다고 가정해본다. 개별 ikadnorth.tistory.com 해당 패턴을 이용해서 SecurityFilterChain 설정을 OCP, SRP 원칙을 지킬 수 있도록 코드를 작성함. 👣 문제점 기존의 SecurityFilterChain 설정 방법 · iksadNorth/composite-pattern-case-securityfilterchain@6335f7f iksadNorth committed Aug 30, 2023 github.com 그저 모든 SecurityFilterCh..

디자인 패턴 2023.08.30

Composite Pattern - 구조

👣 문제 상황 코드 가독성과 유지보수성을 높이기 위해 개별 객체와 집합 객체를 동일하게 다루고 싶은 경우가 존재한다. 예를 들어, 포토샵과 같은 프로그램을 설계한다고 가정해본다. 개별 도형들에 '파랑색으로 색칠하기' 기능을 적용할 때, 각 도형을 그룹으로 묶은 집합 도형에도 '파랑색으로 색칠하기' 기능을 적용할 수 있어야 프로그램 사용자가 '각 도형 색칠하기'와 '묶인 도형 색칠하기'라는 2 개의 버튼을 사용하지 않고 '색칠하기' 버튼 1개로 작업을 진행할 수 있다. 목적 : 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하고 싶을 때 👣 해결 방법 /** "Component" */ interface Graphic { public void print(); } /** "Composite" */ c..

디자인 패턴 2023.07.30

Facade Pattern - 구조

👣 문제 상황 자주 사용되거나 너무 복잡한 일련의 작업 묶음이 있다면 이것을 추상화해 내부 작업들에 대한 의존도를 낮추거나 단순히 하나의 메소드로 엮어서 사용하기 편하게 만들 필요가 생길 수 있다. class CPU { public void freeze() { ... } public void jump(long position) { ... } public void execute() { ... } } class Memory { public void load(long position, byte[] data) { ... } } class HardDrive { public byte[] read(long lba, int size) { ... } } class You { public static void main(S..

디자인 패턴 2023.07.30

객체 지향 프로그래밍

👣 개요 객체들의 집합으로 프로그램을 표현하며 데이터를 객체로 취급해 객체 내부에 선언된 메서드를 활용하는 방식. 👣 OOP 특징 1. 추상화 복잡한 시스템으로부터 핵심 개념을 간추리는 것. 2. 캡슐화 객체의 속성, 메소드를 하나로 묶고 외부에 감추는 것. 3. 상속성 상위 클래스의 하위 클래스가 이어받아 재사용, 확장하는 것. 4. 다형성 하나의 메서드를 다양한 방법으로 동작시키는 것. 👣 OOP 설계 원칙 1. SRP - 단일 책임 원칙 모든 클래스는 하나의 책임만 가진다. // 위반 예시 class Report { public void generateReport() { // 보고서를 생성하는 코드 } public void saveReportToFile() { // 보고서를 파일로 저장하는 코드 }..

디자인 패턴 2023.07.21

Programming Paradigm

👣 개요 프로그래밍 패러다임이란? 프로그래머에게 프로그래밍의 과점을 갖게 해주는 역할. Ex) 객체 지향 프로그래밍 -> 프로그램은 객체들의 집합. 함수형 프로그래밍 -> 순수 함수들의 연속. 👣 선언형 선언형의 철학 프로그램은 함수로 이뤄진 것이다. 👣 순수 함수 전역 변수에 의해 출력이 훼손되는 것이 아니라 입력값이 같기만 하면 무조건 출력값도 같은 함수. def add(a,b): return a+b 👣 고차 함수 함수의 입력에 함수가 포함되는 함수. def map(arr, func): return func(arr) 👣 일급 객체 고차 함수를 사용하기 위해선 해당 언어가 일급 객체여야 함. 일급 객체 특징 1. 변수나 메서드에 함수를 할당할 수 있다. 2. 함수 매개변수에 함수를 할당할 수 있다. 3..

디자인 패턴 2023.07.19

MVC Pattern - 아키텍쳐

👣 개요 애플리케이션의 기능을 Model-View-Controller 구조로 분리해서 유지보수성, 확장성, 재사용성을 향상시킨 패턴. Model 애플리케이션의 데이터을 다루는 요소 및 비즈니스 로직을 다루는 요소. View 애플리케이션의 UI를 다루는 요소. Controller 애플리케이션의 Model과 View를 중계하는 요소. 👣 결과 1. 테스트의 용이성 각 구성 요소를 분리해 테스트를 용이하게 만듦. 2. 구성 요소 간 낮은 의존성 낮은 의존성은 수정해야 하는 부분의 범위를 각 구성 요소로 규정짓기에 유지 보수성이 향상됩니다.

디자인 패턴 2023.07.19

Iterator Pattern - 행위

👣 문제 상황 자료들을 담고 있는 컨테이너들을 순회하는 방법을 자료구조에 상관없이 공통 인터페이스로 추상화해서 사용하는 패턴. 👣 해결 방법 interface Aggregate { Iterator createIterator(); } interface Iterator { boolean hasNext(); Object next(); } class ConcreteAggregate implements Aggregate { private String[] elements; public ConcreteAggregate() { elements = new String[]{"A", "B", "C", "D", "E"}; } @Override public Iterator createIterator() { return new ..

디자인 패턴 2023.07.19

Proxy Pattern - 구조

👣 문제 상황 특정 객체에 대한 접근을 제어하거나 공통적으로 부가 기능을 부여해야 할 때, 사용함. 목적 : 객체를 접근하기 전에 일괄 적용하고 싶은 기능 부여 👣 해결 방법 interface Service { void do(); } class RealService1 implements Service { @Override public void do() { System.out.println("Do it By RealService1"); } } class RealService2 implements Service { @Override public void do() { System.out.println("Do it By RealService2"); } } class ServiceProxy implements S..

디자인 패턴 2023.07.19

Observer Pattern - 행위

👣 문제 상황 특정 그룹의 객체들에게 일괄적으로 특정 행위를 하게 만들어야 할 때, 사용함. 예를 들어, 트위터에서 트윗을 작성하면 팔로워들의 피드에 해당 트윗을 띄워야 함. 목적 : 객체 그룹의 특정 행위 실행. 👣 해결 방법 public interface Publisher { public void add(Observer observer); public void delete(Observer observer); public void notifyObserver(); } public interface Observer { public void update(String arg); } public class PublisherImpl implements Publisher { private List observers..

디자인 패턴 2023.07.19

Strategy Pattern - 행위

👣 문제 상황 특정 클래스의 메서드를 자주 변경해야 하는 경우가 존재할 수 있다. 물론 해당 행위를 미리 규정한 클래스를 새롭게 정의해도 괜찮다. 하지만 해당 패턴은 굳이 새롭게 클래스를 모두 만들기보다 딱 메서드의 행위만 새롭게 정의하고 싶을 때, 사용할 수 있다는 장점이 있다. 목적: 특정 메서드의 유연성 향상 👣 해결 방법 interface SortingStrategy { void sort(int[] numbers); } class BubbleSortStrategy implements SortingStrategy { @Override public void sort(int[] numbers) { // Bubble Sort 구현 } } class QuickSortStrategy implements So..

디자인 패턴 2023.07.19