C로 만드는 Interface

극단적으로 Java에서 객체지향, 패턴, Interface을 빼놓고는 다면 Java는 아무것도 아닙니다. Interface를 사용해야 언제든지 교체가능한 모듈형태의 프로그래밍을 할 수 있습니다.

 

Interface의 필요성에 대해서는 다른 곳에도 많이 나와 있기때문에 따로 설명하지 않겠습니다. C언어로 Interface를 만들어 보겠습니다. 이번에 만들 InterfaceUART입니다.

 

UARTMCUDevice와의 커뮤니케이션 도구로 많이 사용합니다. 예를 들면 GPS Module, RS232를 통한 PC와의 통신 등등에서 사용되므로 Interface를 설명하기에 적합합니다. 

typedef struct
{
    InitFunction Init;
    OpenFunction Open;
    TxHandlerFunction TxHandler;
    RxHandlerFunctioin RxHandler;
    //....(필요시 추가)

}UartInterface;

 

우선 UART interface를 만들었습니다. 이 Interface를 이용해서 GPS Device Interface를 만들어 보겠습니다.
GpsUart.c 에는 다음과 같은 코드가 들어가야 합니다.

void CreatGpsUart(UartInterface *uart)
{
  uart->Open = GpsUartOpen;
  uart->TxHandler = GpsTxHandler;
  uart->RxHandler = GpsRxHandler;
}

void GpsUartOpen()
{
}

void GpsTxHandler()
{
}

void GpsRxHandler()
{
}


Rs232.c 에는 다음과 같은 코드가 들어가야 합니다.

CreatRs232Uart(UartInterface *uart)
{
  uart->Open = Rs232UartOpen;
  uart->TxHandler = Rs232TxHandler;
  uart->RxHandler = Rs232RxHandler;
}

void Rs232UartOpen()
{
}

void Rs232TxHandler()
{
}

void Rs232RxHandler()
{
}

 

이제 Main.c를 살펴보겠습니다.

UartInteface gGpsUart;
UartInteface gRs232Uart;

void main(void)
{
    CreatGpsUart(&gGpsUart);
    CreatRs232Uart(&gRs232Uart);

    //...
}

 

우리는 UartInterface를 통해 두가지 기능을 만들어 냈습니다. 앞으로는 발전된 형태로 많은 디자인 패턴을 통해 좀 더 효율적인 Interface를 작성할 수 있게되었습니다.

 

감사합니다.

'▶ 이전글 > C Pattern' 카테고리의 다른 글

C 언어에서 this 구현  (0) 2015.01.20
Iterator 패턴 - Queue  (0) 2015.01.20
Singleton 패턴  (0) 2014.10.13
Template method 패턴  (0) 2014.10.02
Strategy 패턴  (0) 2014.10.02