[완료]다른 라이브러리 헤더에서 선언한 타입을 typedef하여 사용하는 경우..
글쓴이: syrlove / 작성시간: 월, 2010/05/03 - 10:54오전
헤더파일 간의 의존성을 줄이기 위해
다른 라이브러리에서 선언된 타입을 다시 typedef하려고 합니다.
이것이 버전이나 기타 호환성에 어떤 영향을 줄지 고민해보다가 질문드립니다.
이를 테면, winsock2를 class화 시키는 헤더파일이 있을때..
class A
{
private:
SOCKET s;
public:
~
~
~
}
이런 식으로 있는 경우, 구지 winsock2.h를 include하기보다는 SOCKET타입만 알고 있으면 컴파일 되기 때문에,
class A
{
typedef __unsigned int SOCKET;
..
..
..
}
이런 식으로 선언해 놓고 쓰려고 하는데, 분명 파일 간의 의존도는 줄여주지만,
대상 라이브러리가 수정될 경우 문제를 일으킬 것이기 때문에,
이에 대해 어떻게 생각하시는 지 여러분의 의견을 듣고 싶어 질문드립니다.
많은 의견 부탁드릴께요..
감사합니다.
Forums:
a.h class A {
a.h
b.h
멤버를 포인터로 선언해 보세요. 쉽게 해결이 될 수 있습니다.
/***********************
* while(1) sleep(INFINITE);
***********************/
클래스의 경우는 그렇게 하지만요...
클래스의 경우엔 그렇게 하지만,
제가 드린 질문은 typedef의 경우입니다..
가령, 제가 만든 클래스의 멤버함수 중에, 윈도우API를 호출하는 함수가 있고,
때문에 이 멤버함수가 인자로 DWORD형을 받아야된다고 했을때,
헤더파일은 DWORD형 하나 때문에 windef.h 혹은 windows.h를 include 해야만 합니다.
저는 이렇게 include하는 것보다 DWORD의 원래 형을 그 헤더파일에서 찾아,
제 헤더파일에 typedef unsigned long DWORD 이런 식으로 정의해놓고 쓰려고 하는데,
이 경우, 만약 원본 파일의 타입이 변경될 경우 호환성을 갖을 수 없게 되지 않잖아요..
버전호환성을 잃더라도 이렇게 하는 것이 옳은 것인지, 아니면 비용을 치루더라도 해당 파일을 include하는 게 맞는 것인지,
여러분의 의견을 듣고 싶어 질문드렸습니다.. 질문 부탁드릴께요...
그건 뭔가를 얻기
그건 뭔가를 얻기 위한 '비용'이 아닙니다.
이미 얻어낸 '무엇'이죠.
더 싼 '비용'의 '무엇'인가는 없습니다.
얻어낼 수 있는 '무엇'을 포기하느냐 마느냐의 선택만 있을 뿐입니다.
OTL
결국엔...
무엇이 더 좋다기보단, 상황에 맞춰서 include를 사용할지,
typedef를 사용할지 선택해야된다는 말씀이신가요?
의존성을 단순화
의존성을 단순화 시키자고 기본 라이브러리의 설계 구조를 뒤흔드는건 더 큰 "비용"을 지불하는 꼴이 되지 않을까요? 언급 하셨듯이, typedef를 쓰는 이유에는 "그 형이 어떻게 변하더라도 호환성을 유지한다"라는 의미도 포함되는데, 이것을 임의로 변경하는 오류를 범해서는 안 될 것 같습니다.
/***********************
* while(1) sleep(INFINITE);
***********************/
혹시나 해서...
다른 헤더파일에 typedef로 정의되어 있는 타입명을 class xxx;로 전방선언해놓고 사용해보았지만 잘 되질 않네요...
많은 의견 부탁드릴께요..
class AImpl; class
이와 같이 선언하고, 실제 구현을 AImpl에서 상속받아서 하는 방법도 있습니다.
----
내 블로그: http://unipro.tistory.com
내 블로그: http://unipro.tistory.com
여러 의견 감사합니다.
저도 제 나름 고민해본 결과, 의존성을 줄이자고 호환성을 줄이는 것은 더 큰 비용이라고 결론내렸습니다.
여러 의견주신 것 감사합니다^^
댓글 달기