C++¿¡¼­ ClassÀÇ µ¿ÀûÀûÀç
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

Contents

1 ÀÌÀ¯
2 C++·Î ÀÛ¼ºµÈ ¶óÀ̺귯¸®»ç¿ëÀÇ ¹®Á¦
3 extern "C" ¸¦ ÀÌ¿ëÇÑ ÇØ°á
4 classÀÇ µ¿ÀûÀûÀç
5 ´ÙÇü¼ºÀÇ ±¸Çö
6 ¿¹Àü ¹æ½Ä ±¸Çö
7 ¹æ¹ýÀÇ °³¼±


Replace original file
Rename if it already exist

1 ÀÌÀ¯

´Ù¾çÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡ »ç¿ë°¡´ÉÇÑ ·Î±×ºÐ¼® ÇÁ·Î±×·¥À» ¸¸µé·Á°í ÇÑ´Ù. ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÇ °æ¿ì ¾î¶² ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ »ç¿ëÇÒÁö ¾Ë ¼ö ¾ø±â ¶§¹®¿¡, ¿øº»¼Ò½º¿¡´Â ¼öÁ¤ÇÒ ÇÊ¿ä ¾øÀÌ ·Î±×ºÐ¼® ¾Ë°í¸®Áò¸¸ ÀûÀç°¡´ÉÇϵµ·Ï ¸¸µé Çʿ䰡 ÀÖ´Ù.

°¡ÀåÁÁÀº ¹æ¹ýÀº main ÄÚµå¿Í ¾Ë°í¸®ÁòÀ» ºÐ¸®½ÃŰ´Â °ÍÀ¸·Î, À̰ÍÀº ¶óÀ̺귯¸®ÀÇ µ¿ÀûÀûÀ縦 ÀÌ¿ëÇØ¼­ ´Þ¼º°¡´É ÇÏ´Ù. µ¿ÀûÀûÀç´Â ¶óÀ̺귯¸®¹®¼­¿¡ ¾ð±ÞµÇ¾î ÀÖ´Ù.

Áï ¾Ë°í¸®ÁòÀ» Ç÷¯±×ÀÎ ÇüÅ·ΠÀûÀçÇÏ´Â ±â¼úÀε¥, ¿©±â¿¡ ´õÇØ¼­ C++ÀÇ Å¬·¡½º¸¦ µ¿ÀûÀ¸·Î ÀûÀç½Ãų ¼ö Àֱ⸦ ¿øÇß´Ù. ±×·¸´Ù¸é, Ŭ·¡½ºÀÇ Ãß»óÈ­¸¦ ÀÌ¿ëÇØ¼­, Á»´õ ÀϰüµÈ °³¹ßÀÚ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÒ ¼ö ÀÖÀ» °ÍÀ̱⠶§¹®ÀÌ´Ù.

±×·¯¹Ç·Î ´ÙÀ½ÀÇ µÎ°¡Áö¸¦ ´Þ¼ºÇÏ´Â°Ô ÁÖ¿ä ¸ñÇ¥°¡ µÉ °ÍÀÌ´Ù.
  1. ·Î±×ºÐ¼® ¾Ë°í¸®ÁòÀ» Ç÷¯±×ÀÎ ÇüÅ·ΠÀûÀçÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
  2. Ŭ·¡½º¸¦ ÀûÀçÇÔÀ¸·Î½á, ÀϰüµÈ °³¹ßÀÚ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù.

À̰ÍÀº Àü¼úÆÐÅÏÀÇ ±¸ÇöÀ¸·Î º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

2 C++·Î ÀÛ¼ºµÈ ¶óÀ̺귯¸®»ç¿ëÀÇ ¹®Á¦

C++¿¡¼­ Ŭ·¡½ºÀÇ µ¿ÀûÀûÀç °¡´É¼º¿¡ ´ëÇØ »ý°¢ÇØ º»´Ù.

C¿¡¼­ÀÇ ¶óÀ̺귯¸®ÀÇ µ¿ÀûÀûÀç´Â ¸í·áÇÏ´Ù. ÀÌ¿¡ ´ëÇÑ ³»¿ëÀº ¶óÀ̺귯¸®¸¸µé±â ¹®¼­¸¦ Âü°íÇÑ´Ù.

