x-like

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이란 용어도 사용한다. 하지만, 그 컨셉에 맞는 객체를 표현하는 용어는 딱히 정해진게 없는 듯 하다.

양심에 따른 병역거부와 대체복무제에 지지를 보냅니다.

양심(良心)
사물의 가치를 변별하고, 자기의 행위에 관하여 선을 취하고 악을 물리치는 도덕적 의식. (via. 야후 국어사전)

자기 자신의 도덕률에 의해 (그것이 종교적이든 신념-평화주의-이든 그 어떤 것이든) 법에서 규정하는 병역의무를 수행하지 못하는 사람들은 충분히 있을 수 있고, 실제로 존재하고 있다. 사회-법률 시스템은 이들을 범죄자로 규정짓고 배신자로 낙인찍어버린다.

국방의무는 헌법이 규정한 4가지 기본의무 중 한가지이고, 싫든 좋든 대한민국 국적을 갖고 있는 사람이라면, 반드시 지켜야할 의무다. 하지만, 이 의무를 수행할 수 있는 방법을 단 한가지로 규정짓고 이를 강요하는 것은 뭔가 이상하지 않은가? 그것도, 개인의 양심-도덕률, 혹은 신념-에 따른 판단을 완벽하게 무시하고, 범죄자로 규정짓는 현 제도말이다.

대부분 “양심적 병역거부”, “양심에 따른 병역거부” 등의 단어를 보는 순간 생리적인 거부반응을 보이며, “그럼 군대 안갔다온 사람은 전부 비양심적이냐?” 라는 반응을 보이기 쉬운데, 여기서 이야기하는 양심은 저 위에 써놓은 저 양심을 이야기한다. 즉, 군대를 갔다고 해서 비양심적으로 군대를 간건 아니라는 이야기이다. 국방의무를 병역으로 하는 것이 자신의 도덕적 의식/도덕률에 어긋나지 않는다면 가면 되는 것이니깐.

이런 관점에서 보면, (비록 산업기능요원이지만) 나는 참 비양심적인 인간이다. 군복무가 나 자신의 도덕적 의식에 반함에도 불구하고, 4주라는 기간동안 훈련을 받고, 국가에서 정한 방침에 따라 3년간 병역을 수행하고 있으니 말이다. 어쩌겠는가. 나에겐 현실이 더 중요했고, 비겁하게 4주라는 기간을 허용할 수 밖에 없었으니까. 뭐 이건 나의 경우이다. 내 도덕률에 따르면 4주라는 기간도 허용되지 않는 것이었으니까.

어찌되었든, 도덕률에 의해 군입대를 거부하는 사람들을 감옥에 가두고 범죄자를 만들며 썩히는 것 보다는, 그냥 좀 더 나은 사회적 자원으로 활용하는 것이 좋지 않겠는가? 사회보장제도나 기타 인적자원이 필요한 부분은 엄청나게 많다. 물론, 이것이 병역회피의 기제로 작용할 수는 있겠지만, 그건 대체복무제의 기회비용이 현역복무보다 크면 해결될 일이다. 대체복무제가 현역보다 힘들거나 잇점이 없다면, 누가 대체복무제를 선택하겠는가?

현재, 대체복무제와 유사하다고 생각되는 제도는 산업기능요원/전문연구요원 이란 제도가 있다. 이 제도는 군대에서 군사적 역할을 수행하는 것 보다, 산업체에서 일하는 것이 국익에 더 도움이 된다고 생각한 정부의 계산에 따라 존재하는 것이므로 대체복무라고 보기는 어렵다. (실제로 군사훈련을 받는다. 4주긴 하지만..) 이 제도는 현역복무보다 1년이 더 길다. (3년 복무) 주변의 친구들을 보면, 보통 3년 회사에서 일하느니 2년 빡세게 구르는게 낫겠다며 군대에 간 (정확히는 갔다온) 친구들이 많다. 1년이라는 기간이 현역복무와 산업기능요원/전문연구요원 사이의 기회비용 차이를 만들어 낸 것이다. 대체복무제가 만들어진다면 당연히 이 차이보다 더 큰 기회비용의 차이가 존재해야 할 것이다.

대체복무제가 생기면 누가 군대를 가겠냐는둥의 이야기는 그만하자. 대체복무제와 현역복무의 기회비용의 차이를 크게 만들면 될일이다. 누군 군대를 가고 싶어서 갔느냐? 라는 이야기도 그만하자. 그럼 대체복무제는 누가 하고 싶어서 하겠는가? 대체복무제는 병역기피의 수단이 아니라, 병역대체의 수단이다. 국방의무를 “어떻게” 수행하느냐의 차이이다. 현역복무를 못하겠다면, 다른 길을 열어주는 것이다. 더 힘든 길을.