들어가기 전 이 글은 인프런 백기선님의 GOF 강의를 공부하며 작성한 글입니다. 전략(Strategy) 패턴 GOF : 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴. 작업을 수행하는 방법이 여러 가지일 때, 각 방법을 개별적인 클래스로 캡슐화한다. 캡슐화 되어 있는 것을 공통된 인터페이스로 추상화 한다. 로직을 수행하는 곳에서는 추상화된 인터페이스만 사용한다. 로직을 수행하는 코드는 바뀌지 않지만, Concrete Strategy만을 갈아끼면서 코드 변경 없이 다른 알고리즘을 실행할 수 있도록 해줌. 적용하면 좋은 경우 파라미터의 값에 따라 If - else 문으로 분기하면서 서로 다른 행위들을 하는 코드는 전략 패턴을 적용하기 좋음. Strategy 패턴을 사용하면, 새로운 종류의 전략을..
들어가기 전 이 글은 인프런 백기선님의 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 안쪽으로 숨길 수 있음. 파사드 패턴을 이용해 서브 시스템 의존성을 파사드로만 집중 시킬 수 있음. 서브 시스템의 동일한 기능을 사용하는 클라이언트가 많은 경우 도움이 될 수 있음. 서브 시스템의 기능을 사용하기 위한 절차에 대해 클라이언트가 몰라도 됨. (메일을 보내려면 세션부터 만들어야 한다던지) 예제 ..