본문 바로가기

Theory36

Factory Method Pattern Factory Method Pattern object를 생성하는 interface를 정의지만 instantiation할 클래스를 subclass에 위임하는 것이다. 어떤 class를 instantiation할지 subclass에서 결정하기 위해서는 object를 어떻게 생성해야 할까? 어떻게 instantiation를 subclass로 위임할 수 있을까? Creator클래스 내부에 object를 직접적으로 생성 할 수 있도록 한다. 이것은 Creator클래스가 특정 object를 승인해주고 이 클래스로부터 독립적으로 instantiation를 변경하는 것은 불가능하게 한다. solution 결합을 느슨하기 위해 Creator Interface를 상속받아 Creator1을 만들고 factoryMethod내.. 2022. 4. 10.
Builder Pattern Builder Pattern 빌더패턴은 복잡한 객체의 구조를 어떻게 더 효율적이게 관리하며, 같은 구조여도 서로 다른 표현으로 객체를 생성 할 수 있을지에 대해서 다룬다. 복잡한 객체의 구조를 분리시켜 같은 구조이지만 서로 다른 표현으로 객체를 생성할 수 있을까? 위 그림과 같이 만약에 new ProductA1(), new ProductB1() 등.. 여러가지 클래스를 특정 Object에서 생성하는 경우 유연함이 떨어진다. 또한, Object도 정의된 생성자로만 객체 생성해야만 한다. Solution 복잡한 object내부를 부분으로 나눠 build object내에서 create할 수 있도록 한다. 그래서 직접 new로 클래스를 생성하기 보다는 build내에서 instantiation하도록 한다. pub.. 2022. 3. 29.
ABSTRACT FACTORY PATTERN ABSTRACT FACTORY PATTERN 의존적이고 연관되어 있는 구조에서 구체적으로 명시되어있는 클래스보다는 인터페이스를 제공하는 것이다. 필수적으로 필요한 객체를 어떻게 독립적으로 생성할까? 연관되고 의존적이지만 객체들의 서로 다른 Family는 어떻게 생성할까? ProductA라는 interface를 상속받아 ProductA1이라는 class를 만들었다. 만약에 client에서 new ProductA1()를 할 경우 어떤 문제가 있을까? interface ProductA가 인스턴스화 되기 전에 ProductA1이 먼저 인스턴스화 된다면 컴파일이나 런타임 중 에러가 날 가능성이 있으므로 직접적으로 ProductA1를 인스턴스하는 것은 회피하는 것이 좋다. Solution 결합도를 낮추기 위해 Cl.. 2022. 3. 27.
ADAPTER PATTERN ADAPTER PATTERNS 이 패턴의 의도는 호환되지 않은 인터페이스를 호환되도록 변경해주는 것이다. 인터페이스 요구사항과 맞지 않을 때 어떻게 재 사용 가능할까? 서로 호환되지 않은 클래스끼리 호환시킬 수 있을까? Adapter가 하는 역활은? Adapter의 역할은 8핀 충전기를 C타입으로 바꾸는 포트라고 생각하면 좋다. Solution 위에서 말한 것 처럼 8핀을 가진 아이폰 객체를 C타입의 충전기를 통해서 충전을 해보자. Interface의 정의 interface로 C타입포트와 8핀 포트를 정의한다. package AdapterPattern; public interface CtypePort { void charge(); } package AdapterPattern; public interfac.. 2021. 7. 22.
SINGLETON PATTERN Sinlgeton pattern 싱글톤 패턴은 "유일한 인스턴스를 생성하고 이것을 global하게 접근할 수 있도록 제공하는 것이다." 싱글톤 패턴은 아래의 2가지 문제에 대해 해결책을 제시해 준다. 1.어떻게 단 한개의 인스턴스를 생성 할 수 있을까? 2.이 유일한 인스턴스를 global하게 접근 할 수 있을까? 싱글톤 패턴은 왜 필요할까? 증권사 시스템을 개발한다고 가정해보자! 한꺼번에 다양한 사람들의 주문이 들어오는데 여러객체가 각 각 처리한다면 어떤 현상이 발생할까? 매도 주문을 100개 밖에 없는데 1000개가 처리되는 기이한 현상이 일어날 것이다. 단 한개의 인스턴스가 처리하게 만든다면 매수 주문을 100개 이상 처리 할 수 없도록 만들 수 있다. Background static 접근 제한자는.. 2021. 7. 20.
Introduction Design Principles 1. Program to an interface, not an implementation ( 구현이 아니라 interface를 프로그램하라! ) 이 디자인 원리는 구현 의존성을 굉장히 줄여준다. Clients는 interface를 참고하고 구현과는 독립적이다. 이것은 구현은 변화 없이 존재하는 clients마다 독립적으로 다양 할 수 있다는 것을 의미한다. 이것은 여기에서 다루는 일반적인 디자인 패턴의 주제이고 한 시스템이 구현의 관점이 아닌 interface의 관점으로 쓰여진다는 것을 보장한다. 결론적으로 clients는 interface에 의존한다. interface를 다양하게 하는 것은 존재하는 clients를 없앨 수 있다. 그러므로 interface는 신중하게 디.. 2019. 6. 8.