본문 바로가기

디자인패턴13

[디자인패턴] 반복자 패턴 (Iterator Pattern) 목적 여러 요소들을 담고 있는 객체이 내부 구조에 대한 이해 없이 각 요소를 순서대로 접근하고 사용할 수 있도록 방법을 제공 요소 문제: 자료 구조 클래스의 요소를 한 개씩 접근하는 API가 서로 다름 해결: 반복자 객체를 중간에 넣음 결과: 변경 최소화 구현 iterator(): 반복자에 대한 참조를 반환 (Iterator 자료형) hasNext(): 요소가 더 존재하는지 확인 (true / false) next(): 다음 요소 가져오기. Object를 반환하므로 변환해서 사용 // Iterator 사용 Iterator iter = cities.iterator(); while (iter.hasNext()){ String s = (String)iter.next(); System.out.println(s).. 2021. 10. 18.
[디자인패턴] 싱글턴 패턴 (Singleton Pattern) 목적 클래스가 한 개의 인스턴스만을 만들 수 있도록하고, 어디서나 생성된 인스턴스에 접근할 수 있도록 요소 문제: 여러 객체가 생성되면 상태 관리 어려움 해결: 객체 생성자를 중앙 관리 결과: 객체가 한 개임을 보장 구현 1. 기본 생성자을 private 으로 막는다. 2. static 함수로 객체를 생성하도록 함 public class Singleton{ private static Singleton uniqueInstance; private Singleton(){} // private으로 생성자 막음 public static Singleton getInstance(){ if (uniqueInstance==null){ uniqueInstance = new Singleton(); } return uniqu.. 2021. 10. 18.
[디자인패턴] 팩토리 패턴 (Factory Pattern) 목적 객체 생성용 인터페이스 정의 구체적인 클래스를 명시하지 않고 관련되거나 의존적인 객체들을 생성할 수 있는 인터페이스 제공 new는 인터페이스가 아니라 실제 클래스(concrete class)의 객체를 생성 OCP에 어긋남 (변경에 대해서 닫혀있지 않다) 생성할 객체가 늘어나면 코드 수정 필요 요소 문제: 실제로 구현되는 클래스의 객체를 생성할 때 객체의 종류가 달라지면 클라이언트 코드를 많이 수정해야함 해결: 생성을 분리해서 캡슐화 시킴 결과: 사용할 객체가 많거나 객체를 생성하는 방법이 변경 되어도 연쇄적인 수정이 적어짐 정의 Creator가 Factory에 해당한다. ConcreteCreateor는 Product타입의 ConcreteProduct들을 가져와 factoryMethod로 작업한다. .. 2021. 10. 18.
[디자인패턴] 옵저버 패턴 (Observer Pattern) 목적 객체간 1:N 의존 관계를 정의함 한 개 객체 상태가 변경될 때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태를 갱신 대표적으로 채팅방, 구독 서비스가 옵저버 패턴을 이용함 방주인, 발행자는 Subject (또는 Observerable, Publisher) - subject에게 정보를 push함 참여자, 구독자는 Observer (또는 Subscriber) 패턴 요소 문제: 1:N 관계에서 정보 갱신 - 구독자가 계속 loop를 돌며 업데이트가 있는지 확인할 수 없음 해결: 사용자를 등록하고, 정보가 변동하는 경우 알려주고 값을 자동으로 갱신 결과: loose coupling (구독자가 모든 정보를 아는게 아님), 확장성 (observer를 쉽게 추가/제거 가능) 구성 su.. 2021. 10. 13.