단위전략 기반 디자인단위전략 기반 디자인(Policy-based design) 혹은 단위전략 기반 클래스 디자인(policy-based class design), 단위전략 기반 프로그래밍(policy-based programming) 은 단위전략이라고 불리는 C++의 이디엄에서 비롯된 컴퓨터 프로그래밍 패러다임이다. 이는 전략 패턴을 컴파일 타임에 적용하는 것이며, C++의 템플릿 메타프로그래밍과 연관이 있다. 단위전략 기반 디자인은 Andrei Alexandrescu의 저서인 Modern C++ Design을 통해서 대중에 알려졌다. 단위전략 기반 디자인은 이론적으로 다른 프로그래밍 언어에도 적용할 수 있으나 언어의 기능에 의존적이기 때문에 C++을 중심으로 논의가 전개되고 있다. C++의 경우에도 템플릿을 지원하는 컴파일러가 필요하다. 간단한 예아래의 예는 C++의 Hello world 프로그램을 출력되는 언어와 출력되는 스트림을 선택할 수 있도록 단위전략 기반 디자인을 이용하여 수정한 것이다. #include <iostream>
#include <string>
template <typename OutputPolicy, typename LanguagePolicy>
class HelloWorld : private OutputPolicy, private LanguagePolicy
{
using OutputPolicy::print;
using LanguagePolicy::message;
public:
// Behaviour method
void run() const
{
// Two policy methods
print(message());
}
};
class OutputPolicyWriteToCout
{
protected:
template<typename MessageType>
void print(MessageType const &message) const
{
std::cout << message << std::endl;
}
};
class LanguagePolicyEnglish
{
protected:
std::string message() const
{
return "Hello, World!";
}
};
class LanguagePolicyGerman
{
protected:
std::string message() const
{
return "Hallo Welt!";
}
};
int main()
{
/* 예 1 */
typedef HelloWorld<OutputPolicyWriteToCout, LanguagePolicyEnglish> HelloWorldEnglish;
HelloWorldEnglish hello_world;
hello_world.run(); // prints "Hello, World!"
/* 예 2
*위와 같지만, 다른 언어를 출력하도록 하였다 */
typedef HelloWorld<OutputPolicyWriteToCout, LanguagePolicyGerman> HelloWorldGerman;
HelloWorldGerman hello_world2;
hello_world2.run(); // prints "Hallo Welt!"
}
멤버 함수로 print를 가지는 또 다른 OutputPolicy에 대한 클래스를 작성하는 것으로 새로운 OutputPolicy를 정의할 수 있다. 외부 링크 |
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia