C 언어에서 this 구현

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