C++¿¡¼­´Â name mangling ¶§¹®¿¡ dlopen()À» ÀÌ¿ëÇØ¼­ ¶óÀ̺귯¸®¸¦ ÀûÀçÇϴµ¥, ¾î·Á¿òÀÌ ÀÖ´Ù. ¾Ö½Ã´çÃÊ dlopen()ÀÌ C++À» ¿°µÎ¿¡ µÎÁö ¾Ê°í ¸¸µé¾ú´Ù´Â °Íµµ ¹®Á¦ÀÏ °ÍÀÌ´Ù.

C¿Í C++Àº ÇÔ¼ö¸¦ °¡¸®Å°±âÀ§ÇÑ symbol Å×À̺íÀ» °¡Áö°í ÀÖ´Ù. ¾î¶² ÇÔ¼ö¸¦ È£ÃâÇϸé symbol Å×À̺íÀ» µÚÁ®¼­, ÀÌÁøÆÄÀÏ ³»¿¡¼­ ÇÔ¼öÀÇ ¿øº»ÀÇ À§Ä¡¸¦ ¾Ë¾Æ³»¾î¼­ ÀоîµéÀÌ°í ½ÇÇàÇÏ´Â °ÍÀ¸·Î ¹¦»çÇÒ ¼ö ÀÖ´Ù.

C´Â symbolÀÌ ÇϳªÀÇ ÇÔ¼ö¿Í ´ëÀÀÇÑ´Ù. ±×·¸Áö¸¸ C++Àº overloadingÀ¸·Î ÀÎÇÏ¿©¼­, ÇÔ¼öÀ̸§°ú ½Éº¼ÀÌ ÀÏÄ¡ÇÏÁö ¾Ê´Â °æ¿ì°¡ ¹ß»ýÇÑ´Ù. À̸§Àº °°Áö¸¸ ÀÎÀÚ°¡ ´Ù¸¥ ÇÔ¼ö°¡ ´ëÇ¥ÀûÀÎ °æ¿ì´Ù. ±×·¯¹Ç·Î, C++·Î °øÀ¯¶óÀ̺귯¸®¸¦ ¸¸µé°íÀÚ ÇÒ°æ¿ì, ÀÌ ÇÔ¼ö´Â ¹Ýµå½Ã À¯ÀÏÇÏ´Ù´Â °ÍÀ» ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁÙ Çʿ䰡 ÀÖ´Ù.

3 extern "C" ¸¦ ÀÌ¿ëÇÑ ÇØ°á

¿À¹ö·ÎµùÀ¸·Î ÀÎÇØ¼­ ¹ß»ýÇÏ´Â ¹®Á¦´Â extern "C"¸¦ ÀÌ¿ëÇϸé ÇØ°áÇÒ ¼ö ÀÖ´Ù. extern "C" ´Â ÇØ´ç ÇÔ¼ö°¡ ½Éº¼À̸§°ú ÀÏÄ¡µÉ °ÍÀ̶ó´Â °ÍÀ» ¾Ë·ÁÁØ´Ù. À̸¦Å׸é C ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î »ç¿ëÇϰڴٴ Àǹ̴Ù. ´ë½Å C++ÀÇ ±â´ÉÀÎ overloadµîÀº »ç¿ëÇÒ ¼ö ¾ø°Ô µÈ´Ù.

¿¹ÄÁµ¥ hello¶õ ÇÔ¼ö°¡ ÀÖ´Ù¸é, ´ÙÀ½°ú °°ÀÌ extern "C"¸¦ ÀÌ¿ëÇØ¼­ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
#include <iostream> 
 
using namespace std; 
extern "C" void hello() 
{ 
    cout << "hello" << "\n";     
} 
 

4 classÀÇ µ¿ÀûÀûÀç

exern "C"¸¦ ÀÌ¿ëÇØ¼­, ¿À¹ö·ÎµùÀÌ ÇÊ¿ä¾ø´Â ÇÔ¼ö¸¦ ÀûÀç½ÃŰ´Â ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾ÆºÃ´Ù. ±×·¸´Ù¸é, class´Â ¾î¶³±î.

¾ÈŸ±õ°Ôµµ class´Â dlopen()À» ÀÌ¿ëÇØ¼­ È£ÃâÇÒ ¼ö°¡ ¾ø´Ù. ¾ÖÃÊ¿¡ dlopenÀÌ class¸¦ ¿°µÎ¿¡ µÎ°í ¸¸µé¾îÁø°Ô ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº class¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ´Â factory ÇÔ¼ö¸¦ ¸¸µé°í, ÀÌ Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â ¹æ¹ýÀÏ °ÍÀÌ´Ù.

´ÙÀ½Àº factory ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ Ŭ·¡½º¸¦ È£ÃâÇÏ´Â ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ´Ù. ÇÁ·Î±×·¥À̸§Àº main.cc·Î ÇϰڴÙ.
#include <dlfcn.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include "mymodule1.h" 
 
int main(int argc, char **argv) 
{ 
  void *handle; 
 
  char *error; 
  Test *LTest; 
 
  handle = dlopen("libmymodule.so", RTLD_LAZY); 
  if (!handle) 
  { 
    perror("Open Library\n"); 
    exit(0); 
  } 
 
  // Func_Init 
  init_t* init_myFunc = (init_t *)dlsym(handle, "Func_Init"); 
  if ((error = dlerror()) != NULL) 
  { 
    printf("ERROR : %s\n",error); 
    exit(0); 
  } 
  LTest = init_myFunc(); 
  LTest->Count(); 
  LTest->Count(); 
  LTest->Print(); 
 
  // Func_destory 
  destroy_t *destroy_myFunc = (destroy_t *)dlsym(handle, "Func_destory"); 
  destroy_myFunc(LTest); 
} 
 

mymodule1.h·Î class Test°¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
001  #ifndef _MYMODULE_H_
002  #define _MYMODULE_H_
003  
004  #include <stdio.h>
005  #include <string>
006  
007  using namespace std;
008  
009  class Test
010  {
011    private:
012      int count;
013    public:
014      Test();
015      ~Test()
016      {
017        printf("Destory\n");
018      }
019      void Count();
020      void Print();
021  };
022  extern "C" class Test* Func_Init();
023  extern "C" void Func_destory(class Test *aTest);
024  
025  typedef void destroy_t(Test*);
026  typedef Test* init_t();
027  #endif
028  
Funic_init¿Í Func_destory¶ó´Â factory ÇÔ¼ö°¡ ¼±¾ðµÇ¾îÀÖ´Ù.

´ÙÀ½Àº Test Ŭ·¡½º¿Í factory ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖ´Â ÄÚµå·Î ÆÄÀϸíÀº mymodule1.cc´Ù.
#include "mymodule1.h" 
 
Test::Test() 
{ 
    printf("Init\n"); 
    count=0; 
} 
 
void Test::Count() 
{ 
    count++; 
} 
 
void Test::Print() 
{ 
    printf("Count is %d\n", count); 
} 
 
class Test* Func_Init() 
{ 
    Test *myTest; 
    myTest = new Test; 
    return myTest; 
} 
 
void Func_destory(class Test *aTest) 
{ 
    delete aTest; 
} 
 
void Func_Test(class Test *aTest) 
{ 
    aTest->Count(); 
    aTest->Print(); 
} 
 

´ÙÀ½Àº ÄÄÆÄÀÏ ¹æ¹ýÀÌ´Ù. ¸ÕÀú mymodule1.cc¸¦ °øÀ¯¶óÀ̺귯¸®ÇüÅ·ΠÄÄÆÄÀÏ ÇÑ´Ù.
# g++ -fPIC -c mymodule1.cc 
# g++ -shared -W1,-soname,libmymodule.so.1 -o libmymodule.so.1.0.1 mymodule1.o 
 

main.cc¸¦ ÄÄÆÄÀÏ ÇÑ´Ù.
g++ -o main main.c -ldl -lmymodule 
 
ÀϹÝÀûÀÎ µ¿ÀûÀûÀçÀÇ °æ¿ì ÇÔ¼ö¿øÇüÀÌ ÇÊ¿ä ¾øÁö¸¸ classÀÇ °æ¿ì¿¡´Â ¸Þ¼­µå¸¦ È£ÃâÇØ¾ß Çϱ⠶§¹®¿¡ -l¿É¼ÇÀ» ÀÌ¿ëÇØ¼­ ¸Þ¼­µå¿¡ ´ëÇÑ Á¤Àǰ¡ ÀÖ´Â ¶óÀ̺귯¸® ¸í½ÃÀûÀ¸·Î Áö½ÃÇØÁà¾ß ÇÑ´Ù.

¸¸µé¾îÁø ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸ÀÚ.
$ ./main 
Init 
Count is 2 
Destory 
 
Á¦´ë·Î ½ÇÇàµÊÀ» ¾Ë ¼ö ÀÖ´Ù.

