반응형

Escort GoF의 디자인 패턴 29

19. 반복자 패턴(Iterator Pattern) [Escort GoF의 디자인 패턴]

19. 반복자 패턴(Iterator Pattern) 19.1 개요 프로그래밍하다 보면 개체들을 보관하는 컬렉션 개체를 사용하는 것은 매우 흔한 일입니다. 그리고 컬렉션의 안전성을 유지하기 위해서는 개체를 보관하는 공간을 직접적으로 노출시키지 않게 됩니다. 하지만 사용자의 경우 컬렉션에 보관된 개체의 정보를 검색할 수 있어야 하며 경우에 따라서는 보관된 개체들에 대해 반복된 작업을 수행하기를 원하는 경우가 있습니다. 반복자 패턴은 컬렉션 개체의 내부 저장 공간에 대해 직접적으로 노출하는 것을 막으면서 보관된 개체들에 대해 반복된 작업을 수행할 수 있는 방법을 제공하고자 할 때 사용하는 패턴입니다. 반복자 패턴에서는 컬렉션을 반복 순회하면서 작업을 수행할 필요가 있을 때 순회할 수 있는 도구 개체를 정의합니..

18. 해석자 패턴(Interpreter Pattern) [Escort GoF의 디자인 패턴]

18. 해석자 패턴(Interpreter Pattern) 18.1 개요 해석자 패턴은 사용자가 표현하기 쉬운 표현을 사용하게 하고 이를 해석하는 개체를 통해 약속된 알고리즘을 수행하는 패턴입니다. SQL 쿼리문이나 Command 창에서 프로그램 실행 시 필요한 인자를 전달하는 경우 등에서 많이 사용될 수 있는 패턴입니다. 해석자 패턴에서는 사용자가 원하는 다양한 명령을 쉽게 표현할 수 있게 구문 약속을 해야 합니다. 그리고 해석자에서는 이와 같이 약속된 구문을 입력 인자로 전달되었을 때 해석할 수 있어야 합니다. 가령 "2 Add 3" 과 같은 표현은 피 연산자:2, 연산자:+, 피 연산자:3 으로 해석될 수 있다는 것입니다. 해석자 패턴을 사용하면 사용자가 다양한 명령을 쉬운 표현 방법으로 전달할 수 ..

17. 명령 패턴(Command Pattern) [Escort GoF의 디자인 패턴]

17. 명령 패턴(Command Pattern) 17.1 개요 프로그래밍하다 보면 명령을 내리는 개체와 명령을 수행하는 개체를 나누는 작업은 매 번 있는 작업입니다. 그런데 실제 요청한 작업을 수행하는 개체에서 수행에 필요한 알고리즘을 모두 포함하였을 때 비슷한 형태의 여러 메서드를 구현해야 하는 경우가 발생합니다. 경우에 따라서는 명령을 내리는 시점과 실제 명령을 수행하는 시점이 다르고 다양한 설정에 따라 구체적인 수행 알고리즘이 다른 경우도 발생합니다. 이 같은 경우에 명령을 내리는 곳에서 일부 알고리즘을 정의하여 명령을 수행하는 개체의 메서드를 호출할 때 입력 인자로 전달하는 것이 더 효과적입니다. 이러한 경우에 명령 패턴을 사용합니다. 명령 패턴은 명령을 요청하는 곳에서 수행할 알고리즘을 정의하여..

16. 책임 연쇄 패턴(Chain of Responsibility Pattern)[Escort GoF의 디자인 패턴]

16. 책임 연쇄 패턴(Chain of Responsibility Pattern) 16.1 개요 여러 형식 개체들로 구성된 프로그램을 작성하다 보면 메시지를 보내는 곳에서 이를 받아서 처리해야 할 개체의 위치를 파악하기 어려운 경우가 있습니다. 만약, 메시지를 받아 처리해야 할 개체들을 관리하는 집합체가 있거나 계층화되어 있다면 책임 연쇄 패턴을 통해 효과적으로 메시지를 전달할 수 있습니다. 책임 연쇄 패턴에서는 메시지 송신자는 이를 받아 처리해야 할 개체가 속한 집합체에 메시지를 전달하면 집합체 내에서 수신해야 할 개체에게 메시지를 전달하여 처리를 하게 하는 것입니다. 집합체에 특정 개체에게 메시지가 전달되면 해당 메시지를 자신이 처리를 할 것인지를 판단하게 됩니다. 만약, 자신이 처리를 해야 한다면 ..

15. 프락시 패턴(Proxy Pattern) - 스마트 참조자 [Escort GoF의 디자인 패턴]

15. 프락시 패턴(Proxy Pattern) - 스마트 참조자 15.1 개요 이번에는 프락시 패턴 중에서 스마트 참조자에 대해 살펴보기로 합시다. 스마트 참조자는 다른 프락시 패턴들처럼 실제 개체를 사용하는 같은 방식으로 사용할 수 있습니다. 그리고 스마트 참조자에서는 자신 내부에 실제 개체(스마트 포인터)를 포함하고 있으며 복사 생성을 할 때의 실제 개체에 참조 개수를 추가하고 소멸을 할 때에는 참조 개수를 감소시켜 참조 개수가 0이 되면 실제 개체를 소멸해 줍니다. C++ 언어에서 스마트 참조자의 경우에는 클래스 형식의 포인터 변수를 사용하지 않아도 사용자가 개체의 생성과 소멸에 관한 책임을 하지 않아도 되게 해 줍니다. 또한, 비동기 프로그래밍할 때 스마트 참조자를 통해 실제 개체에 접근할 때 동..

