본문 바로가기
반응형

java17

Strategy Pattern, 전략 패턴 전략 패턴이란?우리가 슈퍼를 갈 때 버스 타고 가거나, 걸어가거나, 자전거를 타고 가는 등의 여러 가지 방법이 있다.이러한 방법으로 갈때의 길을 미리미리 알아두고 그때그때 끌리는 것으로 가곤 한다.이처럼 프로그래밍에서도 여러가지 방법을 구현해 놓고 클라이언트가 런타임 시기에 알맞은 전략을 사용할 수 있도록 하는 것이 바로 전략 패턴이다. 전략 패턴을 사용했을 때의 장점코드 중복을 줄일 수 있다.기존 코드없이 새로운 전략을 추가할 수 있다.런타임 시에 전략을 선택할 수 있다. 언제 전략 패턴을 고려해야 하는가?여러 전략 중 한 가지의 전략을 선택해야 할 때전략 알고리즘을 자주 변경 해야 할 때상태 패턴을 사용했을 때의 단점전략이 많아지면 코드가 매우 많아질 수 있다는 단점 (복잡도 상승)클라이언트에서 전략.. 2024. 10. 17.
Memento Pattern, 메멘토 패턴 메멘토 패턴이란? 객체 내부의 상태를 공개하지 않으면서 외부에 저장하여 객체의 상태를 이전 상태로 복원할 수 있도록 해주는 패턴이다. 즉, 캡슐화를 깨트리지 않고 내부 상태를 외부에 저장할 수 있도록 하는 패턴이다. 주로 되돌리기나 상태의 스탭샷에 사용된다! 메멘토 패턴을 사용해야 하는 이유? 객체의 이전 상태를 저장하고, 필요할 때 이 상태로 객체를 복원할 수 있다. 객체 내부 상태에 대한 접근을 제어해서 캡슐화를 유지할 수 있다. 따라서 외부에 객체의 상태를 공개하지 않고 저장하고 복원할 수 있다. 객체의 상태 관리를 단순화한다. 상태를 저장하고 복원하는 작업을 객체 외부에서 수행하여 객체 자체는 상태관리 로직으로부터 자유로워진다. 메멘토 패턴을 언제 사용해야 하는가? 되돌리기 기능을 제공해야 할 때.. 2024. 3. 27.
Mediator Pattern, 중재자 패턴 중재자 패턴이란? 객체들 간의 상호작용을 중재하는 패턴이다. 객체들끼리 직접 통신하는 방식이 아닌 중재자를 통해서 상호작용하도록 하는 방식이다. 항공기 관제탑을 보면 이해할 수 있다. 비행기끼리 통신을 할 수는 있지만 모든 통신을 각자 하게 되면 통신을 받지 못하는 비행기도 생기고, 통신이 매우 난잡해질 것이다. 그래서 모든 비행기들은 관제탑을 통해서 통신을 하면서 조율을 하게 된다. 중재자 패턴을 왜 사용해야 하는가? 객체 간의 결합도를 낮춰준다. 새로운 객체들을 도입할 수 있다. 단일책임원칙을 지켜 유지보수와 재사용을 쉽도록 만든다. 패턴을 언제 사용해야 하는가? 객체들이 서로 복잡하고 강하게 결합되어 있는 경우 객체들간 직접적인 상호작용이 코드를 복잡하게 만들어 유지보수가 어려운 경우 문제점 중재자.. 2024. 3. 7.
Command Pattern, 커맨드 패턴 커맨드 패턴이란? 커맨드를 객체로 만들어서 이를 사용해 나중에 실행하거나, 반복하거나 취소할 수 있도록 하는 패턴이다. 현실에서는 음식점에 손님으로 방문해 주문을 하면 주방에 주문서를 꽂아놓는다. 요리사는 이를 보고 요리를 한다. 주문서에는 음식과 관련된 모든 정보를 가지고 있다. 이때 이 주문서가 커맨드 역할을 하는것 이다. 왜 사용해야 하는가? 클라이언트는 요청을 객체로 표현하기 때문에 수신자에게 직접적으로 의존하지 않게 된다. 실행 취소 및 재 실행 기능을 쉽게 구현할 수 있다. 간단한 커맨드들로 복잡한 커맨드를 조합할 수 있다. 기존의 코드를 건들지 않고 새 커맨드를 추가할 수 있다. 언제 사용해야 하는가? 요청과 수신자를 분리하고 싶을 때 요청의 로깅이 필요할 때 늦게 실행하거나 실행 취소 및 .. 2024. 2. 27.
Chain of Responsibility Pattern, 책임 연쇄 패턴 책임 연쇄 패턴이란? 요청을 사슬처럼 여러 독립적인 핸들러 객체를 순차적으로 지나치면서 각자 가지고 있는 책임을 해결하는 방법이다. 마치 공장에서 각 장치별로 담당하는 부분만 처리하는 것과 같다. 대표적으로 스프링의 필터가 이러한 책임 연쇄 패턴을 이용하고 있다. 왜 사용해야 하는가? 요청의 처리 순서를 제어할 수 있다. 단일 책임 원칙을 지킬 수 있다. (작업하는 각각의 객체들의 책임 분리) 개방/폐쇄 원칙을 지킬 수 있다. (새로운 핸들러추가시 기존 코드 수정하지 않는다. 언제 사용해야 하는가? 요청 처리가 여러 단계로 이루어져야 하는 경우(하지만 요청 유형과 순서들을 미리 알 수 없는 경우) 런타임시에 동적으로 핸들러를 관리해야 하는 경우 핸들러를 특정 순서로 실행해야 하는 경우 구현 예시 (자바).. 2024. 2. 27.
Proxy Pattern, 프록시 패턴 프록시 패턴이란? 객체의 대변인 역할을 하는 객체를 만들어 제공하는 패턴이다. 그렇기에 프록시객체를 통해 접근을 제어하고 요청을 전달하며 전/후 처리를 수행하는 역할을 하게 된다. 예를 들어 우리가 은행에 가서 직접 거래를 하지 않고 ATM이라는 프록시를 통해 거래를 처리하는 것과 같다. 왜 사용해야 하는가? 원래 객체에 대한 접근 제어가 가능하다. 요청의 전처리나 후처리를 수행하여 로깅, 트랜잭션 관리 등의 기능을 추가할 수 있다. 원래 객체의 생성 비용이 높을 경우 프록시를 통해서 필요한 경우에만 객체를 생성하도록 하여 생성 비용을 절감할 수 있다 어떤 경우에 사용하는가? 접근 제어 혹은 전/후처리가 필요한 경우 지연로딩이 필요한 경우(객체의 생성 비용이 높은 경우) 문제점 프록시 객체를 추가해야 하.. 2024. 2. 15.
Composite Pattern, 복합체 패턴 복합체 패턴이란? 컴포지트 패턴 혹은 복합체 패턴이라고 불리는 이 패턴은 객체들을 트리구조로 구성하여 개별객체와 복합 객체를 동일하게 취급할 수 있도록 하는 구조적 디자인패턴이다. 이를 통해서 단일객체와 복합객체를 일관된 방식으로 다룰 수 있게 된다. 왜 사용해야 하는가? 단일 객체와 복합 객체를 동일하게 취급하기 때문에 클라이언트 쪽에서 코드를 일관된 방식으로 사용할 수 있게 된다. 재귀적인 구조로 편리하게 구현할 수 있다. 새로운 단일 객체나 복합 객체를 추가할 때 기존의 코드를 수정하지 않는다. 어떤 경우에 사용해야 하는가? 나무처럼 계층적인 부분-전체 구조를 갖고 있을 때 사용하면 좋다. 예를 들어, 그래픽 요소나, 문서 구조등이 있다. 클라이언트가 일관된 인터페이스로 사용해야 할 때 사용하면 좋.. 2024. 2. 5.
Bridge Pattern, 브릿지 패턴 브릿지 패턴이란? 큰 클래스나 클래스들의 집합을 추상화, 구현을 이용해서 계층구조로 작성하여 독립적으로 개발할 수 있도록 만든 디자인패턴이다. 마치 다리처럼 프로그램의 추상화 부분과 구현 부분을 연결을 해주어 서로 독립적으로 변경하거나 확장할 수 있도록 하는 것이다. 왜 사용해야 하나요? 추상화와 구현 부분을 독립적으로 확장할 수 있다 => 기능을 확장하면서도 기존 코드를 건들지 않는다는 말이다! 특히 복잡한 계층구조에서 이를 활용하면 많은 수의 클래스를 줄일 수 있습니다. 런타임시 구현을 바꿀 수 있는 유연성을 갖게 됩니다. 클라이언트에게 구현부의 변경을 숨길 수 있게 되어 안정성이 증가합니다! 어떤 경우에 사용하나요? 복잡한 클래스의 계층구조를 가지고 있어 많은 수의 클래스가 생겨 추가하거나 변경하기.. 2024. 2. 5.
Adapter Pattern, 어댑터 패턴 어댑터 패턴이란? 어댑터 패턴이란, 디자인패턴 중 구조적 패턴으로 서로 호환되지 않는 인터페이스들을 기존의 코드를 변경하지 않고 연결할 수 있도록 변환하는 디자인패턴이다! 마치 평소에 220V 플러그를 사용하는 우리가 해외로 여행 갔을 때 110V 플러그 '어댑터'를 사용하는 것처럼 기존에 사용하던 것을 변경시키지 않고 어댑터만 추가하여 변경할 수 있도록 해주는 것이다. 왜 사용해야 하나요? 기존 코드를 수정하지 않아 안정성을 유지할 수 있다 기존 코드를 그대로 사용할 수 있기에 개발 시간을 단축할 수 있다 서로 다른 클래스 간에 결합도를 줄여줄 수 있다 어떤 경우에 사용하나요? 이미 존재하고 있는 클래스나 라이브러리를 수정하지 않고 새로운 시스템에서 사용해야 할 때 사용할 수 있다 서로 다른 인터페이스.. 2024. 2. 1.
반응형