본문 바로가기

컴퓨터과학/디자인패턴14

[디자인패턴] 반복자 패턴 (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.
[디자인패턴] 데코레이터 패턴 (Decorator Pattern) 목적 객체에 추가적인 책임을 동적으로 부여함 상속을 사용하지 않고 새로운 기능을 추가 데코레이터는 상속을 사용하지 않아도 유연하고 융통성 있는 기능 확장을 가능하게 함 서브클래스를 만들지 않고 기능을 유연하게 확장하는 방법 제공 요소 문제: 조금씩 다른 다양한 종류 -> 늘어날수록 확장 어려움 해결: 상속을 남용하지 않고 연관으로 필요한 기능 추가 결과: 확장성 정의 여기서 상속은 기능을 물려받기 위해서가 아니라 형식을 맞추기 위해서임 Component: 각 구성요소는 직접 쓰일 수도 있고 데코레이터로 감싸져서 쓰일 수도 있음, 추상클래스 또는 인터페이스로 구현 ConcreteComponent: 새로운 행동을 동적으로 추가 Decorator: 자신이 장식할 구성요소(Component)와 같은 인터페이스 .. 2021. 10. 14.