5 ´ÙÇü¼ºÀÇ ±¸Çö

factory ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ Ŭ·¡½º¸¦ ·ÎµùÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Å͵æÇßÀ¸´Ï, ÀÌÁ¦ ·Î±×ºÐ¼® ÇÁ·Î±×·¥ Á¦ÀÛ¿¡ ´ëÇÑ °èȹÀ» ¼¼¿öº¸±â·Î ÇÏÀÚ.

ÀÌ ·Î±×ºÐ¼® ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº »çÇ×µéÀ» ¸¸Á·½ÃÄÑ¾ß ÇÑ´Ù.
  1. ´Ù¾çÇÑ ·Î±×¿¡ ´ëÀÀÇÒ ¼ö ÀÖµµ·Ï Ç÷¯±×ÀÎÇü½ÄÀ¸·Î ÀûÀçÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
  2. ÇÁ·Î±×·¡¸Ó¿¡°Ô °øÅëÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
1¹ø ¿ä±¸»çÇ×Àº ¶óÀ̺귯¸®ÀÇ µ¿ÀûÀûÀ縦 ÀÌ¿ëÇØ¼­ ÇØ°áÇÒ ¼ö ÀÖ´Ù. Áï ¼³Á¤ÆÄÀÏÀ» ¸¸µç´ÙÀ½¿¡, ÇØ´ç ·Î±×ÆÄÀÏ¿¡ ´ëÀÀµÇ¾î¼­ ÀûÀçÇÒ ¶óÀ̺귯¸®¸¦ ¸í½ÃÇØÁÖ¸é µÈ´Ù. À̰Ϳ¡ ´ëÇÑ °£´ÜÇÑ ¿¹´Â ¶óÀ̺귯¸®ÀÇ »ç¿ë¿¡ ¾ð±ÞµÇ¾î ÀÖÀ¸´Ï, ÀÀ¿ëÇϴµ¥ ¹®Á¦¾øÀ» °ÍÀÌ´Ù.

2¹ø ¿ä±¸»çÇ×Àº Ŭ·¡½º¸¦ ÀûÀç½Ã۰í, Ŭ·¡½ºÀÇ ¸Þ¼­µå¸¦ °¡»óÇÔ¼öÈ­ ÇÏ´Â °ÍÀ¸·Î ´Þ¼ºÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÏÁ¾ÀÇ Interface Ŭ·¡½º¸¦ ¸¸µé°í, °³¹ßÀÚ´Â InterfaceÀÇ ¸Þ¼­µå¸¦ ±¸ÇöÇÏ´Â ¹æ½ÄÀ¸·Î ÇÊ¿äÇÑ ¸ðµâÀ» °³¹ßÇÏ´Â °ÍÀÌ´Ù.

6 ¿¹Àü ¹æ½Ä ±¸Çö

¿¹Àü¿¡µµ ·Î±×ºÐ¼® ºñ½º¹«·¹ÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾ú´ø ÀûÀÌ ÀÖ´Ù. º¸¾È·Î±×ºÐ¼®ÇÁ·Î±×·¥ÀÌ¿´´Âµ¥, º¸¾ÈÀåºñ·Î ºÎÅÍ syslog, snmp ȤÀº Àü¿ë socketÀ¸·Î ºÎÅÍ º¸¾È·Î±×¸¦ ¹Þ¾Æ¼­ ºÐ¼®Çϰí, À̺¥Æ®¸¦ »ý¼ºÇÏ´Â ÇÁ·Î±×·¥ÀÌ¿´´Ù. ±âº»°³³äÀº DOS °ø°Ý°Ë»ç ÇÁ·Î±×·¥ÀÇ Á¦ÀÛ¿¡ ¼Ò°³µÈ ¹Ù°¡ ÀÖ´Ù.

±âº» ½Ã½ºÅÛ/³×Æ®¿öÅ© ±¸¼ºÀº ´ÙÀ½°ú °°´Ù.

dos.png

