[디자인 패턴] 반복자 패턴

반복자 패턴(Iterator Pattern) 반복자 패턴은 내부 구조를 외부에 노출하지 않고, 집합체(Aggregate)를 통해 원소 객체에 순차적으로 접근할 수 있습니다. C++의 vector에도 사용되는 유명한 패턴입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 std::vector<int> nums; nums.push_back(1); nums.push_back(2); nums.push_back(3); nums.push_back(4); nums.push_back(5); // 반복자 패턴 std::vector<int>::iterator iter = nums.begin(); for (; iter != nums.end(); iter++) { std::cout << *iter << std::endl; } 여기서 vector<T>::iterator가 반복자 패턴입니다. 반복자 패턴 구조 반복자 패턴의 해심은 효율적인 집합 관리를 위해 별도의 집합체를 갖고 있습니다....

December 8, 2020 · 3 min · Pacientes

[디자인 패턴] 프록시 패턴

프록시 패턴(Proxy Pattern) 프록시 패턴은 객체 접근을 제어하기 위한 중간 단계에 대리자를 생성하여 처리를 위임하는 패턴입니다. 프록시 패턴의 가장 큰 특징은 하나의 객체를 두 개로 분리하는 것입니다. 그러나 분리된 두 개의 객체는 서로 다른 객체가 아닌 동일한 객체이며 동일한 인터페이스를 갖고 있습니다. 프록시 패턴은 응용이 매우 많습니다. 대표적인 응용 사례는 다음과 같습니다. 원격 프록시 가상 프록시 보호 프록시 스마트 프록시 프록시 패턴 구조 프록시 패턴은 두 객체를 이어준다는 역할에서 **어댑터 패턴(Adapter Pattern)**과 유사합니다....

December 8, 2020 · 6 min · Pacientes

[디자인 패턴] 플라이웨이트 패턴

플라이웨이트 패턴(Flyweight Pattern) 플라이웨이트 패턴은 이름이 의미하는 바와 같이 공통된 객체를 공유하여 자원을 절약하는 패턴입니다. 자원이란 컴퓨터의 메모리를 의미합니다. 플라이웨이트 패턴 구조 공통된 객체를 공유하기 위해서는 특별한 조건이 필요합니다. 공유하려는 객체는 불필요한 메모리 사용을 방지하기 위해 단 하나의 객체로 만들어야 합니다. 이러한 특징은 **싱글톤 패턴(Singleton Pattern)**과 매우 비슷합니다. 또한 객체의 생성은 new 키워드로 동작합니다. 객체를 싱글톤 패턴과 결합하여 생성하는 것은 **팩토리 패턴(Factory Pattern)**과 연관 지어 생각할 수 있습니다. 이처럼 플라이웨이트 패턴은 다른 객체와의 결합이 많은 편입니다....

December 7, 2020 · 4 min · Pacientes

[디자인 패턴] 파사드 패턴

파사드 패턴(Facade Pattern) 파사드 패턴은 복잡하게 분리된 모듈의 결합입니다. 다른 말로는 연관된 서브 시스템의 메서드를 하나로 결합한 형태입니다. API를 사용해본 경험이 있다면, 대부분 파사드 패턴을 보았고, 사용하고 있습니다. 이처럼 파사드 패턴은 사용자에게 제공되는 최상위 통합 인터페이스입니다. 파사드 패턴의 구조 파사드 패턴은 특별한 구조보다는 작성 규칙이 존재합니다. 자기 자신만의 객체 사용 메서드에 전달된 매개변수 사용 메서드에 생성된 객체 사용 객체에 속하는 메서드 사용 먼저, 파사드 패턴을 활용했지만 잘못된 예시를 살펴보겠습니다. 잘못된 파사드 패턴의 예제 불필요한 객체 생성 루틴과 재호출을 코드에 삽입하는 경우가 많습니다....

December 7, 2020 · 3 min · Pacientes

[디자인 패턴] 데코레이터 패턴

데코레이터 패턴(Decorator Pattern) 객체에 새로운 기능을 추가하려면 클래스를 확장해야 합니다. 클래스를 확장하는 방법은 상속과 구성(복합 객체 구성) 두 가지입니다. 상속은 클래스 간 강력한 결합 관계를 만들어 객체의 확장성과 유연성을 방해합니다. 데코레이터 패턴은 런타임 상황에서 객체를 동적으로 확장합니다. 데코레이터 패턴 구조 데코레이터 패턴은 런타임 상황에서 객체에 새로운 책임을 동적으로 추가합니다. 런타임 상황에서 책임을 추가한다는 것은 책임이 향후 어떤 형태로 변경될지 모른다는 것입니다. 따라서 데코레이터 패턴은 책임(클래스)를 분산하여 설계하는 것이 핵심입니다. 데코레이터 패턴은 다음과 같은 구성 요소가 있습니다....

December 1, 2020 · 3 min · Pacientes