Java에서 this, Objective-C에서 self 등등 클래스내에서 사용할 수 있는 예약어 통칭 this는 자기 자신의 클래스를 의미합니다. C언어에서는 this가 없습니다. 왜냐하면 클래스라는게 없으니 당연히 없습니다.
클래스는 메모리 자료형에 멤버함수가 존재하는 하나의 타입입니다. 그 타입으로 새로운 instance를 생성하여 사용하게 됩니다. 물론 C에서는 Java처럼 마구 instace를 찍어만들어 낼 수는 없지만(일일히 멤버함수를 assign 해주어야 함), 여러가지의 노력으로 비슷하게 만들어 낼 수 있습니다. 이러한 this는 참 탐나는 기능인건 확실합니다.
C에서는 변수나, 함수의 출처를 찾기가 어렵습니다. 전역변수, 함수인 경우 특히 더합니다. 본인이 작성한 코드는 알 수 있겠지만, 타인이 작성한 코드에서 전역변수 함수는 그 쓰임새나 출처를 가늠하느라 골머리를 앓습니다.
그러나 다음과 같이 사용하면 정말 편합니다.
코드가 의도하는 것이 무엇인지 한눈에 알 수 있습니다.
Rs232Uart.write(0x00);
이 코드고 눈에 쏙 들어옵니다.
만약 Rs232.c 소스파일 내에서 다음과 같이 선언한다면
UartInterface *this; this = &Rs232Uart;
위와 같이 선언한다면 Rs232.c에서
this->write(0x00);
라고 사용할 수 있게됩니다.
그리고 GpsUart.c 파일내에서도
this->write(0x00);
라고 사용할 수 있게됩니다.
이렇게 Java처럼 override가 될 수도 있다. 디버깅도 쉽고 코드가 무엇을 의미한는지 또한 어떻게 비슷한 interface를 확장 시킬수 있을지 미리 알게됩니다.
'▶ 이전글 > C Pattern' 카테고리의 다른 글
Timer 만들기 (0) | 2018.01.11 |
---|---|
Scheduler 구현하기 (0) | 2018.01.11 |
Iterator 패턴 - Queue (0) | 2015.01.20 |
C로 만드는 Interface (0) | 2014.10.15 |
Singleton 패턴 (0) | 2014.10.13 |