- generic programming
- In computer science, generics is a technique that allows one value to take different datatypes (so-called polymorphism) as long as certain contracts such as subtypes and signature are kept. The programming style emphasizing use of this technique is called generic programming. – via wikipedia
사실, Generic Programming(이하 GP)은 C++이나 Java, C#등의 타입이 중요한 언어에서 로직의 타입에 대한 종속성을 줄이기 위해 유용하게 사용될 법한 기법이다. 그래서 저 말이 유용하게 들린다. 하지만, 막상 문서를 작성하다보면 머리가 좀 아플때가 있다.
C++을 주로 사용하기 때문에, C++을 예로 들면, process_event라는 메소드를 정의한 객체를 매개형식으로 받아야 오류가 발생하지 않습니다. 라는 말을 하고 싶은데 저 말을 딱히 줄여서 간단하게 쓸 방법이 도무지 떠오르질 않았었다. GP가 아니라 Object-Oriented Programming(이하 OOP)였다면 저런 경우 상위클래스를 뽑아놓고, 상위클래스의 포인터를 받는다고 써주면 되기 때문에 큰 문제가 발생하지 않지만, 다형성(polymorphism)을 GP를 이용해 구현하기로 했다면, 적절한 용어가 없어서 고민하게 된다.
이런 일로, 어떻게 써줘야하나 고민하고 있었는데, 불현듯 전에 잠깐 공부하던 pygame의 문서가 생각났다. 가장 인상적이었던 표현은 바로 rect-like object였는데, (top, left, width, height)의 튜플형태로 evaluate되는 모든 객체를 의미하는 거였다. 즉, 진짜로 저런 튜플을 넘겨주거나, 저런 튜플로 할 수 있는 연산을 미리 정의한 클래스라면 상관없다는 이야기. 즉, X-like 였던거다. X이거나 X와 동일하게 컴파일/실행 될 수 있는 타입!
iterator-like, int-like, short-like, stream-like등 활용예가 많아졌다. 🙂 – 위에서 예로 들었던 process_event를 정의한 객체같은 경우는 state machine-like가 되시겠다. –
여기까지 생각하다가 좀 더 생각이 나갔는데, GP는 말이 좀 어렵지 않나라는 생각이 들었다. 타입을 중시하는 언어에서나 적용될 법한 개념이기도 하니 말이다. x-like programming. 뭔가 좀 명확해보이긴 하나 역시 모호하긴 매한가지라는 생각도 들었다.
이젠 x-like라는 말로 간단하게 문서를 정리할 수 있을 것 같다.
ps1. STL같은 경우는 매개변수의 이름을 통해서 정리를 해주는 경향이 있다. iterator 혹은 그와 동일하게 evaluate되는 타입일 경우는 IteratorT와 같은 형태로 많이 쓴다. InputIteratorT, OutputIteratorT.
ps2. Boost MPL에서는 Concept이란 용어도 사용한다. 하지만, 그 컨셉에 맞는 객체를 표현하는 용어는 딱히 정해진게 없는 듯 하다.