디자인패턴 20

Design Pattern 디자인 패턴 Flyweight Pattern 플라이웨이트 패턴

FlyWeight Pattern 플라이웨이트 패턴 구조 패턴으로, 객체마다 모든 데이터를 저장하지 않고 공통된 부분은 공유할 수 있도록 해주는 패턴입니다. 주로 객체 생성 횟수를 줄이고, 메모리 사용량을 줄이고 성능을 개선하기 위해 사용합니다. flyweight 객체가 생성된 객체의 목록을 관리합니다. 비슷한 종류의 객체가 있다면 재사용하고, 없으면 새로 생성합니다. 예를 들어 객체 목록을 HashMap으로 가지고 있으면서, 동일한(비슷한) 객체가 있다면 그 객체를 재사용(get)하고 없으면 새로 생성 (put) 합니다. 장단점 장점 RAM 메모리를 관리할 수 있습니다. 단점 flyweight의 메소드를 호출할때마다 데이터가 계산되어야 하는 경우, RAM의 작동량이 CPU 사이클을 넘어설 수도 있습니다...

JAVA/DesignPattern 2021.12.19

Design Pattern 디자인 패턴 Facade Pattern 파사드 패턴

Facade Pattern 파사드 패턴 구조 패턴으로 시스템의 복잡한 구성을 숨기면서 퍼블릭 인터페이스(메소드)를 통해 시스템의 기능에 접근할 수 있도록 하는 패턴입니다. 고객이 직접 시스템의 각 객체에 접근해서 사용하는 것이 아니라, 메소드를 추려서 간단한 인터페이스를 제공하는 파사드 객체를 이용해 시스템의 기능을 사용합니다. 장단점 장점 시스템의 복잡함에서 코드를 분리할 수 있습니다. 단점 Facade가 모든 객체가 결합된, 최상위 객체( a God Object)가 될 수도 있습니다. Facade Pattern 파사드 패턴 구현 도형 public interface 도형 { } 세모 public class 세모 implements 도형 { public 세모() { System.out.println("세..

JAVA/DesignPattern 2021.12.18

Design Pattern 디자인 패턴 Decorator Pattern 데코레이터 패턴

Decorator Pattern 데코레이터 패턴 구조 패턴으로, 행동을 가진 객체를 둘러싸는 특별한 래퍼(Wrapper)를 통해 객체에 새로운 행동을 추가할 수 있도록 해주는 패턴입니다. 장단점 장점 서브클래스를 새로 만들지 않도고 새로운 메소드를 추가할 수 있습니다. 런타임에 객체에 대한 책임을 추가하고 삭제할 수 있습니다. 여러 개의 메소드를 합칠 수 있습니다. (단일책임원칙) 다양한 동작을 가진 단일 클래스를 여러개의 서브 클래스로 분리할 수 있습니다. 단점 Decorator가 중첩(스택 구조)되어 있는 경우, Decorator 하나를 삭제하기 어렵습니다. Decorator가 순서 없이 중첩되어 있는 경우, Decorator 하나를 추가하기 어렵습니다. 여러 층의 초기 구성 코드가 보기 좋지 않을 ..

JAVA/DesignPattern 2021.12.18

Design Pattern 디자인 패턴 Bridge Pattern 브릿지 패턴

Bridge Pattern 브릿지 패턴 구조 패턴인 브릿지 패턴은 추상화된(abstraction) 객체들과 구현(implementation)된 객체를 연결하는 데 사용되는 패턴입니다. 추상화된 객체가 인터페이스 구현 객체를 포함하도록 해서, 2개의 개념을 합칠 수 있는 형태를 말합니다. Bridge Pattern 브릿지 패턴의 장단점 장점 플랫폼에서 독립적인 클래스를 생성할 수 있습니다. 클라이언트가 높은 수준의 추상화된 객체에 접근하기 때문에 객체의 새부정보가 노출되지 않습니다. 새로운 추상화 객체와 구현 객체을 독립적으로 생성할 수 있습니다. (개방폐쇄원칙) 높은 수준의 추상화 객체와 인터페이스를 구현한 세부 클래스에만 집중할 수 있습니다. (단일책임원칙) 단점 높은 응집도를 갖게 되어 코드가 복잡해..

JAVA/DesignPattern 2021.12.16

Design Pattern 디자인패턴 Adapter Pattern 어답터 패턴

Adapter Pattern 어답터 패턴 어답터 패턴은 서로 다른 인터페이스를 바꿔치기 할 수 있도록 해주는 패턴입니다. 예를 들어 5핀 충전기에 어답터를 끼우면 C type 기기를 충전할 수 있는 것과 같은 원리입니다. Adapter Pattern 어답터 패턴의 장단점 장점 비즈니스 로직에서 인터페이스 및 데이터 변환 로직을 분리할 수 있습니다. (단일책임원칙) 기존 클래스 코드를 변경하지 않고도 새로운 이터 형태로 변환할 수 있습니다. (개방폐쇄원칙) 단점 코드의 복잡성이 증가할 수 있습니다. (새로운 클래스가 생성될 경우, 어답터와 인터페이스를 함께 도입해야 하기 때문에 때로는 클래스 자체를 변경하는 것이 더 간단할 수도 있습니다.) Adapter Pattern 어답터 패턴 구현 어답터 클래스는 인..

JAVA/DesignPattern 2021.12.16

Design Pattern 디자인패턴 Prototype Pattern 프로토타입 패턴

Prototype Pattern 프로토타입 패턴 객체를 복사해야 하는 경우에 사용되는 디자인 패턴입니다. 예를 들어 DB 작업이 많은데, 객체를 저장해야 한다고 하면, 프로토타입 패턴을 이용해 객체를 복사(캐싱) 해놓은 뒤, DB가 여유있을 때 (?) 객체를 저장할 수 있도록 하는데 사용됩니다. 프로토타입 패턴에서 보통 객체를 복사하는 역할을 맡은 Interface는 clone 메소드 하나만 가집니다. 프로토타입 패턴의 사용 객체의 생성 방법이 시스템과 독립적이어야 하는 경우 ( 클래스 상속 구조와 팩토리(객체 생성 패턴) 구조가 동일한 것을 피하기 위해서) 객체의 인스턴스 생성/변형이 런타임에서 일어나야 하는 경우 ( 객체가 몇가지 상태 표현을 갖는 경우 매번 적절한 상태로 인스턴스를 수동으로 변화시키..

JAVA/DesignPattern 2021.12.15

Design Pattern 디자인 패턴 Builder Pattern 빌더 패턴

Builder Pattern 빌더 패턴 생성자를 이용해 객체를 생성할 때 더 편리하게 해주는 디자인 패턴입니다. 객체의 구성요소(변수)가 많은 경우, 객체 생성자의 input 요소가 많은 경우에는 아래와 같이 생성자가 길어지고 복잡하게 됩니다. 이런 경우 어느 한 요소가 빠지게 되거나, 요소의 순서가 뒤바뀐 경우 에러를 찾아내기가 어려워집니다. 또는 구성요소가 없어지거나, 추가 될때마다 새로운 생성자를 만들어주어야 합니다. 이런 불편함을 해소하고, 객체를 생성할 때 input 요소를 하나씩 넣어줄 수 있도록 해주는 패턴이 빌터 패턴입니다. public class Object{ private String a; private String b; private String c; private String d; ..

JAVA/DesignPattern 2021.12.15

Design Pattern 디자인패턴 Singleton Pattern 싱글톤 패턴

싱글톤 패턴 Singleton Pattern 객체가 한 개만 생성될 수 있도록 관리하는 패턴입니다. 인스턴스 객체를 생성할 필요 없이 바로 객체에 접근할 수 있는 기능을 제공합니다. 싱글톤 패턴의 장단점 장점 객체를 하나만 생성해서 관리할 수 있습니다. 어디서든지 객체에 접근할 수 있도록 할 수 있습니다. 최초 호출 시에만 객체를 생성합니다. 단점 멀티 스레드 환경에서 객체를 여러번 생성하지 않도록 별도의 조치가 필요합니다. 프레임워크에서는 보통 상속에 의존해 객체를 생성하기 때문에 싱글톤 패턴을 적용하고 테스트하는 것이 어려울 수 있습니다. 싱글톤 패턴을 이용하면, 캡슐화가 깨진 나쁜 설계가 드러나지 않을 수도 있습니다. * 캡슐화 : 객체지향 언어에서 객체의 속성과 행위를 외부에서 접근할 수 없도록 ..

JAVA/DesignPattern 2021.12.14

Design Pattern 디자인 패턴 Abstract Factory Pattern 추상 팩토리 패턴

추상 팩토리 패턴 추상 팩토리란 여러 팩토리를 하나로 묶는 상위 팩토리를 말합니다. (자식 클래스를 갖는 추상 클래스를 말합니다). 2021.12.07 - [JAVA/JAVA] - Design Pattern 디자인 패턴 Factory Pattern 팩토리 패턴 Design Pattern 디자인 패턴 Factory Pattern 팩토리 패턴 팩토리 Factory 란? 팩토리는 객체의 생성만을 전담하는 객체입니다. Interface를 구현한 클래스가 여러 개인 경우 외부에서 각 상황에 맞는 클래스를 찾아 인스턴스를 생성해주어야 하는 불편함을 mantaray.tistory.com 추상 팩토리 패턴 구현 예시 스마트폰 객체를 생성하는 추상 팩토리인 스마트폰 Factory가 있습니다. 그리고 스마트폰 Factor..

JAVA/DesignPattern 2021.12.13

Design Pattern 디자인 패턴 Factory Pattern 팩토리 패턴

팩토리 Factory 란? 팩토리는 객체의 생성만을 전담하는 객체입니다. Interface를 구현한 클래스가 여러 개인 경우 외부에서 각 상황에 맞는 클래스를 찾아 인스턴스를 생성해주어야 하는 불편함을 해결해주는 패턴입니다. 즉 Factory에서 각 상황에 맞는 클래스를 찾아서 객체를 생성해주도록 합니다. 팩토리 Factory 패턴 사용 클래스가 만들어야 하는 개체 유형(타입)을 미리 알 수 없는 경우 클래스를 특정하기 위한 서브 클래스가 필요한 경우 복합한 클래스 구조를 단순화하기 위한 경우 팩토리 패턴 구현 예시 아래와 같이 애완동물을 생성하는 기능을 담당하는 객체를 Factory라고 합니다. 애완동물을 생성하려고 한다면 아래와 같이 new를 이용해서 생성해주어야 합니다. 애완동물 꾼이 = new 애..

JAVA/DesignPattern 2021.12.07