• 독서/Design Pattern
[디자인패턴-위임/팩토리패턴] 팩토리 메소드 패턴 (Factory-Method Pattern)
[디자인패턴-생성패턴] 추상팩토리 패턴(Abstract-Factory pattern) # 설명 구체적인 클래스를 생성하지 않고, 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 추상팩토리로 제공함. 하나 이상의 제품군들 중 하나를 선택하여 시스 devforyou.tistory.com # 설명 팩토리(Factory) 패턴에서 팩토리는 말그대로 공장을 뜻한다. 어떠한 인스턴스를 만들어주는 곳이다. 앞서 추상팩토리 패턴을 공부했었다. 추상 팩토리에서는 MySQL에 관련된 인스턴스와 Oracle과 관련된 인스턴스를 한번에 생성해줄 수 있었다. 하나의 군(집단)을 이루는 인스턴스를 묶어서 생성할 수 있게 도와주는 것이 팩토리 패턴이었다. 이번 팩토리 메소드패턴에서는 객체생성을 팩토리에서..
[디자인패턴-위임패턴] 템플릿 메서드 패턴(Template Method)
# 설명 상위 클래스(추상클래스)에서는 전체적인 흐름을 구현하고 구체적인 내용은 구현하지 않는다. 그 구체적인 처리는 하위 클래스가 상속받아서 정의하도록 한다. 추상화된 함수를 통해 알고리즘의 단계를 정의하여 처리 순서를 정해 줄 수 있다. 그러나 알고리즘의 내용(구현)은 쉽게 바뀌기 때문에 정의하지 않는다는 것이다. 프레임워크를 사용할때 많이 쓰일 수 밖에 없다. 프레임워크에서는 모든 구동순서를 이미 만들어 놓은 상태로 안에 들어가는 기능만을 우리가 재정의한다. 실제로 안드로이드 개발할때도 많이 마주 했다. 코드 재사용을 위한 기본 기술 중 하나이다. 또한 훅 오퍼레이션을 사용 할 수 있다. 아래 예를 보자 public abstract class PlayerLevel { public abstract v..
[디자인패턴-생성패턴] 빌더 패턴(Builder Pattern)
# 설명 객체를 생성(인스턴스화)하는 정통적인 방법은 두가지가 있다. 생성자 // 생성자 class User { private String name; private String id; private String pwd; User(String name){ this.name = name; } User(String name, String id){ this.name = name; this.id = id; } User(String name, String id, String pwd){ this.name = name; this.id = id; this.pwd = pwd; } } setter를 사용한 java beans 패턴 // 생성자 class User { private String name; private Str..
[디자인패턴-생성패턴] 추상팩토리 패턴(Abstract-Factory pattern)
# 설명 구체적인 클래스를 생성하지 않고, 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 추상팩토리로 제공함. 하나 이상의 제품군들 중 하나를 선택하여 시스템을 설정해야 하고 한번 구성한 제품을 다른 것으로 대체할 수 있을때 ## 예시 두개의 도메인(product, userInfo)으로 나뉜 서비스가 있다. 각 도메인에서는 MySQL과 Oracle 두개의 DB를 제공한다. product와 userInfo는 MySQL에 저장되거나, 또는 Oracle에 저장 돼야한다. 추상팩토리를 이용해 한번에 군(MySQL 또는 Oracle)를 관리 할 수 있도록 해준다. Client(사용자)는 DaoFactory만을 이용해서 각 도메인의 DB(MySQL 또는 Oracle)을 사용할 수 있다...
[디자인패턴-생성패턴] 프로토타입 패턴(Prototype Pattern)
# 설명 객체를 만드는데 복잡하거나 여러자원이 소비되는 경우 프로토타입을 만들고, clone하여 사용하는 방식이다. 생성패턴중에 하나이다. 자바의 오브젝트 타입이 지원하는 clone()을 오버라이딩해서 사용한다. 단, super.clone()을 사용할 경우 인스턴스가 새로 생성되지만 얕은 복사가 된다. 그렇기 때문에 다른 곳에서 안에 객체를 수정할 경우 같이 수정 되기 때문에 깊은복사(deep-copy)를 할 수 있도록 재정의 해줘야 한다. # 코드 // Book.java package prototype; public class Book { private String title; private String author; public Book(String t, String a) { title = t; au..
[디자인패턴-생성패턴] 싱글톤 패턴(Singleton Pattern)
# 설명 소프트웨어(프로그램)내에서 하나의 인스턴스만 필요할때 사용한다. 하나의 인스턴스만이 사용되기 때문에 인스턴스 내 데이터를 쉽게 공유할 수 있다. # 코드 package singleton; import java.util.ArrayList; /* 싱글톤 패턴 요약 소프트웨어(프로그램 내) 하나의 인스턴스만을 사용하기 위해서 사용하는 패턴이다. static으로 선언하는 경우 클래스를 생성하지 않고, jvm에 올라가면서 메모리에 잡힌다. 이것을 이용한다. 디폴트 생성자를 private로 바꾸줌으로써 다른 곳에서는 해당 클래스의 인스터스를 생성할 수 없도록한다. getInstance메서드 역시 static으로 선언해야 한다. 왜냐하면 인스턴스 자체를 생성할 수 없기 때문에 static으로 정의하지 않으면..