new[] 관해서는 typedef가 독이지만, typedef 는 사실 여러 방면으로 쓸모가 많다. 나 같은 경우에는 .. 컨테이너 사용 할때, 컨테이너의 이터레이터를 줄이기 위해서 사용 하곤 한다. 하지만 typedef의 진정한 의미는 바로 따로 있다.
진정한 의미
C++ 에서의 typedef 는 가독성과 코드 수정을 한줄로 만들어 줄께와 같다.
여기서 가독성은 쉽게 이해가 가는데 C++ 에서의 코드 수정은 좀 갸우뚱 할 것이다.
C++ 은 OOP 적으로 코딩이 가능한데, OOP의 꽃~ 캡슐화와 typedef 와 맞물리면 코드 수정이 엄청나게 간편해 진다.
예를 들어, 데이터를 관리하기 위해서 컨테이너를 골라야 했다. 대부분의 데이터가 마지막에 들어가고, 마지막에서 지워 진다는것을 알게됬고 나는 VECTOR 컨테이너를 사용 했다. 그런데 정작 퍼포먼스 체크를 해 보니 80%가 정 가운데에 데이터가 지워지는것을 확인했다 ..망할.... 데이터량이 많아 질수록 비례하여 성능에 큰 영향을 미치게 되니 환장할 노릇이다.
이제 남은것은 LIST컨테이너로 코드 수정해야 한다. 아 막막하다, iterator 부터 시작해 넣고 빼고 sort 하는 부분들도 다 찾아 수정해야 한다.
그렇다.. 다 뜯어 고치기에는 노가다가 싫다! 그렇다면 처음부터 어떻게 해야 했을까?
1단계, 컨테이너를 바로 쓰지 말고, class 라는 막강한 관리자에 넣어 둔다.
2단계, 컨테이너 선언시 typedef 를 이용하여, 이름을 내가 정해 주자.
3단계, 데이터를 삽입하거나, 삭제하는곳, 그리고 꺼내오는 멤버함수를 만들어 둔다. <-- C++ 꽃 캡슐화
4단계, 삽입, 삭제, 접근 멤버 함수를 만들고 정의는 General 코딩을 한다.(STL 을 알아야 겠지?)
자 설계는 끝났다. .. 이제 VECTOR 를 쓰다가.. LIST 로 바꾸고 싶다면 .. 저 위에 typedef 에서 list로만 바꾸어 주면 끝나는것이다.
사례
1. 외국의 BOX2D 의 코디을 보면, 사용하는 기본자료형을 전부 typedef 로 재정의 하고, 사용 하는것을 봤다.
2. 라이브러리 파일을 보면 다 이렇게 쓴다.
3. 유용한 클래스들 내부는 typedef를 많이 쓴다.
나의 사례
사람들이 boost::shared_ptr 을 쓰지 않고, 과제 낼때도 어려워, babo_ptr을 만들어 두고, 헤더파일 달랑 하나 추가해서 컴파일해 사용 하다가, 다들 shared_ptr을 쓸때, typedef 된곳만 수정 하면 만사 ok!
예제코드
진정한 의미
C++ 에서의 typedef 는 가독성과 코드 수정을 한줄로 만들어 줄께와 같다.
여기서 가독성은 쉽게 이해가 가는데 C++ 에서의 코드 수정은 좀 갸우뚱 할 것이다.
C++ 은 OOP 적으로 코딩이 가능한데, OOP의 꽃~ 캡슐화와 typedef 와 맞물리면 코드 수정이 엄청나게 간편해 진다.
예를 들어, 데이터를 관리하기 위해서 컨테이너를 골라야 했다. 대부분의 데이터가 마지막에 들어가고, 마지막에서 지워 진다는것을 알게됬고 나는 VECTOR 컨테이너를 사용 했다. 그런데 정작 퍼포먼스 체크를 해 보니 80%가 정 가운데에 데이터가 지워지는것을 확인했다 ..망할.... 데이터량이 많아 질수록 비례하여 성능에 큰 영향을 미치게 되니 환장할 노릇이다.
이제 남은것은 LIST컨테이너로 코드 수정해야 한다. 아 막막하다, iterator 부터 시작해 넣고 빼고 sort 하는 부분들도 다 찾아 수정해야 한다.
그렇다.. 다 뜯어 고치기에는 노가다가 싫다! 그렇다면 처음부터 어떻게 해야 했을까?
1단계, 컨테이너를 바로 쓰지 말고, class 라는 막강한 관리자에 넣어 둔다.
2단계, 컨테이너 선언시 typedef 를 이용하여, 이름을 내가 정해 주자.
3단계, 데이터를 삽입하거나, 삭제하는곳, 그리고 꺼내오는 멤버함수를 만들어 둔다. <-- C++ 꽃 캡슐화
4단계, 삽입, 삭제, 접근 멤버 함수를 만들고 정의는 General 코딩을 한다.(STL 을 알아야 겠지?)
자 설계는 끝났다. .. 이제 VECTOR 를 쓰다가.. LIST 로 바꾸고 싶다면 .. 저 위에 typedef 에서 list로만 바꾸어 주면 끝나는것이다.
사례
1. 외국의 BOX2D 의 코디을 보면, 사용하는 기본자료형을 전부 typedef 로 재정의 하고, 사용 하는것을 봤다.
2. 라이브러리 파일을 보면 다 이렇게 쓴다.
3. 유용한 클래스들 내부는 typedef를 많이 쓴다.
나의 사례
사람들이 boost::shared_ptr 을 쓰지 않고, 과제 낼때도 어려워, babo_ptr을 만들어 두고, 헤더파일 달랑 하나 추가해서 컴파일해 사용 하다가, 다들 shared_ptr을 쓸때, typedef 된곳만 수정 하면 만사 ok!
예제코드
'연구실 > 파편화된 기록들' 카테고리의 다른 글
가상함수 Vs 비가상 함수 Vs 전역함수 의 함수 호출 비용 비교 (0) | 2008.07.15 |
---|---|
Virtual-Key Codes : Windows 에서 사용 하는 가상키 코드 리스트 (0) | 2008.07.14 |
Tistory 에서 SyntaxHighlighter 사용 하기 (9) | 2008.07.13 |
표준 STL 에 있는, 컨테이너 3개를 지금에서야 알았다. (0) | 2008.07.13 |
추천도서 1탄 이펙티브 STL, Effective STL (0) | 2008.07.12 |
boost의 shared_ptr와 ikpil의 babo_ptr의 비교 (2) | 2008.07.11 |
03 정점 : 정점을 다루는 강력한 도구인 정점 버퍼 (0) | 2008.07.05 |
2-02 디바이스 : Direct3D의 핵심 객체 (0) | 2008.07.05 |
2장. 따라해 보기 : 3차원 기초 이론과 Direct3D의 최소한의 이해 (0) | 2008.07.05 |
1부 1장 기초 영어와 이론 (0) | 2008.07.05 |
최근댓글