JAVA/Design Patterns: 52개의 글
어댑터 패턴 (Adapter Pattern) 어댑터는 변환기로, 서로 다른 두 인터페이스 사이에 통신이 가능하게 합니다. 프로그램에서 어댑터 패턴 디자인이란 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 인터페이스로 변환하고자 할때 사용합니다. ■ 문제 A라는 사람이 B파서를 통해 HTML 문서를 파싱하는 어플리케이션을 만들었습니다. 그러던중 B파서 말고도 다른 종류의 문서도 파싱 할 수 있는 C파서도 필요하게 되었습니다. 살펴보니 C파서와 B파서가 제공하는 인터페이스는 약간의 차이가 있습니다. 이러한 상황에 대해 Adapter Pattern을 적용하여 문제를 해결 해보겠습니다. ■ B파서만 사용하는 기존코드 public class Parser_B { private String st; publi..
Builder 패턴 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴입니다. ■ 빌더 패턴(Builder Pattern) 사용 이유 public class PersonInfo { private String name; private int age; private String email; private String number; public PersonInfo(String name,int age,String email,String number) { this.name = name; this.age = age; this.email = email; this.number = number; } } 다음과 같이 사람의 정보를 저장하는 Pe..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/c1EluP/btrnBaMvEX6/gF17g7QNtdVaRpfXKrrkgK/img.png)
Template Method Pattern 상위 클래스에서 처리의 흐름을 제어하며, 하위 클래스에서 처리의 내용을 구체화한다.여러 클래스에 공통되는 사항은 상위의 추상 클래스에서 구현하고, 공통 되지 않는 부분에 대한 상세 구현은 하위 클래스에서 구현한다. 예제 햄버거를 만드는 클래스를 설계 해보겠습니다. 햄버거 종류에는 치즈버거와 불고기버거가 있을 수 있습니다. 1. 빵을 올린다. 2. 패티를 올린다. 3. 양상추를 올린다. 4. 빵을 올린다. 1. 빵을 올린다. 2. 패티를 올린다. 3. 치즈를 올린다. 4. 빵을 올린다. 각 버거는 위에 나온 순서대로 만들어 집니다. 1, 2, 3번 같은 경우는 중복되는 내용입니다. 즉 1, 2, 3 번의 경우 상위 추상 메서드로 올려주고 3번 같은 경우에는 상위에..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/dZCN1X/btrnByGg0ui/EAZkMbenHSp06CV5WY57K0/img.png)
Singleton 패턴 디자인 패턴에서 싱글톤 패턴은 특정 클래스에 대해 new 연산자로 생성되는 인스턴스를 Stack 메모리에 한 번만 할당하여 이후에 new 연산자를 통한 객체 생성 요구에 대해서는 최초에 생성되었던 객체를 반환하는 디자인 패턴입니다. 즉 프로그램의 특정 클래스에 대한 유일 객체를 보장하는 패턴이라고 볼 수 있습니다. 일반적으로 앱에서 공통적으로 사용하는 데이터 클래스에 대해서 이와 같은 싱글톤 패턴 형식으로 작성하게 됩니다. 객체 생성을 위한 new 연산자는 해당 클래스의 인스턴스를 stack 메모리에 저장하게 되는데 싱글톤 패턴이 적용된 경우에는 new 사용을 통한 무분별한 인스턴스 생성을 막기 때문에 메모리 낭비를 방지할 수 있습니다. singleton.class public c..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/1wiFB/btrnvN58TC5/U1Dh8vL1zmV3ASx2gK883K/img.jpg)
Strategy Pattern 알고리즘의 인터페이스를 정의하고, 각각의 알고리즘은 캡슐화하여 동적으로 교체 사용 가능하도록 구현하는 디자인 패턴입니다. 클라이언트와는 독립적으로 구현되기 때문에 새로운 알고리즘을 추가하거나 기존의 알고리즘을 쉽게 변경이 가능합니다. Strategy Pattern Structure ● Context - 실제 각각의 알고리즘에 대한 인스턴스를 가짐 ● Interface - 각각의 알고리즘이 가져야 할 공통인터페이스 정의 ● Algorithm1,Algorithm2 - 실제 인터페이스 구현. 각각의 알고리즘을 프로그래밍 예제코드 Person_Interface은 전략패턴의 구조 중에 Interface에 해당됩니다. 알고리즘들이 공통적 으로 정의해야 할 인터페이스를 정의합니다. 즉 ..
MVC 모델2 애플리케이션을 모델(Model), 뷰(View), 컨트롤러(Controller)라는 세 가지 역할을 나눔 IPO에 견주어보면 입력 - 컨트롤러 / 처리 - 모델 / 출력 - 뷰에 해당하지만, 컨트롤러에 전체의 흐름을 제어하는 역할이 부여되었다는 점이 다름 MVC 모델을 기반으로 삼으면 로직과 디자인의 분리를 구현할 수 있음. 로직은 모델, 디자인은 뷰가, 컨트롤러는 접착제 역할 IPO : 입력(Input), 처리(Process), 출력(Output)이라는 컴퓨터 처리의 기본적인 흐름 구성요소 모델(Model) 애플리케이션의 처리 부분과 그와 관련된 정보의 보존을 담당 화면에 대한 입출력같은 부분에는 일절 관여하지 않음 뷰(View) 모델의 결과를 화면에 표시하는 역할을 담당 처리 결과는 모..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/npitZ/btq0iBAJL6y/pPL5ttm2ZrW9uHsoFl9yOK/img.png)
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 이미지 변환이나 디코딩과 같이 비용이 높은 경우에 가상프록시 패턴이 유용할 것 같고, 엑세스 관련 기능은 자주 사용되는 부분이기 때문에 보호프록시 패턴은 항상 필요로 할 것 같다. 장점 1) 가상 프록시 : 시간이 오래 걸리는 프로세스가 있다면 생성시 동작하도록 하던 로직을 함수를 호출하여 실행할 때 동작하도록 미뤄둘 수 있습니다. 따라서 프로그램이 시작되는 경우에는 오..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/blmkjE/btq0mwSLi24/AghKZk7KYBbKRryIimNOf1/img.png)
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 게임이나 지도처럼 동일한 객체를 특정 속성만 바꿔서 재사용이 가능한 경우에 적용하면 큰 효과를 기대할 수 있는 패턴인 것 같다. 장점 - 객체의 수를 줄입니다. - 객체가 지속되는 경우에 필요한 메모리 및 저장장치의 양을 줄입니다. 사용시기 - 응용프로그램이 많은 수의 객체를 사용하는 경우 - 물체의 수량으로 인해 저장비용이 높은 경우 - 응용프로그램이 객체 ID에 의존..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/bywlwn/btq0oLhkRb6/gQKa83xVvRvwPBh8bd2g90/img.png)
구조패턴 목록 어댑터 패턴 (Adapter Pattern) 브릿지 패턴 (Bridge Pattern) 컴포짓 패턴 (Composite Pattern) 데코레이터 패턴 (Decorator Pattern) 퍼사드 패턴 (Facade Pattern) 플라이웨이트 패턴 (Flyweight Pattern) 프록시 패턴 (Proxy Pattern) 사용하는 객체를 배려한 패턴이라고 생각한다. 각각의 단위기능을 사용자가 더 편리하게 이용할 수 있도록 하려면 인터페이스를 어떤 형태로 제공해야 하는지를 많이 고민해야 할 것 같다. 장점 - 하위 시스템 구성요소의 복잡성으로부터 클라이언트를 보호합니다. - 서브 시스템과 클라이언트 사이의 느슨한 결합을 촉진합니다. 사용시기 - 복잡한 하위 시스템에 간단한 인터페이스를 제공..