자바23 [디자인 패턴] GoF 패턴 구분 GoF 패턴 구분GoF 에서 패턴을 아래와 같이 구분합니다. 생성, 구조, 행동으로 패턴들을 분류합니다. 생성에는, 추상 팩토리 패턴, 빌더 패턴, 팩토리 메소드 패턴, 싱글톤 패턴 등이 있습니다.구조에는, 어댑터 패턴, 브릿지 패턴, 컴포지트 패턴, 데코레이터 패턴, 퍼사드 패턴 등이 있습니다.행동에는, 위 두 범주 외에 것들이 있습니다. 자바/자바 자료실 2018. 12. 19. [디자인 패턴] 09. 이터레이터 패턴 (Iterator Pattern) 이터레이터 패턴 (Iterator Pattern)이터레이터 패턴을 사용해서 집합 객체 요소에 직접 접근하지 않고, 간접적으로 접근할 수 있게 해줍니다. 클래스 다이어그램 Null Iterator 자바/자바 자료실 2018. 12. 18. [디자인패턴] SOLID 원칙 Design SmellsName Symptoms Rigidity (경직성) The system is hard to change, because every time you change one thing, you have to change something else in a never ending succession of changes. Fragility (취약성) A change to one part of the system causes it to break in many other, completely unrelated parts. Immobility (부동성) It is hard to disentangle the system into components that can be reused in other.. 자바/자바 자료실 2018. 10. 24. [디자인 패턴] 08. 템플릿 메소드 패턴 (Template Method Pattern) 템플릿 메소드 패턴 (Template Method Pattern)어떤 작업 알고리즘의 골격을 정의합니다. 일부 단계는 서브클래스에서 구현하도록 할 수 있습니다.템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 특정 단계만 서브클래스에서 새로 정의하도록 할 수 있습니다. 객체지향 원칙헐리우드 원칙저수준 구성요소에서 시스템에 접속을 할 수는 있지만, 언제 어떤 식으로 그 구성요소들을 사용할지는 고수준 구성요소에서 결정합니다. 템플릿 메소드 패턴에서, 구상 클래스는 절대로 추상 클래스를 직접 호출하지 않습니다. 구상 클래스를 활용하는 것은 오로지 추상 클래스의 몫입니다. 예제 코드1. 바리스타 커피 예제 코드- barista/CaffeineBeverage 123456789101112131415161.. 자바/자바 자료실 2018. 10. 23. [디자인 패턴] 07. 어댑터 패턴과 퍼사드 패턴 (Adapter Pattern and Facade Pattern) 어댑터 패턴 (Adapter Pattern)한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다. 다이어그램 퍼사드 패턴 (Facade Pattern)어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다. 퍼사드 예제 다이어그램 객체지향 원칙데메테르의 법칙(Law of Demeter) = 최소 지식 원칙객체 사이의 상호작용은 될 수 있으면 아주 가까운 객체와 하는 것이 좋습니다.즉, 시스템을 디자인할 때, 어떤 객체든 상호작용하는 클래스의 개수에 주의해야 합니다. .. 자바/자바 자료실 2018. 10. 23. [디자인 패턴] 06. 커맨드 패턴 (Command Pattern) 커맨드 패턴 (Command Pattern)요청 내역을 객체로 캡슐화할 수 있으며, 매개변수로 여러 가지 다른 요청 내역을 집어넣을 수 있습니다.또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있고, 작업취소 기능도 가능합니다. 클래스 다이어그램 콜라보레이션 다이어그램 예제 코드- Command.java 1234567package party; public interface Command { public void execute(); public void undo();} cs - Light.java 1234567891011121314151617181920212223242526272829303132333435package party; public class Light { String location; i.. 자바/자바 자료실 2018. 10. 23. [디자인 패턴] 05. 싱글턴 패턴 (Singleton Pattern) 싱글턴 패턴 (Singleton Pattern)싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. 멀티스레딩 문제 해결 방법여러 스레드에서 동시에 getInstance() 메소드로 싱글턴 객체를 요청할 때, new 생성이 중복될 가능성이 있다. 따라서 동기화를 해줘야 한다. 1. 메소드의 synchronized 키워드를 붙인다.1234567891011public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static synchronized Singleton getInstance() { if (uniqueInstance.. 자바/자바 자료실 2018. 10. 23. [디자인 패턴] 04. 팩토리 패턴 (Factory Pattern) 팩토리 메소드 패턴 (Factory Metgo Pattern)팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브스클래스에게 맡긴다. 특징어떤 구상 클래스가 생성되는지 상관 없이 로직을 구현할 수 있다.자식 클래스에게 객체 생성 책임을 부여한다.런타임에 어느 구상 객체가 생성되는지 결정하지는 않는다. 다이어그램 팩토리 메소드 패턴 예제 추상 팩토리 패턴 (Abstract Factory Pattern)추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있습니다. 장점클라이언트와 구상 클.. 자바/자바 자료실 2018. 10. 23. [디자인패턴] 03. 데코레이터 패턴 (Decorator Pattern) 데코레이터 패턴 (Decorator Pattern)객체에 추가 요소를 동적으로 더할 수 있다. 데코레이터를 사용하면 서브 클래스를 만드는 것보다 훨씬 유연하게 기능을 확장할 수 있다. 객체지향 원칙OCP (Open-Closed Principle)클래스는 확장에 대해서는 열려 있지만, 변경에 대해서는 닫혀 있어야 한다. 장점과 단점장점데코레이터를 끼워도 클라이언트 쪽에서 데코레이터를 사용하고 있다는 것을 전혀 알지 못한다. 단점자잘한 클래스들이 많이 추가된다. 남들이 보기에 한 눈에 이해하기 어려울 수 있다.특정 형식에 의존하는 코드에 데코레이터를 적용하면, 원래 의도와 맞지 않는다.구성 요소를 초기화하는 데 필요한 코드가 훨씬 복잡해진다. 다이어그램 Java.IO 클래스 다이어그램 FilterInputS.. 자바/자바 자료실 2018. 10. 22. [디자인패턴] 02. 옵저버 패턴 (Observer Pattern) 옵저버 패턴 (Observer Pattern)한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다. 객체지향 원칙느슨한 결합 (Loose Coupling)서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다. Java.util 을 이용한 옵저버 패턴 구현단점 및 한계Observable 은 인터페이스가 아닌 클래스이고, 어떠한 인터페이스를 구현하는 방법도 아닙니다. 이를 구현하기 위해 서브클래스를 꼭 만들어야 합니다. 그러나 이미 다른 상위 클래스를 확장하고 있는 클래스에 Observable 의 기능을 추가할 수 없습니다. 재사용성에 제약이 생깁니다. 인터페이스를 구현한.. 자바/자바 자료실 2018. 10. 19. [디자인패턴] 01. 스트래티지 패턴 (Strategy Pattern) 스트래티지 패턴 (Strategy Pattern)알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.스트래티지 패턴을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 객체지향 원칙바뀌는 부분은 캡슐화한다.상속(Inheritance)보다는 구성(Composition)을 활용한다.구현이 아닌 인터페이스에 맞춰서 프로그래밍 한다. 다이어그램 예제 코드Behaviors 패키지- Behaviors/QuackBehavior.java 12345package Behaviors; public interface QuackBehavior { public void quack();}Colored by Color Scriptercs - Behaviors/Quack.java .. 자바/자바 자료실 2018. 10. 19. 이전 1 2 다음