코드 디자인 패턴 (11) 썸네일형 리스트형 [java & 디자인 패턴] Strategy 패턴 정리 개념객체가 선택할 수 있는 작업 알고리즘을 몇몇 클래스 계층에서 정의하고 런타임에 동적으로 선택할 수 있는 디자인 패턴구현 클래스에서 알고리즘 군을 정의하고 캡슐화컨텍스트 클래스에서 구현 클래스를 상호 교체 및 선택할 수 있는 방식클라이언트 클래스는 컨텍스트 클래스의 추상화 메서드를 통해서 구현 클래스의 알고리즘을 선택한다.전략 패턴의 주 목적은 행동을 캡슐화하고, 동적으로 알고리즘을 변경하는 기능을 넣는 것이다. 구현1Strategy (전략)알고리즘을 정의하는 인터페이스public abstract class ABSdatabase { protected String DB; public abstract void connectDB(); public void insert(int row) { System.out.. [java & 디자인 패턴] Bridge 패턴 정리 개념하위 구상 클래스에 무언가를 추가하는 경우, 크게 두 가지 경우가 있다.추상화 클래스 계층 | 새 기능을 추가하는 부분구현 클래스 계층 | 추상화된 메소드에서 실제로 호출되는 기본 단위 작업 로직브릿지 패턴은 클래스의 추상화 계층과 구현 계층을 분리해서 각자가 독립적으로 변형이 가능하도록 한다.이 방법은 상속 대신 컴포지션(래핑)을 사용하여 구현을 위임하며 추상화 계층은 구현 계층에 대한 참조를 통해 구현 계층의 메서드를 호출합니다. 장점느슨한 결합 | 추상화 계층과 구현 계층을 분리함으로써 가독성이 향상되고, 어느 한쪽을 변형할 때 다른 한쪽은 독립적이다. 따라서 복잡한 시스템에서 각 기능과 추상화 부분을 유지보수할 때 유리하다.유연성 | 추상화를 위한 구현 메소드의 조합이 비교적 자유로워진다. 단.. [java & 디자인 패턴] Decorator 패턴 정리 개념이 패턴은 객체의 동작을 동적으로 추가하기 위해 사용한다.기본적으로 자바는 클래스간에 상속으로 확장 방식을 지원하지만 단일 상속이 중심이라 한계가 존재하는데, 이 패턴은 이런 문제를 해결해줄 수 있다. 장점유연한 기능 확장(상속 대체): 객체의 기능을 동적으로 추가하거나 변경하는 유연성 제공코드 재사용성 증가: 여러 데코레이터를 조합하여 다양한 기능을 재사용할 수 있습니다.동적 결합 : 클래스 상속처럼 컴파일 시점에 확장이 아니라 런타임 후 동적으로 확장 가능단점많은 객체 생성 | 데코레이터 패턴은 많은 추가 객체 및 인스턴스를 늘리며 setter도 복잡하여서 코드가 많아진다. 그래서 팩토리 패턴이나 빌더 패턴과 같이 사용한다.디버깅 어려움 | 많은 데코레이터가 중첩되면 디버깅이 어려워진다. 구상 구.. [java & 디자인 패턴] Facade 패턴 정리 개념객체 지향 프로그래밍의 관점에서 객체들은 재사용을 위해 최소 단위로 분리된다. 클라이언트의 관점에서 이들 중 일부 클래스는 인터페이스 작동이 복잡하여 코드 작성 과정에서 강한 결합 문제가 발생하거나 함께 사용해야 하는 클래스를 일일히 신경쓰게 만든다. 파사드 패턴은 이런 문제, 클라이언트에서 최소 단위 클래스 사용의 추상화를 위해 사용한다.그 방식은 최소 단위 클래스의 사용조합을 일종의 클래스 메서드로 정의한다. 구현서브시스템 클래스파사드 패턴에서 실제로 작동하는 최소 단위 로직의 클래스다.public class Computer { private boolean turnOn; public void turnOn() { this.turnOn = true; System.out.println("컴퓨터 .. [java & 디자인 패턴] Adapter 패턴 정리 기본 개념특정 인터페이스 기반의 클래스를 사용하다보면 호환되지 않은 다른 인터페이스의 클래스를 함께 사용해야 할 때가 있다. 이런 경우, 두 인터페이스를 수정하거나 클라이언트 측의 사용 코드를 수정해야할 수 있는데, 이는 기존에 잘 작동하던 코드에서 버그를 일으킬 수 있고 리팩토링 비용을 발생시킨다.어댑터 패턴은 이처럼 호환되지 않는 두 클래스 혹은 클라이언트 코드 간에 중간 역할을 하는 클래스를 삽입한다.이 패턴은 wrapper 패턴이라고도 하는데, 서로 다른 클래스나 인터페이스를 감싸서 새 클래스를 만드는 방식이기 때문이다.종류 클래스 기반 어댑터 패턴(상속 사용) 인스턴스 기반 어댑터 패턴(위임 사용)장점객체 지향 프로그래밍인 자바에서 안정적 클래스를 상속 및 구현하는 건 버그 안정성이나 생산성에.. [java & 디자인 패턴] Observer 패턴 학습 정리 개념한 객체의 상태 변경 시, 의존하는 다른 객체에게 자동으로 갱신 이벤트가 발생할 수 있도록 하는 패턴이다.감시당하는 대상과 감시하는 객체 간의 관계로 일대다 의존성 관계이다. 사용하는 경우view나 button 등 위젯에서 이벤트를 받을 때, 구독 기능안드로이드에서 onClickListener 이벤트는 버튼 같은 ui는 감시당하는 대상(obserable), 이벤트는 감시 대상이 업데이트될 때 반응하는 대상(observer) 구현java.util의 클래스 및 인터페이스 상속하기옵저버 패턴을 위해서 자바는 기본적으로 observable 객체와 observer 인터페이스를 제공한다.이를 각각 감시당하는 대상과 의존성 객체(감시하는 객체)에게 상속 및 구현한다.주의사항observer 인터페이스와 observ.. [java & 디자인 패턴] Builder 패턴 학습 정리 주제빌더 패턴의 개념직접 구현 예제 개념사용하는 경우객체 생성 과정이 복잡할 경우, 코드를 간단하게 하기 위해 사용한다. 인스턴스를 생성할 때, 필드 변수를 세팅하기 위해 입력해야할 인자가 많은 경우, 혹은 필드 변수를 생성자로 세팅하고 싶은데 유연하게 일부만 세팅해야 할 수 있다. 이럴 때, 생성자 함수를 모든 경우에 맞게 일일히 만드는 건 가독성의 측면에서 좋지 않다.setter 함수로 필드 설정을 할 수도 있지만, 매 줄 마다 인자를 세팅하는 과정에서 코드가 길어진다.ㅊㄹ 이럴 때 빌드 패턴을 사용하면 다음같이 닷 체인 문법으로 유연하게 인스턴스 설정이 가능하다.Character c1 = Member.builder().name(“char”).age(28).male(30).build(); 빌더 패턴.. [java & 디자인 패턴] flyweight 패턴 학습 내용 정리 주제플라이웨이트 패턴의 개념자바에서 기본적인 플라이 웨이트 패턴 구현 사례직접 구현 예제 개념플라이웨이트 패턴은 인스턴스의 불필요한 중복 생성을 제한하고 전역에서 인스턴스를 공유함으로써 메모리 절약과 성능 향상을 목적으로 한다.이를 위해서 객체를 "인스턴스마다 고유한 부분"과 "다른 인스턴스와 동일한 부분"으로 구분하고 후자를 별도의 객체로 만들어 공유하는 방식이다. 이 공유 객체를 플라이웨이트라 부른다. 싱글톤 패턴과의 차이점인스턴스 개수싱글 톤 패턴 | 인스턴스의 개수 자체를 1개 혹은 n개로 제한플라이 웨이트 패턴 | 인스턴스의 생성을 제한하지 않되. 중복되는 데이터를 공유 객체로 분리하여 관리변형(mutate)싱글 톤 패턴 | 공유하는 객체를 변형 가능 (mutable)플라이 웨이트 패턴 | 공.. 이전 1 2 다음