º¸¾ÈÀåºñ´Â ´Ù¾çÇÑ Á¾·ùÀÇ º¸¾È¼ÒÇÁÆ®¿þ¾î°¡ ¼³Ä¡µÇ¾î ÀÖÀ¸¸ç, ·Î±× ¶ÇÇÑ ÀüÇôÇ¥ÁØÈ­ µÇ¾î ÀÖÁö ¾ÊÀ¸¸ç, ³ª¸§´ë·ÎÀÇ Á¤Ã¥À» °¡Áö°í ¸¸µé¾îÁø´Ù. ¸¸¾à »õ·Î¿î Àåºñ°¡ Ãß°¡µÈ´Ù¸é, ºÐ¼®¼ÒÇÁÆ®¿þ¾î´Â ÇØ´ç ÀåºñÀÇ º¸¾È·Î±×¸¦ ºÐ¼®ÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ Ãß°¡µÇ¾î¾ß ÇÑ´Ù.

ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½ÀÇ Á¶°ÇÀ» ¸¸Á·ÇÒ ¼ö ÀÖ¾î¾ß Çß´Ù.
  1. »õ·Î¿î º¸¾ÈÀåºñ ȤÀº »õ·Î¿î º¸¾È Á¦Ç°ÀÌ Ãß°¡µÇ¸é, ´ÙÀ½°ú °°Àº ÀÌÀ¯·Î »õ·Î¿î ºÐ¼®¸ðµâÀ» °³¹ßÇØ¾ß ÇÑ´Ù.
    • º¸¾È·Î±×°¡ Ç¥ÁØÈ­ µÇ¾î ÀÖÁö ¾Ê¾Ò±â ¶§¹®
    • plain text, binary µ¥ÀÌÅÍ È¤Àº DB·Î log¸¦ ÀúÀåÇÏ´Â µî ¹æ½ÄÀÇ Â÷ÀÌ
    • snmp, syslog, Àü¿ë socket µî ´Ù¾çÇÑ Åë½Å ¹æ¹ý
  2. °¡´ÉÇÑ main ÄÚµå´Â ¼öÁ¤µÇÁö ¾Ê¾Æ¾ß ÇÑ´Ù.
  3. ¸ðµâÀÇ °³¹ßÀº Àϰü¼ºÀÌ ´ãº¸µÉ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
À§ÀÇ ¿ä°ÇµéÀ» ¸¸Á·½Ã۱â À§Çؼ­ ´ÙÀ½ÀÇ ¹æ¹ýÀ» »ç¿ëÇß´Ù. ÀÏÁ¾ÀÇ Àü¼úÆÐÅÏÀÇ ÀÀ¿ëÀ̶ó°í º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  1. °¢ Á¦Ç°¿¡ ´ëÀÀµÇ´Â ¶óÀ̺귯¸®¸¦ »ý¼ºÇÑ´Ù. 10°³ÀÇ Á¦Ç°ÀÇ ·Î±×¸¦ ºÐ¼®ÇØ¾ß ÇÑ´Ù¸é, 10°³ÀÇ ¶óÀ̺귯¸®°¡ ¸¸µé¾îÁú °ÍÀÌ´Ù.
  2. {ÇØ´çÀåºñ => ÇØ´çÀåºñÀÇ ·Î±×¸¦ ºÐ¼®ÇÒ ¼ö ÀÖ´Â ¾Ë°í¸®ÁòÀÌ Æ÷ÇÔµÈ ¶óÀ̺귯¸®}¸¦ ¼±ÅÃÇϵµ·Ï Àü¼úÀ» ±¸»çÇÑ´Ù.
ÀÌ ¹æ½ÄÀº ÇÔ¼öÆ÷ÀÎÅ͸¦ ÀÌ¿ëÇÑ ÇÁ·ÎÅäÄÝ Ã³¸®¿¡ ºñ½ÁÇÏ°Ô ±¸ÇöµÇ¾î ÀÖÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù.

ÀÌ ¹æ½ÄÀº ¸¸Á·½ÃÄѾßÇÒ Á¶°ÇÁß 1¹ø°ú 2¹øÀº ¾î´ÀÁ¤µµ ¸¸Á·½Ãų ¼ö ÀÖÁö¸¸, 3¹øÀ» ¸¸Á·½ÃŰÁö´Â ¸øÇß´Ù. Äڵ尡 °´Ã¼ÁöÇâÀûÀÌÁö ¾Ê¾Ò±â ¶§¹®¿¡, Áï C·Î °³¹ßµÇ¾ú±â ¶§¹®ÀÌ´Ù. ¹°·Ð Á»´õ ³ë·Â°ú ½Ã°£À» µé¿´´Ù¸é, 3¹øÀ» ¸¸Á·½Ãų ¼ö ÀÖ´Â ÇÁ·Î±×·¥ÀÇ Á¦ÀÛÀÌ °¡´ÉÇß°ÚÁö¸¸, ±×¶§´Â ±×·²¸¸ÇÑ ½Ç·ÂÀ» °®ÃßÁö ¸øÇß´Ù.

