본문 바로가기

Programming/Modern C++

타입 추론(Deducing Types) 1부

본 글은 O'Reilly 사의 "Effective Modern C++"의 샘플 문서를 번역한 내용입니다. 샘플문서는 공식 홈페이지에서 다운로드 받을 수 있으며, 법적인 문제가 발생할 경우 이 글은 언제든지 사라질 수 있습니다.



C++ 98의 타입 추론 규칙은 한 종류밖에 없었습니다. 바로 함수 템플릿 입니다. C++ 11 에서는 이 규칙에 약간의 변경을 더해 auto 에 의한 추론규칙, decltype 에 의한 추론 규칙, 이 두가지를 추가했습니다. 나아가 C++ 14에서는 autodecltype의 적용가능한 범위를 확장했습니다. 타입을 추론할 수 있는 범위가 증가하면서 명백하거나, 또는 이미 언급된 타입들을 한 문자씩 정확히 입력해야 하는 고충으로부터 프로그래머를 해방할 수 있습니다. 소스 코드의 한 곳에서 타입을 변경하면 타입 추론 덕분에 다른 곳에서도 자동적으로 전이 되어 C++ 소프트웨어의 적용성도 높아집니다. 하지만 소스코드를 읽어 내려갈 때의 난이도가 상승해버리는 문제가 있습니다. 이것은 컴파일러가 추론한 타입이 예상과는 다른 경우가 있기 때문입니다.


타입이 어떻게 추론되는 가를 완전히 파악하지 않으면 Modern C++에서의 효율적인 프로그래밍은 불가능합니다. 타입이 추론되는 경우는 다양하며, 함수 템플릿 호출과 auto를 사용한 소스코드 들 때문입니다. 또한 decltype의 식도 그러하며, C++ 14에서는 수수께끼 암호와 같은 decltype(auto)도 있습니다.


본 글에서는 타입 추론을 해설합니다. 모든 C++ 개발자에 의해 필수적으로 알아야할 지식입니다. 템플릿 타입이 어떻게 추론되는가, auto는 이것을 어떻게 이용하고 있는가, 또한 decltype은 어떻게 처리되는가에 대해서입니다. 나아가 컴파일러를 이용한 추론 결과를 가시화하는 방법에 대해서도 해설합니다. 이 방법을 사용하면 컴파일러가 기대했던 타입을 추론하는지를 확인할 수 있습니다.