디자인 패턴(8)
-
Strategy Pattern
Strategy Pattern이란 Strategy Pattern이란 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 젼략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. 간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다. Strategy Pattern 예를 들어, 기차와 버스 클래스가 있고, 이 두 클래스는 Movable 인터페이스를 구현하다고 가정하겠습니다. 그리고 버스와 기차 객체를 사용하는 Client도 있습니다. public inte..
2024.01.10 -
Composite Pattern
Composite Pattern Composite Pattern이란 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴입니다. 즉, 전체-부분의 관계를 갖는 객체들 사이의 관계를 정의할 때 유용합니다. 또한 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수 있습니다. Component: 모든 표현할 요소들의 추상적인 인터페이스 Leaf: Component로 지정된 인터페이스를 구현한 객체 Composite: Component 요소를 자식으로 가지고 Component 요소를 관리하기 위한 메소드들을 구현한 객체Composite Pattern의 예시 예를 들어 간단한 파일 시스템을 구현해보겠습니다. 먼저 필요한 것은 파일입니다. File.ja..
2020.07.03 -
Factory Pattern
1. Factory Method Pattern Factory Method Pattern은 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 인스턴스를 생성할지는 서브 클래스에서 결정하도록 하는 디자인 패턴입니다. Factory Method Pattern은 사용하는 인스턴스를 직접 생성하지 않고 팩토리 클래스를 통해 인스턴스를 생성합니다. 이렇게 객체의 생성과 사용을 분리함으로써 효율적으로 코드를 제어할 수 있고 결합도를 낮춰 유지보수가 용이합니다. 아래의 예제와 같이 생성합니다. Suit public abstract class Suit{ public abstract String getName(); } Suit의 구현 클래스 // SpaceSuit public class SpaceSuit extends ..
2020.05.06 -
Chain Of Responsibility
1. Chain Of Responsibility Chain Of Responsibility란 요청을 처리할 수 있는 기회를 하나 이상의 객체에 부여함으로써 요청하는 객체와 처리하는 객체 사이의 결합도를 제거하는 패턴입니다. 요청을 해결할 객체를 만날 때까지 객체 고리를 따라서 요청을 전달합니다. 일반적으로 처리할 수 있는 모든 객체들을 고리로 묶고 맨 처음 객체에게 전달하여 처리하지 못하면 다음 객체로 넘기는 방식으로 진행됩니다. 아래를 예제를 통해 어떻게 구현되는지 확인할 수 있습니다. 예제를 보면 숫자를 요청으로 전달했을 때, 객체 고리를 따라서 데이터를 전달합니다. 체인 public interface Chain { public abstract void setNext(Chain nextInChain)..
2020.05.02 -
Observer Pattern
1. Observer Pattern Observer Pattern이란 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성하는 패턴입니다. 데이터의 변경이 발생했을 경우, 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용합니다. 위의 이미지를 보면 Subject 인터페이스의 구현체의 상태에 변화가 있을 때, Observer 들에게 notify를 통해 상태 변화를 알려주는 것을 의미합니다. 2. ObserverPattern의 예시 예를 들어, 어떤 유저와 채팅 방이 있다고 가정하겠습니다. 유저는 채팅방에 말할 수 있고, 채팅을 받을 수 있습니다. 그리고 유저는 채팅방, 게임방에 임장을 해 각 채팅방에 메시지를 전달하는 상황입니다. 유저 publ..
2020.05.02 -
Template Method Pattern
Template Method Pattern이란 Template Method Pattern이란 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메소드의 코드 중복을 최소화하는 패턴입니다. 동일하게 사용하는 기능은 부모 클래스에서 정의하면서 확장 / 변화가 필요한 부분만 자식 클래스에서 구현할 수 있도록 합니다. 구현은 아래의 게임 속 직업별 클래스를 구현한 예제를 확인해 봅니다. 전사 class Warrior { void prepareWeapon() { System.out.println("검을 닦습니다."); } void prepareArmor() { System.out.println("방어구를 착용합니다."); } } 궁사 class Archer { void prepareWeapon() { Sy..
2020.05.01