this는 객체지향 언어에서 class instance 자신을 나타냅니다. 자기 자신이기 때문에 별도의 이름을 갖는 다는 것도 좀 이상하기 때문에 this라는 키워드는 정말 잘 정한 것 같습니다. C언어 에서 this라는 것을 활용해서 사용해보도록 하겠습니다. 다음과 같은 main.c 코드가 있습니다. uart 드라이버 포인터를 얻어와 uart를 open하고 read, write, close하는 일을 절차적으로 진행하고 있습니다. /* main.c */ void main(void) { driver_t *uart = set_uart(); char value; uart->open(); uart->read(0, &value); uart->write(0, &value, 1); uart->close(); } 사용..
C언어로 자바의 Class를 만들 수 있을까요? 완벽한 Class를 만들 수는 없지만 비슷하게 만들 수 있습니다. 기능적으로는 Class와 동일한 역할을 할 수 있지만 동적으로 할당/해제에는 제한이 있습니다. C언어에서 typedef와 structure그리고 함수 포인터를 이용하면 class와 같은 기능을 할 수 있습니다. 왜 C언어로 Class를 만드는 다소 복잡하고 이해하기 쉽지 않은 구조를 만드냐고 물어보신다면, 우리가 앞으로 만들 디자인 패턴에서 반드시 사용되는 기법이기 때문입니다. 즉, 좀 더 효율적인 프로그램을 가능하게 합니다. 이번 예제는 다소 극단적인 C언어 Class입니다. 실제로 이렇게까지 사용하는 경우는 별로 없을 것 같습니다만 여러분들이 보시기에 알고 있거나 더 좋은 방법이 있다며 ..
자바의 Class와 C의 typedef는 많이 비슷해보입니다. 그러나 실제로 좀 차이가 있습니다. 자바 Class는 생산성과 효율성을 높이기 위해, 궁극적으로 객체지향을 목표로 만든 것이기 때문에 typedef보다 훨씬 사용하기 편리합니다. 가장 큰 차이점은 동적인 할당과 해제를 JVM에서 자동으로 해준다는 것이지요. 자바에서는 궁극적으로 Class를 통해 instance를 만들어 냅니다. 자바에서 다음 구문 Class class = new Class(); 는 무엇을 의미할까요? 이것은 class라는 이름의 메모리를 확보한 후 포인터를 넘겨준것과 같은 효과를 냅니다. new와 동시에 memory allocation이 발생한 것입니다. 메모리를 확보했으니 사용 후 반환을 해야 하는데, 자바는 가비지 콜렉션..
들어가기전에 이전글에 작성했던 글을 수정하여 올리려고 합니다. 아마 이전 글에서는 C 코드 에디터가 없는 관계로 복사가 어려웠었습니다. 이제 맘대로 복사해서 테스트 해볼 수 있게 될 것입니다. '▶ 이전글/C Pattern' 카테고리의 글 목록 STM32 MCU와 C언어 디자인 패턴에 대한 글을 공유합니다. cpattern.tistory.com 객체지향 언어 자바, 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..
자바의 Class는 마치 C의 typedef와 비슷해보입니다. 그러나 실제로 많은 차이가 있습니다. 자바 Class는 생산성과 효율성을 높이기 위해, 궁극적으로 객체지향을 목표로 만든것이 이므로 typedef보다 훨씬 사용하기 편하다. 자바에서는 궁극적으로 Class를 통해 instance를 만들어 냅니다.자바에서 다음 구문Class class = new Class(); 는 무엇을 의미할까요?이것은 class라는 이름의 메모리를 확보한 후 포인터를 넘겨준것과 같은 효과를 냅니다. new와 동시에 memory allocation이 발생한 것입니다. 메모리를 확보했으니 사용 후 반환을 해야 하는데, 자바는 가비지 콜렉션이 알아서 해줍니다. 로컬영역에서 빠져나오면 로컬변수가 없어지는 것 처럼.C는 다릅니다. ..