12. Template Method Pattern 목적 알고리즘의 뼈대를 정의하고 일부를 서브 클래스에 위임한다. 이렇게 함으로서 알고리즘의 구조를 변경하지 않고 알고리즘의 일부 내용을 서브 클래스에서 재정의 할 수 있도록 한다. 많은 방식의 알고리즘을 각각 캡슐화시키면서 중복되는 코드가 여러 클래스에 존재하게 된다. -> 중복 코드의 문제. 이를 해결하기 위해 알고리즘의 중복되는 부분을 부모 클래스에 캡슐화시키고 달라지는 부분만 서브클래스에서 구현하게 한다. 결과적으로 중복되는 코드를 줄일 수 있고, 한 곳에서 관리하게 되므로 유지 보수에 유리하다. 예 카페 예시 카페에서 커피를 만드는 것과 차를 만드는 과정을 봐보자. 물을 끓이고 -> 뜨거운 물에 (차, 커피)를 우려내고 -> (차, 커피)를 (일회..
State Pattern 상태(State)란? 하나의 오브젝트가 시점에 따라 특정 상태에 있어야 한다. 처음에 가지게 되는 초기 상태 또는 상황에 따라 여러 상태 중 하나의 상태를 가질 수 있다. 한 상태에서 다른 상태로 전환하는 것을 전이(Transition) 이라고 한다. 예를들어 게임 캐릭터의 경우 걷기, 뛰기, 멈추기, 공격하기, 방어하기 등이 있고, 가전제품의 경우 on, off, sleep 등이 있을 수 있다. 이러한 다양한 상태를 if 문으로 상태를 통제하는 방식은 추가적인 상태가 생기거나 구현의 변경이 발생했을 때 여러곳의 코드가 변경될 수 있다는 문제가 있다. 이를 해결하기 위해 상태를 한 곳에서 관리하기 위한 패턴이 상태 패턴이다. 설명 두개의 인자와 한개의 연산자를 받고 "="을 입력..
Command Pattern 요구사항(요청, 명령)을 객체로 캡슐화 시킨다. 이렇게 함으로써 주어진 여러 기능을 실행할 수 있는 재사용성 이 높은 클래스를 설계할 수 있다. 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용할 때 유용하다. 요구사항 (기능)을 캡슐화 함으로써 기능의 실행을 요구하는 호출자 클래스와 실제 기능을 실행하는 수신자 클래스 간의 의존성을 분리할 수 있다. 결과적으로 다양한 기능이 추가되어도 호출자는 수정없이 기능을 사용할 수 있다. 예시 계산기 숫자 버튼과 연산자 버튼, = 버튼 등 버튼마다 다른 기능을 갖고 있다. 통합 리모콘 티비 on/off, 전등 on/off, 에어컨 on/off 을 통합으로 관리하는 리..
Adapter Pattern 클래스의 인터페이스를 클라이언트가 원하는 형태의 또 다른 인터페이스로 변환한다. Adapter는 호환되지 않는 인터페이스 때문에 동작하지 않는 클래스를 동작할 수 있게 만들어준다. Object Wrapping의 역활을 해서 서로 호환되지 않는 인터페이스를 연결할 수 있게 해준다. 설명 문제: 사용 객체의 API가 서로 다른 경우 해결: 함수를 변환하는 객체를 중간에 넣어줌으로서 변경을 최소화한다. 예시 배열과 리스트에 대한 다른 사용 메소드가 있다. 배열 arr[10]으로 선언 arr[0]로 접근 length()로 크기 얻음 중간 삽입 시 새로운 배열 선언 후 앞 뒤에 기존 값을 넣어줌 중간 값 삭제 시 새로운 배열 선언 후 제거한 값을 제외하고 넣어줌 리스트 LinkedLi..
DAO Pattern Refactoring with Generic Generic을 사용하여 DAO 인터페이스와 DaoImpl 클래스를 구현 클래스와 분리한다. DAO 인터페이스와 DaoImpl 클래스를 일반화하여 사용할 수 있다. 따라서 다른 클래스에서도 상속하여 원하는 대로 함수를 오버라이드하여 사용할 수 있다. DAO 인터페이스 abstract 메소드를 사용한다. 하위 클래스와 철저하게 분리하여 작성해야한다. public abstract class DaoImpl implements DAO { String dbTableName; // 추상 메소드 public abstract Statement getStatement(); public abstract String getInstanceValueQuery(D..
DAO Pattern DAO 패턴의 사용 목적 비지니스 로직과 DB를 분리하기 위해서 사용하는 패턴이다. DAO는 Data Access Object의 약자로 DB의 접근을 전담하게 된다. DB를 사용하는 방법이 변경되더라도 클라이언트 로직이 변경되지 않도록 DB 로직을 캡슐화 하여 분리하는 방법. 설계 DAO : 기본적인 CRUD 인터페이스를 제공한다. DaoImpl : DAO 인터페이스를 구현한 구체 클래스이다. Value Object : DAO를 사용하여 데이터를 저장하는 POJO (plain old java obj) JDBC (Java Database Connectivity) 데이터베이스 비종속적 표준 자바 API이다. 다양한 DB를 동일한 인터페이스로 사용할 수 있도록 추상화 해준다. 각종 DB는..
Singleton Pattern 여러 객체가 생성되면 상태 관리가 어렵다. 이를 해결하기 위해 객체 생성자를 중앙에서 관리하는 방법. 객체가 한개이므로 항상 일관된 상태이다. 멀티 쓰레드에서는 문제가 될 수 있다. (해결방법 존재) 싱글톤 패턴 구현 방법 private 디폴트 생성자를 만든다. 싱글톤 인스턴스를 저장하는 정적 멤버 변수를 생성한다. 싱글톤 인스턴스를 반환하는 정적 팩토리 메소드를 구현한다. ChocolateBoiler.java _ 코드 public class ChocolateBoiler { private static ChocolateBoiler instance = null; private boolean empty; private boolean boiled; private Chocolate..
Factory Method Pattern 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며, 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴. 객체 생성용 인터페이스를 정의하고 해당 인스턴스를 상속한 서브클래스가 어떤 클래스를 인스턴스화(객체 생성) 할 지 결정할 수 있도록 한다. 팩토리 메소드는 객체 생성을 서브 클래스에서 할 수 있도록 미룰 수 있게 한다. Q. 왜 굳이 자식 클래스에서 객체를 생성하도록 미루는 것이고 얻을 수 있는 장점이 뭘까? 실제 객체를 생성하기 위해서 new를 사용한다. new를 호출해서 객체를 생성하게 되는데 생성할 객체가 다양하고 추가/삭제 등 변경이 잦다면 어떻게 될까? A. 클라이언트 단의 잦은 코드 수정이 불가피하게 되고 이는 객체지..
Decorator Pattern 객체에 추가적인 요건을 동적으로 추가해주는 패턴으로, 서브 클래스를 만들지 않고 기능을 유연하게 확장할 수 있게 한다. 데코레이터 패턴에서의 상속은 공통적인 타입으로 추상화하기 위한 용도가 주 목적이다. 데코레이터는 인터페이스/추상 클래스로서 역활을 하고 이를 상속받은 클래스들은 컴포넌트를 꾸미기 위한 구현을 갖게 된다. 컴포넌트는 바로 사용되거나 데코레이터레가 붙어서 사용될 수 있다. 예시 데코레이터 패턴을 일상생활의 예시로 커피를 들 수 있다. 커피를 생각해보면 에스프레소, 콜드블루는 컴포넌트가 될 수 있고 얼음, 시나몬 가루, 우유, 두유, 샷, 자바칩 등은 모두 데코레이터 클래스를 상속받은 데코를 위한 클래스가 될 수 있다. 이때, 최상위 추상 클래스/인터페이스를 ..
Observer Pattern 옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하고 상태의 변화가 있을 때 마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴이다. 정리하면 변화가 발생될 것이 예상되는 객체에 옵저버를 보내놓고 변화가 일어나면 옵저버들을 통해 알림을 보내는 것이다. 다이어그램 Main.java 코드 public class MainWindow extends FrameWindow implements ActionListener, Subject { // 생략 private static final ArrayList observers = new ArrayList(); private PrimeObservableThread primeThr..
Strategy Pattern _ 전략 패턴 같은 종류의 작업을 하는 알고리즘을 정의하고, 각 알고리즘을 캡슐화 하여 알고리즘들을 서로 바꿔 사용할 수 있도록 한다. strategy 패턴은 알고리즘을 사용하는 클라이언트로 부터 독립적으로 알고리즘을 바꿔서 적용할 수 있게 한다. 클래스 다이어그램 Main.java _ 코드 import java.text.ParseException; import java.text.ParsePosition; import java.util.Arrays; import java.util.Date; import java.text.SimpleDateFormat; public class Main { String[] names = {"CompareModifiedDate", "Compare..
Polymorphism _ 다형성 하나의 객체가 여러개의 타입을 가질 수 있는것을 말한다. 부모 클래스 타입의 참조변수로 여러 자식 클래스 타입의 인스턴스를 참조할 수 있다. 인스턴스를 이용한 상속관계 및 오버라이딩을 사용하여 구현한다. Main.java _ 코드 import Converter.DocxDocConverter; import Converter.OdtDocConverter; import Converter.PdfDocConverter; public class Main { public static void main(String[] args) { WordProcessor wp = new WordProcessor("new doc"); wp.setSpellChecker(new EngSpellChecke..
- Total
- Today
- Yesterday