Java에서 this, Objective-C에서 self 등등 클래스내에서 사용할 수 있는 예약어 통칭 this는 자기 자신의 클래스를 의미합니다. C언어에서는 this가 없습니다. 왜냐하면 클래스라는게 없으니 당연히 없습니다. 클래스는 메모리 자료형에 멤버함수가 존재하는 하나의 타입입니다. 그 타입으로 새로운 instance를 생성하여 사용하게 됩니다. 물론 C에서는 Java처럼 마구 instace를 찍어만들어 낼 수는 없지만(일일히 멤버함수를 assign 해주어야 함), 여러가지의 노력으로 비슷하게 만들어 낼 수 있습니다. 이러한 this는 참 탐나는 기능인건 확실합니다. C에서는 변수나, 함수의 출처를 찾기가 어렵습니다. 전역변수, 함수인 경우 특히 더합니다. 본인이 작성한 코드는 알 수 있겠지만,..
[네이버 지식백과]iterator 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 설명하기 어려워서 퍼왔습니다. 아무튼 한번 구현해 보도록 하겠습니다. 먼저 중요한 헤더 파일입니다. 보시다 시피 8bit 자료형을 취급하는 iterator입니다. setup_iterator은 커스텀되어있는 자료형과 연결한는 함수입니다. 즉 사용자가 만든 자료형과 인터페이스와 연결하는 부분입니다. C에서는 인터페이스가 없기 때문에 이러한 방법으로 인터페이스 비슷한 것을 구현합니다. 다음 코드에서 인터페이스 비스므레한 것을 만들어 보도록 하겠습니다. 최대 지원되는 iterator은 10개 입니다. 즉 10개의 8bit 자료구조형과 연결될 수 있습니다. 이렇게 C에서는 갯수를 제한해야 합니다...
극단적으로 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..
[네이버 지식백과]template method 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 템플릿 메소드 패턴도 유용한 패턴입니다. 기능은 같으나 구현방법이 다른 메소드들의 구조를 제시하고 기능과 구현방법이 같은 메소드는 대표로 하나만 제시하는 방법입니다. 예를 들어 도형을 그리는 것을 생각해보도록 하겠습니다. 도형에는 삼각형, 사각형, 원 등이 있습니다. 넓이와 높이(원의 경우 지름)을 통해 도형을 설정하는 것은 모두 똑같습니다. 그러나 구체적으로 모양은 다르지요. 이러한 도형을 그릴때는 메모리라는 사상위에 비트를 역상시켜 해당 도형을 그리는 방법은 어느 이미지든 동일합니다. 따라서 도형의 모양을 만드는 기능은 개별 구현이 가능하도록 추상메소드로 하고 그리는 부분..
[네이버 지식백과] strategy 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 스트레티지 패턴은 아주 단순하면서도 여러가지 패턴중에 가장 유용한 패턴입니다. 사용법은 아주 간단합니다. 우선 interface를 만들고 원한는 때에 콘크리트 코드를 치환해서 사용하면 됩니다. 적절한 예제일지는 모르지만, 특정한 상황에서 uart를 spi로 변경하는 드라이버 예제를 보도록 하겠습니다. 먼저 interface를 구현해보도록 하겠습니다. open, close, read, write 네가지를 만들었습니다. 필요하면 더 만들어도 되구요. read, write에는 addr 파라메타가 있는데, 혹시 메모리 접근시에 필요할 지도 몰라 넣었습니다. 물론 필요없으면 구현시에 사용하지 않..
과연 C로 Class를 만들 수 있을까요? 완벽한 Class를 만들 수는 없지만, 비슷하게 만들 수 있으며 Class와 동일한 역할을 하게 할 수 있습니다. C에서 typedef와 structure 그리고 함수 포인터를 이용하면 class를 따라서 만들 수 있습니다. 여기서 왜 C로 그런 뻘짓을 하냐고 물어보신다면, 이번 챕터에서는 딱히 할말이 생각나지 않습니다. 하지만 분명한 것은 그 뻘짓은 자바를 이해하는데 도움을 주기도 하고 좀 더 효율적은 C프로그램을 가능하게 합니다. 여기서의 예제는 극단적인 C Class입니다. 실제로 이렇게 사용한는 예는 정신이 나간 프로그래머 이외에는 없을 것입니다. 그냥 이렇게 있구나 정도만 이해했으면 좋겠습니다. 이미 알고 있거나 더 좋은 방법이 있다며 댓글을 남겨주세요..
첫번째로 typedef에 대해 먼저 살펴보겠습니다. C언어에서 typedef 는 새로운 타입을 만드는 지시어입니다. bool 타입은 true, false를 가지고 있는 기본적인 타입인데, 아쉽게도 C언어 안에는 bool 타입이 없습니다. 다행히도 아래 코드와 같이 typedef를 통해 간단하게 bool타입을 만들 수 있습니다. typedef enum { false = 0, true = 1 }bool; bool isRegistered; isRegistered = false; if(isRegistered == true) { printf("It is registered!"); } 좀 더 활용해 보겠습니다. 아래 예는 네자리 숫자를 네개로 분리하는 새로운 타입입니다. typedef struct { u8 D0; ..