전략 패턴(Strategy Pattern)
·
개발지식/디자인패턴
시작하며안녕하세요. 개발자 stark입니다!개발을 하다 보면 동일한 기능을 다양한 방법으로 구현해야 하는 상황이 종종 있습니다. 이때 전략 패턴(Strategy Pattern)을 사용하면 코드 구조를 유연하게 하고 재사용성을 높일 수 있습니다. 이번 포스팅에서는 전략 패턴의 개념부터 시작해서 간단한 자바 코드 예제와 스프링 기반 예제까지 살펴봅시다. 디자인 원칙인 '개방-폐쇄 원칙(OCP)'과 '전략 패턴'의 연관성도 함께 설명하여, 자바 백엔드 개발자뿐만 아니라 개발에 입문하시는 분들에게도 도움이 되었으면 좋겠습니다. 전략 패턴의 정의와 목적 (OCP와의 관련성)전략 패턴은 알고리즘 집합을 정의하고 각각을 캡슐화하여, 이들 알고리즘을 상호 교체 가능하게 만드는 디자인 패턴입니다. 쉽게 말해, 실행 시..
데코레이터 패턴 (Decorator Pattern)
·
개발지식/디자인패턴
데코레이터 패턴이란?데코레이터 패턴(Decorator Pattern)은 객체지향 설계에서 기존 객체의 기능을 수정하지 않으면서 새로운 기능을 동적으로 추가할 수 있게 해주는 구조적 디자인 패턴입니다. 즉, 클래스의 코드를 변경하거나 상속을 통해 서브클래스를 만들지 않고도, 특정 객체에만 새로운 행동을 붙일 수 있습니다 (다른 동일한 클래스의 객체들에는 영향을 주지 않음). 이는 단일 책임 원칙과 개방-폐쇄 원칙을 잘 지원하는데, 각 기능을 별도 클래스로 분리하면서도 기존 코드를 수정하지 않고 확장이 가능하기 때문입니다. 데코레이터 패턴은 상속을 사용한 확장에 대한 유연한 대안입니다. 상속은 컴파일 시점에 정적으로 기능을 추가하며 해당 변경이 그 클래스를 사용하는 모든 인스턴스에 영향을 줍니다. 반면 데코..
옵저버 패턴(Observer Pattern)
·
개발지식/디자인패턴
시작하며안녕하세요. 개발자 stark입니다!실무에서 이벤트를 설계하다 보면 동료들과 느슨한 결합이나 의존성에 대한 얘기를 많이 하게 됩니다. 저는 이런 대화를 할 수 있다는 것은 이벤트를 활용하는 방식이 아키텍처에서는 굉장히 중요한 역할을 하기 때문이 아닐까 싶은 생각이 들어서 이벤트에 대해서 열심히 공부를 해봤습니다. 그러던 도중 이벤트를 활용하는 게 옵저버 패턴과 관련이 있다는 것을 알게 되었고 좀 더 깊이 알고 싶다는 생각이 들어 정리를 하면서 포스팅을 작성하게 되었습니다. 앞으로 여러 디자인 패턴들을 차근차근 정리해 나갈 예정이니 재미있게 봐주셨으면 좋겠습니다.  옵저버 패턴이란?옵저버 패턴(Observer Pattern)은 하나의 객체 상태 변화가 관련된 여러 객체에 자동으로 전달되어 각 객체가..
전략 패턴(Strategy Pattern)이란?
·
개발지식/디자인패턴
전략 패턴을 알아보자 1. 전략 패턴이란?전략 패턴이란?전략 패턴은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 하는 디자인 패턴이다. 이를 통해 알고리즘을 사용하는 클라이언트 코드에 영향을 주지 않고 알고리즘을 독립적으로 변경할 수 있다. 전략 패턴의 구성 요소Strategy 인터페이스알고리즘을 정의하는 공통 인터페이스다.특정 작업을 수행하기 위한 메서드를 선언한다.Concrete StrategyStrategy 인터페이스를 구현하는 구체적인 알고리즘 클래스다.다양한 알고리즘이나 행동을 구현한다.ContextStrategy 객체를 가지고 있으며, 클라이언트로부터 요청을 받아 Strategy에 작업을 위임한다.전략을 설정하고 실행하는 역할을 한다.전략 패턴의 작동 방식클라이언트가 C..
커맨드 패턴(Command Pattern)이란?
·
개발지식/디자인패턴
Command 패턴 알아보기 1. Command 패턴이 왜 필요하고 어떤 장점을 제공할까?지금부터 레스토랑 주문 시스템을 예로 들어, Command 패턴이 왜 필요하고 어떤 장점을 제공하는지 알아보자.  Command 패턴을 사용하지 않은 경우먼저, Command 패턴을 사용하지 않고 간단한 주문 시스템을 구현해 보자.// OrderSystem 클래스: 주문 처리 담당public class OrderSystem { public void placeOrder(String item) { System.out.println(item + " 주문이 접수되었습니다."); } public void cancelOrder(String item) { System.out.println..
가볍게 알아보는 디자인 패턴 - 퍼사드 패턴(Facade Pattern)
·
개발지식/디자인패턴
퍼사드 패턴에 대해 가볍게 알아보자 1. Facade Pattern이란?1-1. 퍼사드 패턴이란퍼사드(Facade) 패턴은 복잡한 시스템을 쉽게 사용할 수 있도록 도와주는 디자인 패턴이다. 예를 들어, 컴퓨터를 켜면서 하는 일들을 생각해 보자. 전원 버튼을 누르는 것만으로 운영체제가 시작되고, 여러 프로그램이 실행되고, 네트워크에 연결되는 일들이 일어난다. 이 모든 복잡한 과정들을 단 한 번의 버튼 클릭으로 간단하게 처리할 수 있는 것처럼, 퍼사드 패턴은 프로그래밍에서도 비슷한 역할을 한다. 1-2. 퍼사드 패턴의 역할퍼사드 패턴은 복잡한 서브시스템의 기능들을 간단한 인터페이스로 제공함으로써 클라이언트 측 개발자가 내부 로직의 복잡성을 몰라도 되게 한다. 이 패턴은 여러 복잡한 클래스들과의 직접적인 상호..
가볍게 알아보는 디자인 패턴 - 팩토리 메서드 패턴(Factory Method Pattern)
·
개발지식/디자인패턴
팩토리 메서드 패턴에 대해서 알아보자   1. 팩토리 메서드 패턴이란?팩토리 메서드 패턴은 객체 생성을 추상화하고 캡슐화하는 디자인 패턴이다. 스프링에서 이 패턴은 BeanFactory와 ApplicationContext를 통해 구현된다. 객체를 직접 생성하는 대신, 팩토리를 통해 객체를 요청하면, 이 팩토리가 객체 생성의 복잡성을 숨기고 필요한 객체를 제공한다. 1-1. 팩토리 메서드 패턴의 기본 구조  1. 정의팩토리 메서드 패턴은 객체의 생성 과정을 서브 클래스에 위임하는 디자인 패턴이다. 이를 통해 클라이언트 코드는 구체적인 클래스의 인스턴스화 과정을 알 필요 없이, 객체를 생성할 수 있다.  2. 구현 방식이 패턴은 팩토리 메서드를 정의하여, 이 메서드가 객체를 생성하고 반환하는 역할을 한다. ..
가볍게 알아보는 디자인 패턴 - 싱글톤 패턴(Singleton Pattern)
·
개발지식/디자인패턴
스프링에 적용된 싱글톤 패턴에 대해서 간단히 알아보자 1. 싱글톤 패턴의 구조 이해하기 1-1. 스프링 컨테이너 이해하기스프링 컨테이너는 ApplicationContext를 통해 정의된다. 이 컨테이너는 IoC(Inversion of Control) 또는 DI(Dependency Injection) 컨테이너로도 알려져 있다. 주요 역할은 애플리케이션 내의 빈(Bean)들을 인스턴스화, 구성, 관리하는 것이다. 이 과정을 통해 개발자는 객체의 생성과 생명주기에 대해 걱정할 필요 없이 비즈니스 로직에 집중할 수 있다.1-2. IoC 컨테이너 (스프링 컨테이너)의 중요성IoC 컨테이너는 객체의 생성과 의존성 주입을 담당한다. 이는 객체 간의 의존성을 느슨하게 만들어, 코드의 재사용성과 테스트 용이성을 향상시킨..