7 ¹æ¹ýÀÇ °³¼±

±×·¡¼­ classÀÇ °¡»óÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ °³¹ßÀÚ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé°í, ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó¹Þ¾Æ¼­ ½ÇÁ¦ ±¸ÇöÀ» Çϵµ·Ï ÇÏ´Â ¹æ¹ýÀ» »ý°¢Çß´Ù. ¿©±â¿¡¼­´Â ´ë·«ÀûÀÎ °³³ä¸¸ ¼Ò°³ÇÏ´Â Á¤µµ·Î ÇϰڴÙ.

´ÙÀ½°ú °°ÀÌ ¼ø¼ö°¡»óÇÔ¼ö¸¦ Æ÷ÇÔÇÏ´Â Interface Ŭ·¡½º¸¦ ¸¸µéµµ·Ï ÇÑ´Ù. interface.h·Î ÇϰڴÙ.
#ifndef _INTERFACE_H_ 
#define _INTERFACE_H_ 
 
class Log 
{ 
  private: 
    int data; 
  public: 
    virtual int Create()=0; 
    virtual int Anly()=0; 
    virtual int Read()=0; 
    virtual int Destroy()=0; 
    virtual ~LogAnly() 
    { 
    } 
}; 
 
#endif 
 
  • ÀÌÁ¦ °³¹ßÀÚ´Â ¸ðµâÀÇ ÀÛ¼º½Ã À§ÀÇ LogŬ·¡½º¸¦ »ó¼Ó¹Þ°í, °¢ °¡»óÇÔ¼ö¸¦ ½Ç±¸ÇöÇÏ¸é µÈ´Ù.
    • Create : °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
    • Anly : ½ÇÁ¦ ºÐ¼®À» ÇÑ´Ù.
    • Read : ºÐ¼®µÈ µ¥ÀÌÅ͸¦ ÀоîµéÀδÙ.
    • Destroy : °´Ã¼¸¦ ÆÄ±«ÇÑ´Ù.
´ÙÀ½Àº ½Ç±¸ÇöÀ» Æ÷ÇÔÇÑ ÄÚµå´Ù.
#include <interface.h> 
#include <iostream> 
 
class TestLogAnly : public Log 
{ 
  private: 
  struct _CountData 
  { 
    int count1; 
    int count2; 
  }; 
  _CountData CData; 
  Config *Cfg; 
  public: 
    TestLogAnly(); 
    int Create(char *); 
    int Anly(); 
    int Read(); 
    int Destroy(); 
    ~TestLogAnly(); 
}; 
 
using namespace std; 
int TestLogAnly::Create() 
{ 
  cout << "Create " << endl; 
  return 1; 
} 
 
int TestLogAnly::Destroy() 
{ 
  cout << "Module Anly Destroy" << endl; 
  return 1; 
} 
 
int TestLogAnly::Anly() 
{ 
  CData.count1 = 100; 
  CData.count2 = 200; 
  cout << "Log Anly" << endl; 
  return 1; 
} 
int TestLogAnly::Read() 
{ 
  cout << "ReadData count 1 : "<< CData.count1 << endl; 
  cout << "ReadData count 2 : "<< CData.count2 << endl; 
} 
 
TestLogAnly::~TestLogAnly() 
{ 
  cout << "Module Destroy" << endl; 
} 
 
TestLogAnly::TestLogAnly() 
{ 
  memset((void *)&CData, 0x00, sizeof(CData)); 
} 
 
// factory ÇÔ¼öÀÇ ¼±¾ð 
extern "C" TestLogAnly *Obj_Create(); 
extern "C" void Obj_Destroy(TestLogAnly *); 
 
TestLogAnly *Obj_Create() 
{ 
        TestLogAnly *rtv; 
        rtv = new TestLogAnly(); 
        return rtv; 
} 
 
void Obj_Destroy(TestLogAnly *aLog) 
{ 
        delete aLog; 
} 
 
À̰ÍÀ¸·Î µ¿ÀûÀûÀç¿¡µµ Ŭ·¡½ºÀÇ °¡»óÈ­, Ãß»óÈ­, Àº´ÐÀ» Àû¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.