들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 추상 팩토리 패턴 GOF : 관련 있는 여러 객체의 패밀리를 생성하기 위해 인터페이스를 제공함. 객체 생성 인터페이스는 AbstractFactory를 통해서 제공됨. ConcreteFactory에서는 관련있는 여러 객체를 제공하는 인터페이스를 구현함. 클라이언트는 ConcreteFactory를 DI 받아서 사용함. 추상 팩토리 패턴 vs 팩토리 메서드 패턴 팩토리 메서드 패턴은 구체적인 객체 생성을 Factory의 하위 클래스로 옮김. 구체적인 객체 추가 시, 확장에 유리함. (단일 객체 생성) 추상 팩토리 패턴은 관련 있는 여러 객체의 패밀리를 생성. 다양한 객체를 동시에 생성해야할 때 유리함. (여러 객체 생성) 추상 팩토리 패..
들어가기 전 이 글은 백기선님의 GOF 강의를 복습하며 작성한 글입니다. 책임 연쇄 패턴 GOF : 요청을 보내는 쪽(Sender)와 처리하는 쪽(Receiver)를 분리하는 패턴임. Sender는 Receiver의 구체적인 타입을 모른채로 요청을 보냄 → Sender / Receiver가 Decoupling 됨. 클라이언트(Sender)는 추상화된 Handler에만 의존하고, Handler 내부에서 ConcreteHandler끼리 체이닝으로 처리됨. 이를 통해 요청을 처리할 수 있는 여러 객체 중 하나가 요청을 처리하도록 한다. Concrete Handler를 분리하면, Handler를 책임 단위로 분리할 수 있음. 단일 책임 원칙 (SRP)를 지키기 편리함. 새로운 Handler가 추가되어도 기존 코..
들어가기 전 이 글은 백기선님의 GOF 디자인 패턴 강의를 복습하며 작성한 글입니다. 방문자 패턴 GOF : 기존 코드를 변경하지 않고 새로운 기능을 추가하는 방법 Double Dispatch를 활용할 수 있음. Double Dispatch는 구체적인 타입을 찾아가는데 두 번의 Dispatch가 발생하는 것을 의미함. Double Dispathc를 활용해서 복잡한 조건 / 타입 체크 코드를 줄여줄 수 있음. (실수할 여지가 더 적어짐) Component Element : 변하지 않는 것 (기능이 변경되지 않는 지점) Visitor : 추가하고 싶은 로직을 담는 곳 (기능이 추가되는 지점) Element는 거의 변하지 않는 코드이며 Visitor에는 새로운 기능이 추가될 수 있다. 구체적인 방법 Eleme..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 브릿지 패턴 GOF : 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴 브릿지 패턴은 둘로 나눈 후, 각각의 계층 구조를 생성, 그리고 연결해서 사용한다에 초점 어댑터 패턴은 상이한 인터페이스를 연결 Design Component Abstraction : 추상적인 부분. 추상적인 로직만 담고 있음. Implmentation : 구체적인 부분. 구체적인 정보를 담고 있음. 예시 동작만 있는 것 - 상태만 있는 것 프론트엔드 - 백엔드 클라이언트는 Abstraction만 사용함. 개념적으로 추상적인 부분 / 구체적인 부분을 나누고 각각의 계층 구조를 각각 발전시켜 나갈 수 있다는 장점이 있다. 예를 들어 Refined Abstrac..
들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 복습하며 작성한 글입니다. 데코레이터 패턴 GOF : 기존 코드를 변경하지 않고 부가적인 기능을 추가하는 패턴 데코레이터 패턴은 Delegation을 이용해 런타임에 기능 추가함. (상속을 사용하지 않아 더 유연함) 자주 변하는 것 : ConcreteDecorator (기능이 추가됨) 덜 변하는 것 : ConcreteComponent 상속으로 기능 확장을 하려고 할 때 상속의 한계점 때문에 발생하는 문제들이 있다. 이런 문제들은 Delegation을 이용해 해결할 수 있다. (즉, 데코레이터 패턴) 기본 기능 : 메세지 전송 상속 클래스 A : 메세지 스팸 필터링 기능 상속 클래스 B : 메세지 로깅 기능 만약 A,B 기능을 둘다 쓰고 싶으면? → 다..