ÀÚ, ±×·³ WTLÀÌ °ú¿¬ Àß ¼³Ä¡µÇ¾ú´ÂÁö ù ¹ø° ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ. MFC¸¦ óÀ½ ¹è¿ï ¶§Ã³·³ ÀÏ´Ü ¸¶¹ý»ç¸¦ µ¹·Á º¸°í ¸¶¹ý»ç°¡ »ý¼ºÇÑ Äڵ带 ºÐ¼®ÇÑ ÈÄ ¿øÇÏ´Â °÷¿¡ Äڵ带 ÀÛ¼ºÇÏ´Â ½ÄÀ¸·Î ½Ç½ÀÇÏ¸é µÈ´Ù.
¿¹ Á¦ : WTLFirst |
»õ ÇÁ·ÎÁ§Æ® ´ëÈ»óÀÚ¸¦ ¶ç¿ì¸é ÇÁ·ÎÁ§Æ® Çü½ÄÀÇ Visual C++ Æú´õ ¾Æ·¡¿¡ WTLÀ̶ó´Â ³ëµå°¡ µî·ÏµÇ¾î ÀÖÀ¸¸ç ÀÌ ³ëµå¸¦ ¼±ÅÃÇÏ¸é ¿À¸¥ÂÊ¿¡ ATL/WTL ¸¶¹ý»ç ÅÛÇø´ÀÌ º¸ÀδÙ. ¸¸¾à »õ ÇÁ·ÎÁ§Æ® ´ëÈ»óÀÚ¿¡ WTL ³ëµå°¡ º¸ÀÌÁö ¾Ê´Â´Ù¸é ¸¶¹ý»ç°¡ Á¦´ë·Î µî·ÏµÇÁö ¾ÊÀº °ÍÀ̹ǷΠ¾Õ ÀýÀÇ ¾È³»´ë·Î ½ºÅ©¸³Æ®¸¦ ´Ù½Ã ½ÇÇàÇØ¾ß ÇÑ´Ù.
ÅÛÇø´Àº ATL/WTL Application Wizard Çϳª¹Û¿¡ ¾øÀ¸¹Ç·Î ¼±ÅÃÇÒ °Ô ¾ø´Ù. ¾Æ·¡ÂÊ¿¡ ÇÁ·ÎÁ§Æ® ÀúÀå À§Ä¡¿Í À̸§À» ÀÔ·ÂÇÑ´Ù. WTLExam ¶Ç´Â Àû´çÇÑ ½Ç½À Æú´õ¸¦ ÁغñÇÏ°í ÇÁ·ÎÁ§Æ® À̸§Àº WTLFirst·Î ÁöÁ¤ÇÑ´Ù. È®ÀÎ ¹öÆ°À» ´©¸£¸é MFC ¸¶¹ý»ç¿Í À¯»çÇÑ ¸¶¹ý»ç ´ëÈ»óÀÚ°¡ ³ªÅ¸³´Ù. ÀÌ ´ëÈ»óÀÚ¸¦ º¸¸é WTL·Î ¾î¶² ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Ù.
µðÆúÆ®°¡ °¡Àå º¸ÆíÀûÀÎ ÀÀ¿ë ÇÁ·Î±×·¥ ÇüÅÂÀÎ SDI·Î µÇ¾î ÀÖ¾î µðÆúÆ®¸¦ ¹Þ¾ÆµéÀÌ¸é µÈ´Ù. MDI³ª Ž»ö±â ½ºÅ¸ÀϷεµ ¸¸µé ¼ö ÀÖ°í ´ëÈ»óÀÚ ±â¹ÝÀ¸·Î ¸¸µé ¼öµµ ÀÖ´Ù. ¿À¸¥ÂÊ¿¡´Â ¿©·¯ °¡Áö ÇÁ·ÎÁ§Æ® ¿É¼ÇµéÀÌ ³ª¿µÇ¾î Àִµ¥ ÀÌ Áß Generate .CPP Files ¿É¼ÇÀ» ¼±ÅÃÇÑ´Ù.
ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇÏÁö ¾ÊÀ¸¸é ¸â¹ö ÇÔ¼öµéÀÌ Çì´õ ÆÄÀÏ¿¡ ÀÛ¼ºµÇ¸ç È£ÃâµÉ ¶§ ÀζóÀÎÀ¸·Î È£ÃâµÇ¹Ç·Î ¼Óµµ´Â »¡¶óÁöÁö¸¸ Å©±â¿¡´Â ºÒ¸®ÇÏ´Ù. Çì´õ¿Í ±¸Çö ÆÄÀÏÀ» ºÐ¸®ÇÏ´Â °ÍÀÌ C++ÀÇ Á¤¼®ÀÌ°í ¸ðµç Äڵ带 Çì´õ ÆÄÀÏ¿¡ ´Ù ÀÛ¼ºÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î ÀÌ ¿É¼ÇÀº ¿Ø¸¸Çؼ´Â ¼±ÅÃÇÏ´Â ÆíÀÌ´Ù. ¾ÕÀ¸·Îµµ ÀÌ ¿É¼ÇÀº ¾Ë¾Æ¼ ¼±ÅÃÇϱ⠹ٶõ´Ù.
User Interface Features ÆäÀÌÁö¿¡¼´Â ȸ鿡 ¹èÄ¡ÇÒ UI ¿ä¼Ò¸¦ ¼±ÅÃÇÑ´Ù. Åø¹Ù³ª »óŶõ µîÀ» ºÙÀÏ ¼ö Àִµ¥ µðÆúÆ®·Î ¸ðµç ¿ä¼Ò°¡ ´Ù ¼±ÅõǾî ÀÖ´Ù. ¾ø¾Ö°í ½ÍÀº ¿ä¼Ò¸¦ ¼±Åà ÇØÁ¦ÇÏµÇ Ã¹ ¿¹Á¦À̹ǷΠµðÆúÆ®¸¦ ¹Þ¾Æ µéÀ̵µ·Ï ÇÏÀÚ.
¾Æ·¡ÂÊ¿¡¼´Â ºä ÀÚüÀÇ »ç¿ë ¿©ºÎ¿Í ºäÀÇ Á¾·ù¸¦ ¼±ÅÃÇÑ´Ù. ºä¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é ¸ÞÀÎ ÇÁ·¹ÀÓ¸¸À¸·Î ÇÁ·ÎÁ§Æ®¸¦ ±¸¼ºÇÑ´Ù. ¸ÞÀÎ À©µµ¿ì Çϳª·Î ±¸¼ºµÈ ´Ü¼øÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖÁö¸¸ º°µµÀÇ Â÷Àϵ带 µÎÁö ¾ÊÀ¸¸é Åø¹Ù±îÁö ÀÛ¾÷ ¿µ¿ª¿¡ Æ÷ÇԵǹǷΠ¿©·¯ ¸ð·Î ºÒÆíÇÏ´Ù. ¿Ø¸¸ÇÏ¸é ºä´Â »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.
ºäÀÇ Á¾·ù´Â Æû ºä, ½ºÅ©·Ñ ºä, ¿¡µðÆ® ºä µî MFC°¡ Á¦°øÇÏ´Â ºä ÆÄ»ý Ŭ·¡½º¿Í °³³äÀÌ °ÅÀÇ ºñ½ÁÇÏ´Ù. ù ¿¹Á¦À̴ϸ¸Å ÀÌ ÆäÀÌÁöÀÇ ¿É¼ÇÀº µðÆúÆ®¸¦ ¹Þ¾ÆµéÀÌÀÚ. Finish ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®ÀÇ °ñ°ÝÀÌ ¿Ï¼ºµÈ´Ù. ¸¶¹ý»ç°¡ ÇÁ·ÎÁ§Æ®¸¦ ¾î¶»°Ô ¸¸µé¾î ³õ¾Ò´ÂÁö ¼Ö·ç¼Ç Ž»ö±â¸¦ º¸ÀÚ.
MFC¿Í °ÅÀÇ À¯»çÇÑ ÇüÅ·ΠÇÁ·ÎÁ§Æ®°¡ »ý¼ºµÈ´Ù. ¸¶¹ý»ç°¡ ¸¸µç ÄÚµåÀ̹ǷΠÀÌ »óÅ·εµ ¿¡·¯¾øÀÌ Àß ÄÄÆÄÀÏµÇ°í ½ÇÇàµÈ´Ù. ¹°·Ð Ưº°ÇÑ µ¿ÀÛÀº ¾ø°í Ãâ·Âµµ ÀüÇô ¾ø´Ù. WTLFirstView.cpp¸¦ ¿¾î OnPaint¿¡ ¹®ÀÚ¿ Ãâ·Â Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ.
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
dc.TextOut(10,10,TEXT("WTL First Program"));
return 0;
}
CPaintDC °´Ã¼ dcÀÇ ¸â¹ö ÇÔ¼ö TextOutÀ» È£ÃâÇϱ⸸ ÇÏ¸é µÈ´Ù. MFC¿Í °ÅÀÇ À¯»çÇؼ Ä£¼÷ÇÏ°Ô ´À²¸Áø´Ù. ´Ù½Ã ÄÄÆÄÀÏÇϸé ÀÛ¾÷ ¿µ¿ª ¿ÞÂÊ À§¿¡ ¹®ÀÚ¿ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù.
¸Þ´ºµµ ´Þ·Á ÀÖ°í Åø¹Ù, »óŶõµµ ºÙ¾î ÀÖ´Ù. ¸Þ´º ¸ñ·ÏÀ» ¿¾î º¸¸é Ç׸ñ ¿·¿¡ ¾ÆÀÌÄܵµ Ç¥½ÃµÇ¾î Àִµ¥ MFCº¸´Ù ¿ÀÈ÷·Á ´õ ÃÖ½ÅÇüÀÌ´Ù. MFC´Â ¾ÆÁ÷±îÁöµµ À©µµ¿ìÁîÀÇ Ç¥ÁØ ¸Þ´º¸¸ Áö¿øÇϴµ¥ ºñÇØ WTLÀÇ ¸Þ´º´Â ½Ã½ºÅÛ ¸Þ´º°¡ ¾Æ´Ï¶ó »ç½ÇÀº Ä¿½ºÅÒ ÄÁÆ®·ÑÀÌ´Ù.
¸¶¹ý»ç°¡ ¾î¶² ½ÄÀ¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¾î ³õ¾Ò´ÂÁö ºÐ¼®ÇØ º¸ÀÚ. ¸ÕÀú stdafx.h¸¦ º¸¸é WTLÀ» À§ÇÑ Çʼö Çì´õ ÆÄÀÏÀ» º¼ ¼ö ÀÖ´Ù.
#include <atlbase.h>
#include <atlapp.h>
extern CAppModule _Module;
#include <atlwin.h>
#include <atlframe.h>
#include <atlctrls.h>
#include <atldlgs.h>
#include <atlctrlw.h>
atlapp.h°¡ WTLÀÇ ±âº»ÀûÀÎ Á¤ÀǸ¦ Á¦°øÇÏ´Â Çì´õ ÆÄÀÏÀ̸ç atlbase.h´Â ATLÀÇ ±âº» ŸÀÔÀ» Á¤ÀÇÇÏ´Â Çì´õ ÆÄÀÏÀÌ´Ù. WTLÀ» »ç¿ëÇÏ·Á¸é ÀÌ µÑÀº ¹«Á¶°Ç Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù. _ModuleÀº MFCÀÇ theApp¿¡ ÇØ´çÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ Àü¿ª °´Ã¼ÀÌ´Ù. WTLFirst.cpp¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç ¾ðÁ¦µçÁö ÂüÁ¶ÇÒ ¼ö ÀÖµµ·Ï stdafx.h¿¡ extern ¼±¾ðµÇ¾î ÀÖ´Ù. ³ª¸ÓÁö Çì´õ ÆÄÀÏÀº ÇÁ·¹ÀÓ, ÄÁÆ®·Ñ, ´ëÈ»óÀÚ µîÀÇ ·¡ÆÛ Å¬·¡½º¸¦ Á¤ÀÇÇÑ´Ù.
WTLFirst.cpp¿¡´Â ÀÀ¿ë ÇÁ·Î±×·¥ ÀÚü¿¡ ÇØ´çÇÏ´Â _Module Àü¿ª °´Ã¼¸¦ ¼±¾ðÇÏ°í ÀÀ¿ë ÇÁ·Î±×·¥ ÃʱâÈ ¹× ½ÇÇàÀ» À§ÇÑ µÎ °³ÀÇ Àü¿ª ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖ´Ù. Áö±Ý Àüü Äڵ带 ´Ù ºÐ¼®ÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î Áß¿äÇÑ ºÎºÐ¸¸ ¹ßÃéÇØ º¸ÀÚ.
CAppModule _Module;
int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
....
CMainFrame wndMain;
wndMain.CreateEx();
wndMain.ShowWindow(nCmdShow);
int nRet = theLoop.Run();
return nRet;
}
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{
....
hRes = _Module.Init(NULL, hInstance);
int nRet = Run(lpstrCmdLine, nCmdShow);
_Module.Term();
....
return nRet;
}
¿£Æ®¸® Æ÷ÀÎÆ®ÀÎ _tWinMain¿¡¼ Àü¿ª Ãʱâȸ¦ ¼öÇàÇÏ°í Run ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. RunÀº ¸ÞÀÎ À©µµ¿ì¸¦ »ý¼ºÇÏ°í ¸Þ½ÃÁö ·çÇÁ¸¦ µ¹¸°´Ù. theLoop.Run ¾È¿¡ ¸Þ½ÃÁö ·çÇÁ°¡ ÀÖÀ» °ÍÀÓÀº ½±°Ô ÁüÀ۵ȴÙ. À©µµ¿ìÁî ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÀϹÝÀûÀÎ ÃʱâÈ ¹× ½ÇÇà ÀýÂ÷¸¦ µÎ ÇÔ¼ö¿¡ ³ª´©¾î ³õÀº °ÍÀε¥ ÀÌ·± ±¸Á¶´Â MFCº¸´Ù´Â Win32¿¡ ´õ °¡±õ´Ù. ´ÙÀ½Àº ¸ÞÀÎ À©µµ¿ì¿¡ ÇØ´çÇÏ´Â CMainFrameÀÇ ¼±¾ð¹®À» º¸ÀÚ.
class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>,
public CMessageFilter, public CIdleHandler
{
public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
CWTLFirstView m_view;
....
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
....
END_MSG_MAP()
....
};
¹«·Á 4Áß ´ÙÁß »ó¼ÓÀ» ÇÏ°í ÀÖ´Ù. ÇÁ·¹ÀÓ À©µµ¿ìÀÇ ±â´É ´ëºÎºÐÀº CFrameWindowImpl ÅÛÇø´¿¡ ±¸ÇöµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ÅÛÇø´À¸·Î »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù. ÅÛÇø´ Àμö·Î Áö±Ý Á¤ÀÇÇÏ°í ÀÖ´Â CMainFrameÀÌ Àü´ÞµÇ´Â ±âÀÌÇÑ ±¸Á¶¸¦ °¡Áö´Âµ¥ ÀÌ¿¡ ´ëÇؼ´Â ´ÙÀ½ Ç׿¡¼ ¹®¹ýÀ» ¿¬±¸ÇØ º¸ÀÚ. ÀÌ ¿Ü¿¡ UI °»½Å, ¸Þ½ÃÁö ÇÊÅ͸µ, ¾ÆÀ̵é 󸮸¦ À§ÇÑ Å¬·¡½º¸¦ »ó¼Ó¹Þ´Â´Ù.
À©µµ¿ì Ŭ·¡½º µî·ÏÀ» À§ÇÑ ¸ÅÅ©·Î ±¸¹®ÀÌ ¼±µÎ¿¡ ÀÖ°í ºä¸¦ ¸â¹ö·Î ¼±¾ðÇß´Ù. ±×¸®°í ¸Þ½ÃÁö ¸ÊÀÌ ÀÛ¼ºµÇ¾î ÀÖ´Ù. ¸Þ½ÃÁö¿Í À̸¦ ó¸®ÇÒ ¸â¹ö ÇÔ¼ö¸¦ ´ëÀÀ½ÃÅ°´Â ¿ªÇÒÀ» ÇÑ´Ù. ¸Þ½ÃÁö ¸ÊÀÌ MFC¿Í´Â ´Þ¸® ±¸Á¶Ã¼ ¹è¿ÀÌ ¾Æ´Ï¶ó ÀÏÁ¾ÀÇ ÄÚµåÀ̱⠶§¹®¿¡ Çì´õ ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Ù. ¸ÞÀÓ ÇÁ·¹ÀÓÀÇ ±¸Çö ÆÄÀÏ¿¡´Â °¢ ¸Þ½ÃÁö¿¡ ´ëÇÑ Çڵ鷯°¡ Á¤ÀǵǾî Àִµ¥ ´ëÇ¥ÀûÀ¸·Î OnCreate¸¸ º¸ÀÚ.
LRESULT CMainFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
HWND hWndCmdBar = m_CmdBar.Create(....);
HWND hWndToolBar = CreateSimpleToolBarCtrl(....);
CreateSimpleReBar(....);
AddSimpleReBarBand(hWndCmdBar);
AddSimpleReBarBand(hWndToolBar, NULL, TRUE);
CreateSimpleStatusBar();
m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
....
return 0;
}
¸Þ´º, Åø¹Ù, »óŶõ, ¸®¹Ù µîÀ» Â÷·Ê·Î »ý¼ºÇÏ°í ¸®¹Ù¿¡ ¸Þ´º¿Í Åø¹Ù¸¦ ¹èÄ¡ÇÑ´Ù. »óŶõÀº ¾Æ·¡ÂÊ¿¡ ¹èÄ¡µÇ¸ç Áß¾Ó¿¡´Â ºä¸¦ ¹èÄ¡ÇÑ´Ù. Â÷ÀϵåµéÀÌ ¸ÞÀÎ ÇÁ·¹ÀÓÀÇ °¢ ºÎºÐ¿¡ ¹èÄ¡µÇ´Â °ÍÀÌ´Ù. Áö±ØÈ÷ ¸ÞÀÎ À©µµ¿ì´Ù¿î »ó½ÄÀûÀÎ ÄÚµåÀÌ´Ù. ´ÙÀ½Àº ºä¸¦ º¸ÀÚ. ¸ÞÀÎ ÇÁ·¹ÀÓÀÇ ¼±¾ð¹®°ú Å©°Ô Ʋ¸®Áö ¾Ê´Ù.
class CWTLFirstView : public CWindowImpl<CWTLFirstView>
{
public:
DECLARE_WND_CLASS(NULL)
BOOL PreTranslateMessage(MSG* pMsg);
BEGIN_MSG_MAP(CWTLFirstView)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()
....
};
À©µµ¿ìÀÇ ±â´É ´ëºÎºÐÀº CWindowImple¿¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ÀÌ ÅÛÇø´À¸·ÎºÎÅÍ »ó¼Ó¹Þ´Â´Ù. ¸Þ½ÃÁö ¸Ê¿¡´Â OnPaint¸¸ Á¤ÀǵǾî Àִµ¥ ¸¶¹ý»ç°¡ ¸¸µç OnPaint¿¡´Â ¾Æ¹« Ãâ·Â Äڵ尡 ¾øÁö¸¸ ºä´Â ´ç¿¬È÷ ¹º°¡¸¦ Ãâ·ÂÇÒ °ÍÀ̹ǷΠOnPaint¸¸ ¹Ì¸® ¸¸µé¾î ³õÀº °ÍÀÌ´Ù. ¿ì¸®´Â ºó OnPaint¿¡¼ TextOut¹®À» ÀÛ¼ºÇßÀ¸¸ç ÀÌ Äڵ忡 ÀÇÇØ ¹®ÀÚ¿ÀÌ Ãâ·ÂµÈ´Ù.
±× ¿Ü AboutDlg °°Àº º° ¾²Àßµ¥±â ¾ø´Â Ŭ·¡½º°¡ ¼±¾ðµÇ¾î ÀÖÀ¸¸ç ¸®¼Ò½º¿¡´Â ÀÀ¿ë ÇÁ·Î±×·¥ °¢ ºÎºÐÀ» Àå½ÄÇÏ´Â ¸®¼Ò½ºµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. Á» ´õ »ó¼¼ÇÑ ±¸Á¶´Â ¾ÕÀ¸·Î ¿¬±¸ÇØ ºÁ¾ß°ÚÁö¸¸ ÀüüÀûÀÎ ±¸Á¶´Â ºñ±³Àû ´Ü¼øÇÑ ÆíÀÌ´Ù. ÀÌ Å¬·¡½ºµéÀÌ ¾î¶² ½ÄÀ¸·Î µ¿ÀÛÇÏ´ÂÁö´Â Àß ¸ð¸£°ÚÁö¸¸ ´ëÃæÀÇ Å« ±×¸²Àº ÆÄ¾ÇµÉ °ÍÀÌ´Ù.
¸ÞÀÓ ÇÁ·¹ÀÓÀ̳ª ºä Ŭ·¡½ºÀÇ ¼±¾ð¹®À» º¸¸é ±â¹Ý Ŭ·¡½º·Î ÅÛÇø´ÀÌ ÁöÁ¤µÇ¾î ÀÖ°í ÀÌ ÅÛÇø´ÀÇ Àμö·Î Áö±Ý ¼±¾ðÇϴ Ŭ·¡½º¸íÀÌ Àü´ÞµÈ´Ù. ¹º°¡ º¹ÀâÇØ º¸À̴µ¥ Á» ´õ °£´ÜÇÑ Çü½ÄÀ¸·Î Á¤¸®ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.
class Child : public Parent<Child>
Áö±Ý ¼±¾ðÇÏ°í Àִ Ŭ·¡½º¸¦ »ó¼Ó ¸®½ºÆ®¿¡ »ç¿ëÇÏ´Â ½ÄÀε¥ Á» ÀÌ»óÇØ º¸ÀÌÁö¸¸ C++ ¹®¹ý»ó ÀÌ´Â ÇÕ¹ýÀûÀÌ´Ù. ¿Ö³ÄÇϸé ÄÄÆÄÀÏ·¯´Â ¼Ò½º¸¦ ¼ø¼´ë·Î ÀÐÀ¸¸ç class Child ¼±¾ð¿¡ ÀÇÇØ Child¶ó´Â ¸íĪÀÌ Å¬·¡½º ŸÀÔ¸íÀ̶ó´Â °ÍÀ» ¸ÕÀú ¾Ë°Ô µÇ°í ±× ÈÄ Parent<Child>¸¦ ÄÄÆÄÀÏÇϱ⠶§¹®ÀÌ´Ù.
Ŭ·¡½º ÀÚ½ÅÀÌ »ó¼Ó ¸®½ºÆ®¿¡ ³ªÅ¸³ª´Â ÀÌ·± Çü½ÄÀº ÀϹÝÀûÀÎ C++ ÄÚµù¿¡¼´Â °ÅÀÇ »ç¿ëµÇÁö ¾ÊÁö¸¸ ATL¿¡¼ ¾ÆÁÖ ÈçÇÏ°Ô »ç¿ëµÈ´Ù. ÀÌ ¹®¹ýÀº ÄÄÆÄÀÏ Å¸ÀÓ¿¡ °¡»ó ÇÔ¼ö È£ÃâÀ» Èä³»³»´Â È¿°ú¸¦ ³½´Ù. ÀÌ ¹®¹ýÀÌ ¾î°¼ °¡»ó ÇÔ¼ö¿Í °°Àº È¿°ú°¡ ³ª´ÂÁö °£´ÜÇÑ ÄÜ¼Ö ¿¹Á¦¸¦ ¸¸µé¾î ¹®¹ýÀ» Á¡°ËÇØ º¸ÀÚ.
¿¹ Á¦ : VirtualFunc |
#include <stdio.h>
class Dog
{
public:
virtual void Bark() { printf("mung mung\r\n"); }
};
class MadDog : public Dog
{
public:
virtual void Bark() { printf("yaong yaong\r\n"); }
};
void KickDog(Dog *pDog)
{
pDog->Bark();
}
void main()
{
Dog Happy;
MadDog DdangChil;
KickDog(&Happy);
KickDog(&DdangChil);
}
C++ ¹®¹ý¼¿¡ ³ª¿Ã¸¸ÇÑ ¾ÆÁÖ ÀüÇüÀûÀÎ °¡»ó ÇÔ¼ö ¿¹Á¦ÀÌ´Ù. °³´Â ¢À» ¼ö ÀÖÀ¸¸ç µû¶ó¼ Bark¶ó´Â ¸â¹ö ÇÔ¼ö¸¦ °¡Áø´Ù. Á¤»óÀûÀÎ °³´Â ¸Û¸ÛÀ̶ó°í ¢Áö¸¸ °³ÀÇ Á¾·ù¿¡ µû¶ó ¢´Â ¹æ¹ýÀÌ ´Þ¶óÁú ¼öµµ ÀÖÀ¸¹Ç·Î Bark´Â °¡»ó ÇÔ¼ö·Î ¼±¾ðµÇ¾ú´Ù.
ÀϹÝÀûÀÎ °³·ÎºÎÅÍ ÆÄ»ýµÈ ¹ÌÄ£°³´Â Bark ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ¿© ¾ß¿Ë ¾ß¿ËÀ̶ó°í ¢´Â´Ù. ¾îµð¼ ¿Ü±¹¾î Çϳª ¹è¿î ¸ð¾çÀÌ´Ù. KickDog ÇÔ¼ö´Â °¡¸¸È÷ ÀÖ´Â °³¸¦ ¹ß·Î Â÷´Â µ¿ÀÛÀ» Çϴµ¥ Â÷ÀÎ °³´Â ¢±â ¸¶·ÃÀÌ´Ù. À̶§ ¾î¶² °³¸¦ °Çµå·È´Â°¡¿¡ µû¶ó ¢´Â ¼Ò¸®°¡ ´Þ¶óÁø´Ù. pDogÀÇ ½ÇÁ¦ ŸÀÔ¿¡ µû¶ó È£ÃâµÇ´Â Bark ÇÔ¼ö°¡ ¹Ù²î±â ¶§¹®ÀÌ´Ù.
main¿¡¼ ÀϹÝÀûÀÎ °³ ÇØÇÇ¿Í ¹ÌÄ£°³ ¶¯Ä¥ÀÌ °´Ã¼¸¦ ¸¸µé°í µÎ °³¸¦ Â÷·Ê´ë·Î Â÷ º¸¾Ò´Ù. ÇØÇÇ¿Í ¶¯Ä¥ÀÌ´Â ´ÙÀ½°ú °°ÀÌ ¹ÝÀÀÇÒ °ÍÀÌ´Ù.
mung mung
yaong yaong
¶È°°Àº KickDog ÇÔ¼ö¸¦ È£ÃâÇßÁö¸¸ È£Ãâ °´Ã¼¿¡ µû¶ó ¹ÝÀÀÀÌ ´Þ¶óÁö´Â ÀüÇüÀûÀÎ ´ÙÇü¼º ¿¹Á¦ÀÌ´Ù. ¸¸¾à ÀÌ ¿¹Á¦°¡ ÀÌÇصÇÁö ¾Ê´Â´Ù¸é ÀÌÈÄÀÇ °Á´ ´õ ÀÐÀ» ÇÊ¿ä¾ø´Ù. ¿· ¸Þ´ºÀÇ C/C++ °Á¶õÀ¸·Î °¡¼ 3ºÎ 30ÀåºÎÅÍ ²Ä²ÄÈ÷ ´Ù½Ã ÀÐÀº ÈÄ µ¹¾Æ¿À±â ¹Ù¶õ´Ù. ATLÀº ÀÌ·± ´ÙÇü¼ºÀÌ ÇÊ¿äÇÒ ¶§ °¡»ó ÇÔ¼ö¸¦ ¾²Áö ¾Ê°í ÅÛÇø´À» »ç¿ëÇÑ´Ù. ¶È°°ÀÌ µ¿ÀÛÇÏ´Â ¿¹Á¦¸¦ ATL·Î ¸¸µé¾î º¸ÀÚ. ¹æ½ÄÀº ´Ù¸£Áö¸¸ ½ÇÇà °á°ú´Â µ¿ÀÏÇÏ´Ù.
#include <stdio.h>
template <typename T> class DogBase
{
public:
void KickDog()
{
T* pDog=(T *)this;
pDog->Bark();
}
};
class Dog : public DogBase<Dog>
{
public:
void Bark() { printf("mung mung\r\n"); }
};
class MadDog : public DogBase<MadDog>
{
public:
void Bark() { printf("yaong yaong\r\n"); }
};
void main()
{
Dog Happy;
MadDog DdangChil;
Happy.KickDog();
DdangChil.KickDog();
}
DogBase¶ó´Â Ŭ·¡½º ÅÛÇø´À» Á¤ÀÇÇ쵂 ÀÌ ÅÛÇø´ÀÇ KickDog ÇÔ¼ö´Â this¸¦ ÅÛÇø´ÀÇ Àμö ŸÀÔÀÎ TÀÇ Æ÷ÀÎÅͷΠij½ºÆÃÇÑ ÈÄ TÀÇ Bark ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. °£´ÜÇÏ°Ô º¸À̱â À§ÇØ C ½ºÅ¸ÀÏÀÇ Ä³½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇߴµ¥ C++ ½ºÅ¸ÀÏ·Î ¾²¸é ´ÙÀ½°ú °°´Ù.
T* pDog=static_cast<T *>(this);
Dog°ú MadDogÀº DogBase ÅÛÇø´À¸·ÎºÎÅÍ »ó¼ÓÀ» ¹ÞµÇ ÀÚ±â ÀÚ½ÅÀ» ÅÛÇø´ÀÇ Àμö·Î Àü´ÞÇÏ¿© ij½ºÆà ŸÀÔÀ» Á¦°øÇÑ´Ù. ±×¸®°í ÀÚ±â ÀÚ½ÅÀÇ °íÀ¯ÇÑ Bark ÇÔ¼ö¸¦ ºñ°¡»ó ÇÔ¼ö·Î Á¤ÀÇÇÑ´Ù. main¿¡¼´Â µÎ °´Ã¼¸¦ ¼±¾ðÇÏ°í KickDog ÇÔ¼ö¸¦ È£ÃâÇߴµ¥ È£Ãâ °´Ã¼ÀÇ ÇÔ¼ö°¡ Á¤È®ÇÏ°Ô È£ÃâµÈ´Ù. ¿Ö ±×·±Áö´Â µÎ Ŭ·¡½º¸¦ ±¸Ã¼ÈÇØ º¸¸é ¾Ë ¼ö ÀÖ´Ù.
class Dog
{
public:
void KickDog()
{
Dog* pDog=(Dog *)this;
pDog->Bark();
}
void Bark() { printf("mung mung\r\n"); }
};
class MadDog
{
public:
void KickDog()
{
MadDog* pDog=(MadDog *)this;
pDog->Bark();
}
void Bark() { printf("yaong yaong\r\n"); }
};
DogÀÇ KickDog ÇÔ¼ö´Â this¸¦ ÀÚ±â ÀÚ½ÅÀÇ Å¸ÀÔÀ¸·Î ij½ºÆÃÇÑ ÈÄ ÀÚ½ÅÀÇ Bark ÇÔ¼ö¸¦ È£ÃâÇÏ°í MadDogÀÇ KickDog ÇÔ¼öµµ ¸¶Âù°¡Áö·Î this¸¦ MadDog ŸÀÔÀ¸·Î ij½ºÆÃÇÑ ÈÄ Bark ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. this¸¦ È£Ãâ Ŭ·¡½ºÀÇ Å¸ÀÔÀ¸·Î ¹Ù²Û ÈÄ È£ÃâÇϹǷΠÀÚ½ÅÀÇ Bark ÇÔ¼ö°¡ È£ÃâµÇ´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù. ´Ù¸¸ ÀÌ Ä³½ºÆà ±¸¹®ÀÌ ·±Å¸ÀÓÀÌ ¾Æ´Ï¶ó ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ¼öÇàµÈ´Ù´Â Á¡ÀÌ ´Ù¸¦ »ÓÀÌ´Ù. ºÎ¸ðÀÇ ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏÁö ¾Ê°í ±×´ë·Î »ó¼Ó¹Þ´Â ±â¹ýµµ º° ÀÌ»ó¾øÀÌ Àû¿ëµÈ´Ù. ´ÙÀ½ Äڵ带 Ãß°¡ÇØ º¸ÀÚ.
class DrunkenDog : public DogBase<MadDog>
{
public:
void Drink() { printf("one shot\r\n"); }
};
void main()
{
....
DrunkenDog JJong;
JJong.KickDog();
JJong.Drink();
}
¼úÃëÇÑ °³´Â ¹ÌÄ£°³·ÎºÎÅÍ »ó¼ÓÀ» ¹ÞÀ¸¸ç ¼úÁÖÁ¤À» ÇÏ´Â Ãß°¡ µ¿ÀÛÀ» °¡Áø´Ù. Bark¸¦ ÀçÁ¤ÀÇÇÏÁö ¾Ê´Â ´ë½Å DogBaseÀÇ Àμö·Î ºÎ¸ðÀÎ MadDogÀ» Àü´ÞÇÏ¿© ÀÌ Å¸ÀÔÀÇ Bark¸¦ È£ÃâÇϵµ·Ï Çß´Ù. ½ÇÇàÇØ º¸ÀÚ.
yaong yaong
one shot
¢À» ¶§´Â ºÎ¸ð ŸÀÔÀÎ MadDogÀÇ µ¿ÀÛÀ» µû¸£°í ¼úÁÖÁ¤À» ÇÒ ¶§´Â Àڱ⠳ª¸§´ë·ÎÀÇ µ¿ÀÛÀ» ÇÑ´Ù. ¿ÂÀüÇÏ°Ô ´ÙÇü¼ºÀÌ ¼º¸³ÇÏ¸ç °¡»ó ÇÔ¼ö¸¦ ¾²´Â °Í°ú µ¿ÀÏÇÑ È¿°ú¸¦ ³½´Ù.
±×·¸´Ù¸é ATLÀº ¿Ö ÄÄÆÄÀÏ·¯°¡ Á¦°øÇÏ´Â °¡»ó ÇÔ¼ö¸¦ ¾²Áö ¾Ê°í ÀÌ·± º¹ÀâÇÑ ¹æ½ÄÀ» »ç¿ëÇÏ´Â °ÍÀϱî? ÀÌ ±â¹ýÀº ¸î °¡Áö ÀåÁ¡À» Á¦°øÇϴµ¥ ¸â¹ö ÇÔ¼ö È£Ãâ¿¡ °´Ã¼¸¦ Á÷Á¢ »ç¿ëÇϹǷΠÆ÷ÀÎÅ͸¦ ¾µ ÇÊ¿ä°¡ ¾øÀ¸¸ç µû¶ó¼ NULL Æ÷ÀÎÅͷκÎÅÍ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â À§Çèµµ ¾ø´Ù. ¶ÇÇÑ ÄÄÆÄÀÏ Å¸ÀÓ¿¡ È£ÃâÇÒ ÇÔ¼ö°¡ °áÁ¤µÇ¹Ç·Î Á¤¹ÐÇÑ ÃÖÀûÈ°¡ °¡´ÉÇØ ÈξÀ ´õ ¼Óµµ°¡ ºü¸£´Ù.
ATLÀÌ ÀÌ·± ¹æ½ÄÀ» »ç¿ëÇÏ´Â °¡Àå Å« ÀÌÀ¯´Â °¡»ó ÇÔ¼ö¸¦ À§ÇÑ vtableÀ» ¸¸µéÁö ¾Ê¾Æµµ µÇ±â ¶§¹®ÀÌ´Ù. »ç½Ç ÀϹÝÀûÀÎ C++ Äڵ忡¼ vtableÀº ´Ü¼øÇÑ ÇÔ¼ö Æ÷ÀÎÅÍ ¹è¿À̱⠶§¹®¿¡ ¸Þ¸ð¸®¸¦ ±×´ÙÁö ¸¹ÀÌ Â÷ÁöÇÏÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ATLÀÇ °æ¿ì´Â ±×·¸Áö ¾Ê´Ù. 20Áß ´ÙÁß»ó¼ÓÀ» ¾ÆÁÖ ¿ì½À°Ô ÇØ ´ë°í ±×·± »ó¼ÓÀÇ ´Ü°è°¡ 5´Ü°è~10´Ü°è¸¦ ³Ñ¾î°¡´Â °æ¿ì°¡ ¿Õ¿Õ ÀÖ´Ù º¸´Ï vtableÀÇ Å©±â°¡ °áÄÚ ¸¸¸¸ÇÏÁö°¡ ¾ÊÀº °ÍÀÌ´Ù.
ÀÛ°í °¡º¿î ¶óÀ̺귯¸®¸¦ Ç¥¹æÇÏ´Â ATL·Î¼´Â Å©±â³ª ¼Óµµ¿¡ ºÒ¸®ÇÑ °¡»ó ÇÔ¼ö¸¦ ¸¶À½´ë·Î ¾µ ¼ö ¾ø°í ±×·¡¼ ´ëüµÇ´Â ¹æ¹ýÀ» ãÀº °ÍÀÌ ¹Ù·Î ÅÛÇø´À» ÀÌ¿ëÇÑ Ä³½ºÆÃÀÎ °ÍÀÌ´Ù. ÀÌ ¿¹Á¦°¡ Àß ÀÌÇصÇÁö ¾Ê¾Æµµ °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÀÌÈÄ ATL Äڵ带 ºÐ¼®ÇÏ´Â °úÁ¤¿¡¼ ÀÌ·± »ó¼Ó¹®À» º¸¸é ´ÙÇü¼ºÀ» Àú·ÅÇÏ°Ô ±¸ÇöÇϱâ À§ÇÑ ÄÚµå¶ó°í »ý°¢ÇÏ¸é µÈ´Ù.
WTLÀÇ ÅÛÇø´ ±¸¹®Àº ¹Í½ºÀÎ(Mix in)À̶ó´Â ¾ÆÁÖ Àç¹ÌÀÖ´Â ±â¹ýÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. ¹Í½ºÀΠŬ·¡½º´Â ¹Ì¸® ±¸ÇöµÈ ±â´ÉÀ» ÅÛÇø´ »ó¼ÓÀ» ÅëÇØ ´Ù¸¥ Ŭ·¡½º¿¡ Á¦°øÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±â¹ý ÀÚü¸¸À¸·Î º»´Ù¸é »ó¼Ó°ú À¯»çÇÏÁö¸¸ ÆÄ»ý Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù´Â Á¡¿¡¼ ´Ü¼øÇÑ »ó¼Ó°ú´Â È¿°ú°¡ Á» ´Ù¸£´Ù.
¿¹ Á¦ : MixIn |
#include <stdio.h>
#include <windows.h>
template <typename T> class Sentinel
{
public:
void OnThief()
{
T* pDog=(T *)this;
for (int i=0;i<5;i++) {
pDog->Bark();
printf("¿Ô´Ù¸® °¬´Ù¸®...\r\n");
Sleep(500);
}
}
};
class Dog : public Sentinel<Dog>
{
public:
void Bark() { printf("mung mung\r\n"); }
};
class Cow : public Sentinel<Cow>
{
public:
void Bark() { printf("ume ume\r\n"); }
};
void main()
{
Dog Happy;
Happy.OnThief();
Cow So;
So.OnThief();
}
ÀÌ ¿¹Á¦¿¡µµ ¿©ÀüÈ÷ °³°¡ µîÀåÇϴµ¥ Dog Ŭ·¡½º ±× ÀÚü´Â ´Ü¼øÈ÷ ¸Û¸ÛÇÏ°í Áþ´Â ±â´É¹Û¿¡ ¾ø´Ù. ÀÌ °³¿¡°Ô µµµÏÀ» ¦i´Â ±â´ÉÀ» Ãß°¡Çϱâ À§ÇØ Sentinel ¹Í½ºÀΠŬ·¡½º¸¦ Á¤ÀÇÇß´Ù. SentinelÀÇ OnThief ÇÔ¼ö´Â this¸¦ ÅÛÇø´ Àμö TŸÀÔÀ¸·Î ij½ºÆÃÇÑ ÈÄ Bark ÇÔ¼ö¸¦ È£ÃâÇϱ⸦ ´Ù¼¸¹ø ¼öÇàÇÑ´Ù. ¶ÇÇÑ ¿Ô´Ù¸® °¬´Ù¸® ÇÏ¸é¼ µµµÏÀ» À§ÇùÇϱ⵵ ÇÑ´Ù.
¾Æ¹«¸® ¾Ö¿Ï°ßÀÏÁö¶óµµ ¿©·¯ ¹ø ¢°í À¸¸£··´ë¸é µµµÏ³ðµµ ±ÍÂú¾Æ¼ ±×³É °¡±â ¸¶·ÃÀÌ´Ù. ¾î·µç µµµÏ³ðÀ» ¦i´Âµ¥´Â È®½ÇÈ÷ È¿°ú°¡ ÀÖ´Ù. main¿¡¼ Dog ŸÀÔÀÇ °´Ã¼ Happy¸¦ »ý¼ºÇÑ ÈÄ OnThief ÇÔ¼ö¸¦ È£ÃâÇØ º¸¾Ò´Ù. ¢À¸¸é¼ µµµÏÀ» À§ÇùÇÏ´Â µ¿ÀÛÀ» ¹«·Á ´Ù¼¸¹øÀ̳ª ¼öÇàÇÒ °ÍÀÌ´Ù.
mung mung
¿Ô´Ù¸® °¬´Ù¸®...
mung mung
¿Ô´Ù¸® °¬´Ù¸®...
¾ð¶æ º¸±â¿¡´Â º° ´ë´ÜÇÑ ±â´Éó·³ º¸ÀÌÁö ¾Ê´Â´Ù. Àúµý °É ÇÏ°í ½ÍÀ¸¸é OnThief ÇÔ¼ö¸¦ ±×³É Dog¿¡ ÀÛ¼ºÇØ ³ÖÀ¸¸é µÉ °Í ¾Æ´Ñ°¡? ÇÏÁö¸¸ OnThief°¡ ÇÏ´Â ÀÏÀÌ ÀÌ ¿¹Á¦Ã³·³ ±×¸® °£´ÜÇÑ µ¿ÀÛÀÌ ¾Æ´Ï¶ó¸é ¸Å Ŭ·¡½º¸¶´Ù ¶È°°Àº µ¿ÀÛÀ» ¹Ýº¹ÀûÀ¸·Î ±¸ÇöÇÏ´Â °ÍÀº ³¶ºñÀÌ´Ù. ¹Í½ºÀΠŬ·¡½º·Î Çѹø¸¸ Àß ÀÛ¼ºÇØ ³õÀ¸¸é ÆÄ»ý Ŭ·¡½º°¡ ÀÌ µ¿ÀÛÀ» ¾ÆÁÖ ½±°Ô Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù.
¹Ù·Î ¾Æ·¡ÂÊ¿¡ º¸¸é Cow Ŭ·¡½ºµµ Sentinel·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Æ ¼Ò°¡ µµµÏÀ» ¦i´Â µ¿ÀÛÀ» ¸ÚÁö°Ô ¼öÇàÇÑ´Ù. °³¿Í´Â ´Þ¸® ¢´Â ¼Ò¸®°¡ ´Ù¸£±â´Â ÇÏÁö¸¸ À§ÇùÇÏ´Â È¿°ú´Â ºñ½ÁÇÏ´Ù. Bark ÇÔ¼ö°¡ ´ÙÇüÀûÀ¸·Î µ¿ÀÛÇϱ⠶§¹®ÀÌ´Ù. °³³ª ¼Ò³ª Sentinel·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ±â¸¸ ÇÏ¸é µµµÏÀ» Àß ¦iÀ» ¼ö ÀÖ°Ô µÈ´Ù. Sentinel ÅÛÇø´Àº OnThief¶ó´Â µ¿ÀÛÀ» Á¤ÀÇÇϸç ÀÌ µ¿ÀÛÀº ÆÄ»ý Ŭ·¡½ºÀÇ ±â´ÉÀ¸·Î ¼¯¿©¼ µé¾î°£´Ù. ±×·¡¼ ¹Í½ºÀÎÀ̶ó°í ÇÑ´Ù.
±×·¸´Ù¸é »ó¼Ó°ú´Â ¹«¾ùÀÌ Æ²¸°°¡? »ó¼ÓÀº ºÎ¸ð¿¡¼ ÀÚ½ÄÀ¸·Î ÀϹæÀûÀ¸·Î ¸â¹ö¸¦ ¹°·ÁÁÖ´Â °ÍÀÌÁö¸¸ ¹Í½ºÀÎÀº ºÎ¸ð°¡ ÀÚ½ÄÀÇ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù´Â ¸é¿¡¼ ´Ù¸£´Ù. À̶§ ºÎ¸ð°¡ ÀÚ½ÄÀ» ÀνÄÇÏ´Â ¼ö´ÜÀº ¹Ù·Î ÅÛÇø´ÀÇ Àμö¸¦ ÅëÇؼÀÌ´Ù. ´ç¿¬ÇÑ ¾ê±âÁö¸¸ ÅÛÇø´ Àμö´Â ºÎ¸ð°¡ ¿ä±¸ÇÏ´Â ÇÔ¼ö¸¦ ¹Ýµå½Ã ±¸ÇöÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. Bark µ¿ÀÛÀ» ÇÒ ¼ö ¾ø´Â ¹ÙÄû¹ú·¹³ª Áö··ÀÌ´Â µµµÏÀ» ¦iÀ» ¼ö ¾ø´Ù. ¾Æ¹«¸® ¿Ô´Ù¸® °¬´Ù¸® ÇØ ºÁ¾ß ¹âÇô Áױ⸸ ÇÒ »ÓÀÌ´Ù.
WTL¿¡¼ ¹Í½ºÀÎÀº ÅÛÇø´À» ÅëÇØ ¹Ì¸® ±¸ÇöµÈ Äڵ带 ÆÄ»ý Ŭ·¡½º·Î Àü´ÞÇÏ´Â ¾ÆÁÖ ÀϹÝÀûÀÎ ¹æ¹ýÀÌ´Ù. ´Ü¼øÇÑ ÇÔ¼ö È£Ãâ»Ó¸¸ ¾Æ´Ï¶ó ¸Þ½ÃÁö üÀΰú ÇÔ²² °áÇյǾî ƯÁ¤ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ¹æ½ÄÀ» ºÎ¸ð À©µµ¿ì°¡ ¹Ì¸® ÇÁ·Î±×·¡¹ÖÇØ ³õÀ» ¼öµµ ÀÖ´Ù. ¹Í½ºÀÎÀ» ´çÀå ÀÌÇØÇϱâ´Â ½±Áö ¾ÊÀ¸¹Ç·Î ÀÏ´Ü ¿©±â±îÁö¸¸ Á¢¼öÇØ µÎ°í Â÷ÈÄ WTL ¼Ò½º¸¦ µé¿©´Ù º¸¸é¼ ºÐ¼®ÇØ º¸±â ¹Ù¶õ´Ù.