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!

예제코드

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요