본문 바로가기

공부/디자인패턴8

Bridge Pattern (브릿지 패턴) Bridge Pattern (브릿지 패턴) 브릿지 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 bridge 처럼 연결하는 역할을 한다. 구현부에서는 추상 계층을 분리하여 독립적인 변경이 가능하도록 한다. Example 1 TV 모델에 상관없이 동작하는 만능 리모컨을 개발한다고 하자. 리모컨 자체는 똑같이 추상화 부분을 바탕으로 하지만 TV 모델마다 다른 구현이 들어가야 한다. 이 때 리모컨의 기능이 추가되면 RemoteControl을 상속 받는 모든 클래스가 변경이 되어야 한다. 여기서 우리는 TV도 바뀔 수 있고, 리모컨도 바뀔 수 있을 때에 대한 상황을 고려해야 한다. 브릿지 패턴을 사용하면 아래와 같이 기능 부분과 구현 부분을 서로 다른 클래스 계층 구조로 분리할 수 있다. 왼쪽은 리모컨을 나.. 2023. 3. 24.
Builder Pattern (빌더 패턴) Builder Pattern (빌더 패턴) Builder Pattern은 객체 생성 시 복잡한 과정을 간소화 하기 위한 디자인 패턴 중 하나이다. 이 패턴은 객체의 생성과정을 단계별로 분리하고, 이 단계들을 수행하는 Builder 클래스를 만들어 객체를 생성한다. 따라서 Builder 패턴에서 객체를 생성하는 역할을 담당하는 Builder 클래스는 크게 두 가지 유형의 인터페이스를 가져야 하는데, 하나는 객체의 각 부분을 생성하기 위한 인터페이스이고, 다른 하나는 부분별로 생성된 것들을 조합해서 전체 객체를 구성한 뒤 이를 return 해주기 위한 인터페이스 이다. Structure Builder : Product을 생성하는 Abstract Interface 이다. ConcreteBuilder : 구체 .. 2023. 3. 23.
Singleton Pattern (싱글톤 패턴) Singleton Pattern (싱글톤 패턴) Singleton Pattern은 유일하게 하나의 인스턴스만 존재하도록 보장하며, 생성된 인스턴스는 전역변수를 참조하는 것 처럼 어디서든 참조할 수 있다. Implementations Coin 인스턴스는 private static으로 선언하고, 외부에서는 getInstance()를 통해서만 사용할 수 있도록 한다. public class Coin { private static final int ADD_MORE_COIN = 10; private int coin; private static Coin instance = new Coin(); // eagerly loads the singleton private Coin() { // private to preven.. 2023. 2. 3.
디자인 패턴 개발자5의 이야기 약 15년간 개발자로 있으면서 개발자에게 중요하다고 생각하는 몇 가지 중 하나를 꼽으라면 바로 이다. 사실 나는 기억력이 매우 나쁜 편이라 아직도 패턴 이름을 다 매칭 시키지 못한다. 어떤 구현에 들어갈 때 ㅇㅇ패턴을 사용하면 좋을 것 같군, 혹은 코드를 보고 ㅇㅇ패턴을 사용했군. 이라고 말하지 못하지만, 중요한 것은 상황에 맞는 적절한 패턴을 찾아 구현할 수 있으면 된다고 생각한다. 우리가 구현하는 많은 코드들은 엄청나게 패턴을 사용하고 있지만 실제로 패턴을 사용하는지 조차 인지하지 못하고 사용하는 경우가 많다. 사실 인지할 필요가 없이 개발하다보면 그냥 이렇게 구현해야겠다. 라고 떠오르는 경우가 대부분이므로 이부분이 문제라고 말하고 싶은 것은 아니다. 어쨋든, 디자인 패턴에 대해 한.. 2023. 2. 3.
Factory Method Pattern (팩토리 메소드 패턴) Factory Method Pattern (팩토리 메소드 패턴) 부모클래스에서는 객체 생성의 인터페이스만 제공하고, 구체적인 객체 생성은 자식 클래스에서 한다. 즉, 자식 클래스가 어떤 객체를 생성할 지 결정한다. 이를 이용하면 기존코드를 수정하지 않고(인터페이스 동일) 인스턴스를 생성하는 부분을 확장시킬 수 있다. 팩토리 메소드 패턴은 "생성"에 사용된다는 점만 다를 뿐 궁극적으로는 템플릿 메소드 패턴과 동일하다. Structure Creator : 부모 클래스로 객체 생성 인터페이스를 제공한다. ConcreateCreator : Creator를 상속받는 구체 클래스로 실제 인스턴스 생성을 수행한다. Product : ConcreateCrator에 의해 생성되는 결과물이다. 확장성을 위해 Product.. 2023. 2. 2.