극단적으로 Java에서 객체지향, 패턴, Interface을 빼놓고는 다면 Java는 아무것도 아닙니다. Interface를 사용해야 언제든지 교체가능한 모듈형태의 프로그래밍을 할 수 있습니다. Interface의 필요성에 대해서는 다른 곳에도 많이 나와 있기때문에 따로 설명하지 않겠습니다. C언어로 Interface를 만들어 보겠습니다. 이번에 만들 Interface는 UART입니다. UART는 MCU와 Device와의 커뮤니케이션 도구로 많이 사용합니다. 예를 들면 GPS Module, RS232를 통한 PC와의 통신 등등에서 사용되므로 Interface를 설명하기에 적합합니다. typedef struct { InitFunction Init; OpenFunction Open; TxHandlerFunc..
[네이버 지식백과]singleton 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 프로그램 전체적으로 한개의 자원을 사용하는 경우 적용할 수 있는 Singleton. 예를 들면 GPS, G sensor, 온도센서와 같은 모듈은 보통 한개의 제품에 한개씩 들어있습니다. 각각의 모듈을 초기화하고 사용하는 C Class를 만든다면 다음과 같이 Singleton을 활용할 수 있습니다. #define null (void *)0 typedef struct { InitFunction init; OpenFunction open; ConnetFunction connection; //... (필요시 추가) }Device; Device *getGpsInstance() { static D..
돌고 도는 구조체를 어떻게 선언해야 할까요? 자기 자신을 포인터하는 구조체를 선언하는 방식이 바로 구조체전방선언이라고 불리우는 불완전 선언입니다. 아래 예제를 보도록 하겠습니다. 먼저 다음과 같이 불완전 선언부터 해야 합니다. typedef struct Activity_ Activity; typedef struct Context_ Context; typedef struct Context_ { bool refreshRequired; Activity *activity; Location *location; Menus *menus; }Context_; typedef void (*OnClickFunction)(Context *context); typedef void (*OnScreenFunction)(Contex..
C언어에서 아주 중요한 static의 활용을 알아 보도록 하겠습니다. 여러 사람이 함께 작업하는 프로젝트에서는 static을 적절히 사용해야 합니다. static 으로 선언한 사용하지 않는 함수나, 전역변수를 컴파일러에서 warning해주기 때문에 아주 유용합니다. 아시겠지만 컴파일러에서 error를 발생하면 타킷 보드에 프로그램을 로딩할 수없습니다. 그러나 warning이 발생하면 로딩이 가능하기 때문에 무시하는 경우가 많은데, 이는 런타임시에 에러를 발생 할 수 있으므로 warning도 없으주는 것이 좋습니다. static은 여러개의 파일내에 해당 파일 scope로 동일한 이름의 함수를 만들 수 있게 해줍니다. 예를 들어 보겠습니다. 여러개의 .c 파일을 만들어 봅시다. Uart.c, Lcd.c, F..
Enum(열거형)은 변수가 아니라 값의 정의입니다. typedef를 해서 사용하면 편리합니다. 우선 #define과 비교하자면, #define zero 0 i = zero; 여기에서 i 에는 0이 할당됩니다. zero가 0으로 치환 됩니다. 말 그대로 문자 바꾸기를 컴파일러에서 해주는 것에 불과합니다. enum과 typedef를 같이 사용해 봅시다. typedef enum { RED, GREEN, PUCE }colors_t; colors_t favorite = PUCE; C언어에는 없는 bool type을 만들 어서 다음과 같이 사용 할 수도 있습니다. typedef enum { false=0, true=1 }bool; bool isTrue = false; 위와 같이 사용하면 false는 0, true는..
[네이버 지식백과]template method 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 템플릿 메소드 패턴도 유용한 패턴입니다. 기능은 같으나 구현방법이 다른 메소드들의 구조를 제시하고 기능과 구현방법이 같은 메소드는 대표로 하나만 제시하는 방법입니다. 예를 들어 도형을 그리는 것을 생각해보도록 하겠습니다. 도형에는 삼각형, 사각형, 원 등이 있습니다. 넓이와 높이(원의 경우 지름)을 통해 도형을 설정하는 것은 모두 똑같습니다. 그러나 구체적으로 모양은 다르지요. 이러한 도형을 그릴때는 메모리라는 사상위에 비트를 역상시켜 해당 도형을 그리는 방법은 어느 이미지든 동일합니다. 따라서 도형의 모양을 만드는 기능은 개별 구현이 가능하도록 추상메소드로 하고 그리는 부분..
[네이버 지식백과] strategy 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 스트레티지 패턴은 아주 단순하면서도 여러가지 패턴중에 가장 유용한 패턴입니다. 사용법은 아주 간단합니다. 우선 interface를 만들고 원한는 때에 콘크리트 코드를 치환해서 사용하면 됩니다. 적절한 예제일지는 모르지만, 특정한 상황에서 uart를 spi로 변경하는 드라이버 예제를 보도록 하겠습니다. 먼저 interface를 구현해보도록 하겠습니다. open, close, read, write 네가지를 만들었습니다. 필요하면 더 만들어도 되구요. read, write에는 addr 파라메타가 있는데, 혹시 메모리 접근시에 필요할 지도 몰라 넣었습니다. 물론 필요없으면 구현시에 사용하지 않..
[네이버 지식백과]observer 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))Observer 패턴은 정말 많이 사용하는 패턴입니다. 자바 프레임워크에서도 쉽게 찾을 수 있습니다. 우리가 흔히 쓰는 Java C#에서 Event Listener 들이 이 종류에 속하지요.Observer pattern을 예제를 위해서는 observer_t: 관찰자 Structure calculate_temperature : 온도를 측정하는 루틴 display_degree_handler : 화면에 측정된 온도를 표시하는 루틴 file_write_degree_handler : 파일에 측정된 온도를 표시하는 루틴 우선 헤더를 보겠습니다.observer_handler_t 가 바로 관찰자 콜백함수..