C언어 Design Pattern - interface

유명현·2022년 3월 30일
0

<사용자와 모듈이 강하게 연결된 경우>

위의 그림처럼 사용자와 모듈이 강하게 연결되어 있는 상태를 보여주고 있습니다.
이럴 경우 사용자가 모듈을 사용하기 위해 모듈의 내용을 알아야 합니다. 또한 모듈 1,2를 이용하기 위해 알고리즘의 일부분을 사용자가 구현해야하며, 모듈1,2 알고리즘이 변경 될 경우 사용자의 코드도 변경되어야 할 경우 많이 발생합니다.

<사용자와 모듈이 약하게 연결된 경우>

인터페이스를 이용하면 main함수에서 별도의 알고리즘을 구현할 필요가 없고 알고리즘 수정 시 사용자의 코드를 변경해야 할 필요가 없습니다.
우리는 앞으로 이런 구조로 코딩을 진행해야 합니다.

또한 C언어에서는 Main 함수가 시작점입니다. 그래서 코드를 볼 때 main 함수부터 보며 main함수는 그만큼 중요합니다. 그러므로 main 함수 작성 시 몇가지 유의 사항이 있습니다.

<main함수 작성 시 유의사항>

1) 알고리즘이나 로직 구현
2) 대량의 변수 초기화
3) 너무 많은 제어문
4) 너무 많은 코드양

위의 같은 유의사항들은 main함수를 복잡하게 만들어 가독성과 효율성을 떨어뜨립니다.
main에서 코딩할 때 중요한 것은 전체적인 interface를 설계하고 그에맞게 코딩하는 것입니다.
main함수에서는 초기화하는 함수와 스케쥴링이 들어가면됩니다.

<인터페이스로 구성하기>

typedef bool (*open_t)(void)
typedef bool (*close_t)(void)

typedef struct{
	open_t open;
    close_t close;
}uart_t 

static bool open(void);
static bool close(void);

uart_t* init_uart1(void)
{
	static uart_t uart;
    uart.open = open;
    uart.close = close;
    
    return &uart;
}

static bool open(void)
{
	//TODO: OPEN 함수 작성
	return TRUE;
}
static bool close(void)
{
	//TODO: CLOSE 함수 작성
    return TRUE;
}

int main(void)
{
	uart_t* uart1;
    uart1 = init_uart();
    
    uart1->open();
    uart1->close();
    
	return 0;
}

MCU는 보통 MCU가 2개 이상있으므로 위와 같이 인터페이스를 작성하면 UART2를 구현하더라도 uart_t의 interface를 가져다 구현을 하면 됩니다.

profile
기억보다 기록을

0개의 댓글

관련 채용 정보