|
Opaque (불투명한) Type 이라는 용어가 종종 프로그래밍 언어 관련 글을 보면 나온다. Opaque type은 데이터(멤버 변수) 조작을 반드시 메소드나 외부 인터페이스로만 할 수 있는 타입을 가리킨다. C++ 같으면 멤버 변수들을 모두 private으로 선언하고 모든 조작을 메소드를 통해서 하는 것으로 opaque type을 구현할 수 있다. 그렇다면 C 에서는? C에는 struct 밖에 없고 멤버 변수들도 모두 접근이 가능하니 언뜻 보면 힘들어 보인다. 그러나 이런 경우 이 struct에 대한 포인터를 하나의 타입으로 간주해 이것만 노출시키면 완벽하게 opaque type을 만들 수 있다. 가장 좋은 예는 Win32 API에서 매우 자주 등장하는 HANDLE이라는 녀석이다. HANDLE hThread = CreateThread(…); 이렇게 스레드와 파일을 만들면 모두 공히 HANDLE 이라는 타입이 반환된다. 그리고 이 파일과 스레드에 대한 조작은 오직 관련 API로만 가능하다. 이 HANDLE의 정의는 typedef void *HANDLE; 단순히 이렇게 void* 로 되어있다. 내부에 복잡한 자료구조가 있어도 이렇게 HANDLE과 같은 방식으로 한 번 추상화를 시키면 된다. 아주 간단한 방법이다. 대신 이런 방법은 HANDLE로 가려진 내부자료구조가 대게 API에 의해 동적 할당 되기 때문에 Create*, Init*에 대응되는 Close*, Delete* 와 같은 함수를 호출해야 메모리 릭을 막을 수 있다. 예를 들어, CloseHandle과 같은 함수. 구현은 그냥 이 HANDLE 타입을 받은 뒤, 내부 자료구조로 캐스팅하고 사용하면 된다. 물론 엄한 녀석이 들어올 경우 벌어질 참사를 대비하는 방법도 적절히 필요할 것이다. 이 글과 관련있는 글을 자동검색한 결과입니다 [?]
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|