Page 114

C++는 언어 차원에서 객체지향 프로그래밍뿐만 아니라 제네릭 프로그래밍 generic programming 1 도 지원한다. 6장에서 설명했듯이 제네릭 프로그래밍의 목적은 코드를 재사용할 수 있게 작성 하는 것이다. C++에서 제네릭 프로그래밍을 위해 제공하는 핵심 도구는 템플릿이다. 엄밀히 말해 템플릿은 객체지향 기법에 속하지 않지만 객체지향 프로그래밍에서 함께 적용하면 강력 한 효과를 발휘한다. C++에서 가장 어려운 기능으로 여겨서 잘 사용하지 않는 경향이 있는데, 전문 C++ 프로그래머라면 알아두는 것이 좋다. 이 장에서는 6장에서 설명한 디자인 원칙에 맞게 템플릿 코드를 작성하는 방법을 구체적으로 소개한다. 참고로 다음과 같은 고급 템플릿 기능은 22장에서 자세히 다룬다. 세 가지 템플릿 매개변수와 세부사항

부분 특수화

템플릿 활용 방법

가변 인수 템플릿

메타프로그래밍

12.1 템플릿 소개 절차형 프로그래밍 패러다임에서는 프로시저나 함수 단위로 프로그램을 작성한다. 그중에서도 특히 함수를 많이 사용하는데, 알고리즘을 작성할 때 특정한 값에 의존하지 않게 구현해두면 나 중에 임의의 값에 대해 얼마든지 재사용할 수 있기 때문이다. 예를 들어 C++의 sqrt ( ) 함수는 호출한 측에서 요청한 값에 대한 제곱근을 구한다. 제곱근을 구하는 함수를 특정한 값에 대해서 만 호출할 수 있다면 활용도가 떨어질 것이다. 그래서 sqrt ( ) 함수는 사용자가 매개변수에 값 을 지정하기만 하면 실행할 수 있도록 구현했다. 컴퓨터 과학자는 함수를 이렇게 작성하는 것을 매개변수화한다고 표현한다. 객체지향 프로그래밍 패러다임은 객체란 개념도 도입했다. 객체란 데이터와 동작을 하나로 묶 은 것으로, 함수나 메서드에서 값을 매개변수화하는 방식과는 별개다. 1 옮긴이_ 제네릭 프로그래밍(일반화/범용 프로그래밍)의 기본 개념은 템플릿처럼 임의 타입에 적용할 수 있는 범용적이고 일반화된 형태 의 코드를 작성하는 것을 말한다. 마치 특정 회사의 상표나 개성이 빠진 기본 골격만 갖춘 OEM 제품 같은 느낌이라고 볼 수도 있고, 상속 계층처럼 상위/하위로 분류되는 개념에서 하나 이상의 윗 단계에 있는 형태의 뉘앙스도 있다. 수학에서 ‘일반화’라고 부르는 generalize, IT에서 범용이라 부르는 general (예: general - purpose )과도 의미가 연결돼 있지만 원어는 엄연히 generic이란 조금 다른 표현을 사 용했다. 정확한 포지션에 맞는 한글 용어를 찾아내는 노력도 의미 있지만, 현재 제네릭( generic )이란 음차 표현이 상당히 굳어진 상태여 서 일단 이 표현을 따르지만, 세부사항을 설명하는 문맥에서는 주로 ‘범용’이란 표현을 사용했으며, 간혹 ‘일반화’란 표현도 사용했다. 참 고로 자바와 C#도 C++의 템플릿에 해당하는 제네릭(generic ) 기능을 제공한다.

554 3부 전문가답게 C++ 코딩하기

Profile for 한빛미디어

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

Advertisement