µðÀÚÀÎ ÆÐÅÏ : template method pattern
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Template method pattern

behavioral patternÀ̶ó°í ºÎ¸£±âµµ ÇÑ´Ù. C++ÀÇ template¿Í´Â ¾Æ¹«·± »ó°üÀÌ ¾ø´Ù.

»óÀ§ Ŭ·¡½º, Áï base Ŭ·¡½º´Â ±âº»ÀûÀÎ ¸Þ¼­µå¸¸ Á¦°øÇϰí base Ŭ·¡½º·Î ºÎÅÍ ÆÄ»ýµÈ Ŭ·¡½º¿¡¼­ ÇØ´ç ¸Þ¼­µå¸¦ Á¦Á¤ÀÇ ÇØ¼­ »ç¿ëÇÑ´Ù. ¸¸¾à ÇØ´ç ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇ ÇÏÁö ¾Ê´Â´Ù¸é, ±âº» ¸Þ¼­µå¸¦ ±×´ë·Î »ç¿ëÇÑ´Ù.

Template method patternÀ» »ç¿ëÇÑ °¡Àå ´ëÇ¥ÀûÀÎ ¿¹´Â CÀÇ qsort(3) ÇÔ¼öÀÏ °ÍÀÌ´Ù. qsort´Â ³»ºÎ¿¡ quick sort¾Ë°í¸®Áò¸¸ °¡Áö°í ÀÖÀ¸¸ç, Á¤·ÄÇϰíÀÚ ÇÏ´Â ¿ø¼Ò¸¦ ºñ±³ÇÒ ¾Ë°í¸®ÁòÀ» ÇÔ¼öÆ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ Á¤ÀÇÇÒ ¼ö ÀÖµµ·Ï ÇØ³õ¾Ò´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á, ÇÁ·Î±×·¡¸Ó´Â ´Ù¾çÇÑ Å¸ÀÔÀÇ ¿ø¼Ò¿¡ ´ëÀÀµÇ´Â Á¤·Ä ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Ù.

C++, Java°°Àº °´Ã¼ÁöÇâ ¾ð¾î¿¡¼­´Â ´ÙÇü¼ºÀ» ÀÌ¿ëÇØ¼­ Á»´õ Á÷°üÀûÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ÆÐÅÏÀº ¾Ë°í¸®ÁòÀ» ´Ù¾çÇÏ°Ô Á¤ÀÇ ÇÒ¼ö ÀÖÀ¸¸ç, ¾Ë°í¸®ÁòÀ» ¾î¶»°Ô Á¤ÀÇÇÏ´À³Ä¿¡ µû¶ó¼­ ´Ù¾çÇÑ °á°ú¹°À» ¸¸µé¾î³¾ ¼ö ÀÖ´Ù. ÀÌ °á°ú¹°Àº ÀÀ¿ë ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ view°¡ µÉ ¼ö ÀÖÀ» °ÍÀε¥, ¿©±â¿¡¼­ template method patternÀº MVCÆÐÅÏÀÇ ¼­ºê¼ÂÀÌ µÊÀ» ¾Ë ¼ö ÀÖ´Ù.

¿¹Á¦

C++

sortÇÁ·Î±×·¥À» ¸¸µå´Â°Ô °¡Àå ÁÁÀ» °Í °°±â´ÂÇÏ´Ù. base Ŭ·¡½º´Â sort¾Ë°í¸®ÁòÀ» °¡Áö°í, compare¸Þ¼­µå¿¡¼­ ºñ±³¾Ë°í¸®ÁòÀ» °¡Áöµµ·Ï ÇÏ´Â ½ÄÀÌ´Ù. ±×·¯³ª ¿¹Á¦·Î »ç¿ëÇϱ⿡´Â ±ÍÂúÀº °¨ÀÌ ÀÖÀ¸´Ï ¾ÆÁÖ ½ÉÇÃÇÑ ¿¹Á¦¸¦ ÁغñÇß´Ù. ³ªÁß¿¡ Á»´õ ±×·²µíÇÑ ¿¹Á¦¸¦ ¸¸µé¾îºÁ¾ßÁö ½Í´Ù.
#include <iostream> 
 
using namespace std; 
 
class Base 
{ 
    void a() 
    { 
        cout << "a  "; 
    } 
    void c() 
    { 
        cout << "c  "; 
    } 
    void e() 
    { 
        cout << "e  "; 
    } 
 
    virtual void ph1() = 0; 
    virtual void ph2() = 0; 
  public: 
 
    void execute() 
    { 
        a(); 
        ph1(); 
        c(); 
        ph2(); 
        e(); 
    } 
}; 
 
  
 
class One: public Base 
{ 
    void ph1() 
    { 
        cout << "b  "; 
    } 
    void ph2() 
    { 
        cout << "d  "; 
    } 
}; 
 
class Two: public Base 
{ 
    void ph1() 
    { 
        cout << "2  "; 
    } 
    void ph2() 
    { 
        cout << "4  "; 
    } 
}; 
 
int main() 
{ 
  Base *array[] =  
  { 
     &One(), &Two() 
  }; 
 
  for (int i = 0; i < 2; i++) 
  { 
    array[i]->execute(); 
    cout << '\n'; 
  } 
} 
 
°á°ú
# ./sort 
a  b  c  d  e   
a  2  c  4  e   
 

php

¿©±â¿¡¼­´Â MVCÀÇ ¼­ºê¼ÂÀ¸·Î½áÀÇ template method ÆÐÅÏÀÇ »ç¿ë¿¹¸¦ µé¾ú´Ù. ÀÌ ÆÐÅÏÀº °³ÀÎ ÇÁ·ÎÁ§Æ®ÀÎ dmf ÇÁ·¹ÀÓ¿öÅ©¿¡ »ç¿ëµÇ¾ú´Ù.
// base class 
// interface¸¦ ÀÌ¿ëÇØ¼­ ¼ø¼ö°¡»óÇÔ¼ö·Î ¸¸µé ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. 
class Module 
{ 
    var $options;     
    var $template 
    function model() 
    { 
        echo "This is model method"; 
    } 
    function view() 
    { 
        echo "This is view"; 
    } 
} 
 
class dbtest extends Module 
{ 
  var $className = 'dbtest'; 
  var $viewData; 
  function model() 
  { 
    $DBI = $this->formatter[db]; 
    if(isset($this->options[searchstr])) 
    { 
      $str = $this->options[searchstr]; 
      $DBI->Query("select id, subject, ip from joinc_Trackbacks where subject like '%$str%'order by id limit 10"); 
    } 
    else 
    { 
      $result = $DBI->Query("select id, subject, ip from joinc_Trackbacks order by id limit 10"); 
      if (!$result) 
        echo mysql_error(); 
    } 
 
    $rowlist = array(); 
    while($row = $DBI->Fetch()) 
    { 
      array_push($rowlist, $row); 
    } 
    $this->viewData[trackback] = $rowlist; 
  } 
 
  function view() 
  { 
    // viewData¸¦ Ãâ·ÂÇϱâ À§ÇÑ Äڵ尡 µé¾î°£´Ù. 
  } 
} 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.