14. 프락시 패턴(Proxy Pattern) - 보호용 프락시 [Escort GoF의 디자인 패턴]

14. 프락시 패턴(Proxy Pattern) - 보호용 프락시 14.1 개요 이번에는 프락시 패턴 중에서 보호 프락시에 대해 살펴보기로 합시다. 보호 프락시는 사용자가 실제 개체의 특정 행위를 수행할 수 있는 권한이 있는지를 확인할 필요가 있을 때 사용됩니다. 14. 2 시나리오 저녁에 가족들과 같이 TV를 시청하면서 사생활 보호에 관한 얘기를 나누게 되었어요. 얘기하다 보니 어디까지 공유해야 하고 보호해야 하는지에 대한 생각이 서로 많이 다르더군요. 얘기를 나누면서 우리 가족은 서로에 대한 신뢰를 바탕으로 자신이 생각이 제일 중요하다는 결론에 도달했습니다. 그리고 저는 방으로 들어가 새로운 형태의 사진 관리 응용을 만들어 보았습니다. 기존의 응용에서는 단순히 메모리 카드에 있는 사진을 옮기고 보정 작..

13. 프락시 패턴(Proxy Pattern) - 가상 프락시 [Escort GoF의 디자인 패턴]

13. 프락시 패턴(Proxy Pattern) - 가상 프락시 13.1 개요 이번에는 프락시 패턴 중에서 가상 프락시에 대해 살펴보기로 합시다. 가상 프락시는 실제 개체의 특정 행위를 수행하는 비용이 클 때 사용이 됩니다. 사용자가 가상 프락시 개체를 통해 비용이 많이 드는 작업을 요청하면 가상 프락시 개체는 이 작업을 별도의 쓰레드에서 수행하게 명령만 내립니다. 이를 통해 사용자는 비용이 큰 작업을 수행 요청했을 시에 수행이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있게 됩니다. 13. 2 시나리오 여수 엑스포를 다녀와서 사진 보정 작업을 수행하였습니다. 그리고 이번에는 사진들을 소셜 사이트에 올려볼까 하는데 사진들의 사이즈가 너무 커서 모두 줄이고 올려야 했습니다. 사진 사이즈를 조절하는 ..

12. 프락시 패턴(Proxy Pattern) - 원격지 프락시 [Escort GoF의 디자인 패턴]

12. 프락시 패턴(Proxy Pattern) - 원격지 프락시 12.1 개요 프락시 패턴은 사용자가 사용하는 개체를 통해 실제 개체를 제어하게 하는 패턴입니다. 프락시 패턴을 사용하는 경우에는 제어하기 위한 개체가 사용자와 위치가 다른 경우에 사용자가 원격지에 있는 개체에 접근하기 쉽게 할 경우가 있습니다(원격지 프락시). 그리고 실제 개체의 특정 행위를 호출할 때 해당 작업이 완료되기를 기다리는 비용이 크다면 작업 요청을 대행하는 프락시 개체를 두어 사용자가 작업이 완료되기를 기다리지 않게 할 수 있습니다(가상 프락시). 이 외에도 권한에 따라 사용할 수 있는 수준이 다른 실 개체를 보호하기 위해 프락시 개체를 제공하는 방법(보호용 프락시)과 여러 곳에서 하나의 개체를 사용해야 한다면 참조 카운터를 ..

11. 플라이급 패턴(Flyweight Pattern) [Escort GoF의 디자인 패턴]

11. 플라이급 패턴(Flyweight Pattern) 11.1 개요 프로그램에서 개체가 많아지면 메모리가 많이 차지하게 됩니다. 이럴 때 메모리 효율을 높일 필요성이 있다면 무엇을 해야 할까요? 플라이급 패턴은 이러한 문제를 해결하기 위한 하나의 방법입니다. 플라이급 패턴은 개체의 멤버 필드 중에 각 개체가 반드시 갖고 있어야 할 멤버와 여러 개체가 공유해서 사용할 수 있는 멤버로 분리하는 작업에서부터 출발합니다. 공유해서 사용할 수 있는 멤버가 가질 수 있는 상태의 종류가 개체의 수보다 상대적으로 적다면 플라이급 패턴을 사용하여 메모리 효율을 높일 수 있습니다. 플라이급 패턴에서는 공유해서 사용할 수 있는 상태들을 공유 풀에 형성합니다. 그리고 각 개체는 특정 상태를 참조합니다. 만약, 개체의 수가 ..

10. 퍼샤드 패턴(Facade Pattern) [Escort GoF의 디자인 패턴]

10. 퍼샤드 패턴(Facade Pattern) 10.1 개요 프로그래밍하다 보면 여러 종류의 라이브러리를 사용해야 하는 경우가 발생합니다. 그리고 실제 각 라이브러리에 있는 모든 기능을 사용할 필요가 없는 경우가 많지요. 이럴 때 상위 수준의 라이브러리를 만들어서 사용하기 쉽게 제공할 수 있습니다. 이처럼 상위 수준에서 인터페이스를 정의하여 하위 수준의 서브 시스템의 기능을 사용할 수 있게 하고자 할 때 퍼샤드 패턴을 사용하면 효과적입니다. 퍼샤드 패턴에서는 하위 수준의 여러 서브 시스템에서 제공되는 기능들을 상위 수준에서 단순화시켜 사용하기 쉽게 해 줍니다. 또한, 이를 통해 여러 서브 시스템과의 복잡한 관계를 느슨하게 만들어 주어 하위 시스템과 독립성을 갖게 해 줍니다. 10. 2 시나리오 오전 강..

반응형