인스턴스를 얻는 방법 전통적인 방법은 public 생성자(constructor) 정적 팩토리 메소드(static factory method)로 부터 제공 받음 그 클래스의 인스턴스를 반환하는 단순한 정적(static) 메소드 '정적 팩토리 메소드'는 '디자인 패턴'에서의 '팩토리 메소드(Factory Method)'와 다르다. 또한, 디자인 패턴 중에 이와 일치하는 패턴은 없다. 정적 팩토리 메소드의 예 메소드 설명: 기본 타입(primitive type)인 boolean 값을 받아 Boolean 객체 참조로 변환 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } Static Factory Method..
Factory Method Pattern 팩토리 메소드 패턴은 '객체'와 '객체 생성 클래스'를 따로 분리하는 디자인 패턴이다. 객체 생성 클래스가 따로 분리되어 있어서, 객체 생성 변화에 유연하게 대비할 수 있다. 팩토리 메소드 패턴을 이용하기 위해서는 Strategy Pattern과 Template Pattern의 개념을 아는 것이 좋다. (자주 사용됨) 예제 요구사항 게임 아이템을 만드는 아이템 생성자를 만든다. 아이템의 정보는 DB에 있다. 아이템 불법 생성을 막기 위해, 아이템 생성 로그를 남긴다. 아이템을 상속받아 여러개의 세부 아이템(물약, 검, 갑옷 등등)을 구현한다. 아이템 생성자 public abstract class ItemCreator { public Item create() { /..
Template Method Pattern 템플릿 메소드 패턴은 일정한 구조의 프로세스를 가진 경우, 사용하기 좋은 디자인 패턴 코드의 중복을 줄일 수 있고 유지보수하기에도 편리함. 일정한 구조의 프로세스? 특정 알고리즘이 A -> B -> C 와 같이 항상 A 작업을 수행하고, B작업, C작업을 수행한다면, 각 작업들을 메소드로 구현한다. A -> B -> C 순으로 실행되도록 실행 메소드를 구현한다. (아래 수도코드 참고) func doA: // A 로직 수행 func doB: // B 로직 수행 func doC: // C 로직 수행 func doSomething: doA doB doC 예제 요구사항 계정 로그인을 한다. 로그인의 동작 순서는 아래와 같다. 사용자의 아이디, 비밀번호 복호화 유효한 아..
스트래티지 패턴 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴 행위(Behavior)들을 캡슐화하여 동적으로 자유롭게 바꿀 수 있는 패턴 예제 요구사항 게임 케릭터와 무기를 생성하여, 케릭터가 무기를 쥘 수 있음. 무기의 종류 칼 (Sword) 총 (Gun) 무기의 행위 공격 (Attack) 케릭터가 들고 있는 무기는 변경이 자유롭게 가능해야 함. 무기 만들기 public interface Weapon { void attack(); } 무기(Weapon)라는 인터페이스를 생성. (자세한 내용은 implements하여 구현) 무기로 공격(attack)을 할 수 있으므로, attack()이라는 메소드를 생성 public class Knife implements Weapon { @Override public..