들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 수강하며 작성한 글입니다. State 패턴 GOF : 객체 내부 상태 변경에 따라 객체의 행동이 달라지는 패턴. 특정한 상태에 따라 행동이 달라지는 객체들에게 적용할 수 있는 패턴임. 예를 들면 리모컨은 TV가 켜져있는지, 꺼져있는지에 따라서 버튼을 눌렀을 때 다르게 동작함. 이런 경우 If ~ Else로 떡칠되게 됨. 이런 코드들을 읽기 어렵기 때문에 State에 따른 If - Else 문을 각 클래스로 분리하는 것임. 디자인 패턴 Component Context 상태를 관리하는 클래스임. 이를 위해 상태 변경 메서드도 추가되어야 함. 컨텍스트 객체가 원래 담고 있어야 하는 정보들을 가지고 있는 클래스. State 공통 인터페이스로 만들어 둔 것임...
들어가기 전 이 글은 백기선님의 인프런 강의를 공부하며 작성한 글입니다. 템플릿 메서드 패턴 GOF : 알고리즘 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법 특정 알고리즘을 템플릿으로 제공함. 이 템플릿을 이용하는 구체적인 방법을 상속받는 클래스가 정하는 형태임. Component AbstractClass 추상 메서드를 가지고 있어야 함. 템플릿 메서드 역할을 하는 메서드가 있어야 함. 추상 메서드를 템플릿 안에서 호출하도록 함. ConcreteClass : 추상 메서드만 구현하도록 함. 클라이언트는 Concrete Class를 구현해서 이용하면 됨. 패턴이 필요한 상황 // +로 구현해주세요. public class FileProcessor { private String path; ..
들어가기 전 이 글은 백기선님의 GOF 디자인패턴 강의를 복습하며 작성한 글입니다. 프록시 패턴 프록시 패턴 GOF : 특정 객체에 대한 접근을 제거하거나 기능을 추가할 수 있는 패턴 초기화 지연, 접근 제어, 로깅, 캐싱 등에 사용 가능함. Component Subject, Proxy가 있음. Subject가 인터페이스 → implements로 프록시 Subject가 클래스 → 상속으로 프록시. 특정한 객체의 오퍼레이션이 호출되면, 프록시 객체를 먼저 통과한 후에 오퍼레이션이 수행됨. 클라이언트는 프록시 객체를 통해서 원래 사용하려던 객체를 사용함. 기본 코드 // 클라이언트 코드 public class Client { public static void main(String[] args) { GameS..
들어가기 전 이 글은 백기선님의 GOF 디자인패턴 강의를 복습하며 작성한 글입니다. 파사드 패턴 GOF : 복잡한 서브 시스템 의존성을 최소화 하는 방법 파사드는 건물의 전면을 의미함. 우리는 전면만 보니 내부가 어떻게 되어있는지 알 수 없음. 예를 들면 전기, 파이프 배관을 모름. 소프트웨어 관점에서 말하면 파사드를 이용해 모든 디테일한 부분을 숨기는 것임. 즉, 서브 시스템의 의존성을 Facade 안쪽으로 숨길 수 있음. 파사드 패턴을 이용해 서브 시스템 의존성을 파사드로만 집중 시킬 수 있음. 서브 시스템의 동일한 기능을 사용하는 클라이언트가 많은 경우 도움이 될 수 있음. 서브 시스템의 기능을 사용하기 위한 절차에 대해 클라이언트가 몰라도 됨. (메일을 보내려면 세션부터 만들어야 한다던지) 예제 ..
들어가기 전 이 글은 백기선님의 GOF 강의를 복습하며 작성한 글입니다. 옵저버 패턴 GOF : 다수의 객체가 특정 객체 상태 변화를 감지하고 알림을 받는 패턴 Component Subject 여러 Observer를 가지고 있음. Observer를 등록 / 해지할 수 있는 기능 제공. Subject는 자신의 상태를 변경할 수 있는 메서드를 제공함. Subject는 상태가 변경되면, 자신에게 등록된 Observer를 순회하면서 Observer가 제공하는 메서드를 모두 호출함. (알림) Observer 인터페이스 하나 제공함. Observer가 이벤트를 받아서 해야할 일을 정의함. 옵저버 패턴을 적용하면 Pub - Sub 패턴을 쉽게 구현할 수 있음. Polling 구조를 적용하기 어려울 때, Pub - S..