predicate, 서술자
C++에서, 부울 결과를 돌려주는 함수 객체를 predicate라고 부릅니다. 아마도 다른 언어들에도 비슷한 것이 있을 것입니다.
조건자라는 용어를 쓴 책도 있다고 들었는데, 부울 결과라는 것과 조건이라는 용어가 잘 어울린다는 점에서 의미있는 선택이라고 봅니다. 그러나 condition variable predicate, condition predicate 등 condition이 붙어 나오는 경우에는 좀 곤란해집니다.
저는 서술자라는 용어를 사용해 왔는데요. 서술자라는 용어의 문제점은 descriptor와 충돌한다는 점입니다. descriptor도 서술자라고 번역해 왔거든요. descriptor를 기술자라고 하면 engineer와 충돌하고요.
다행히 예전 책들에서는 predicate와 descriptor가 같이 나오지 않았지만, 최근 나온 Windows 시스템 프로그래밍 제3판에서는 같이 나왔습니다. 시스템 프로그래밍인만큼 파일과 보안을 다루며, 따라서 파일 서술자와 보안 서술자가 안 나올 수가 없죠. 서술자로서의 predicate는 스레드 동기화 부분의 condition variable predicate에서 나오고요. 불행중 다행으로 predicate와 descriptor가 같은 문단이나 절 안에서 함께 쓰이지는 않았습니다만...
서술자라는 용어를 사용했던 주된 이유는 prediate가 술어 논리라는 논리학의 용어와 서술어, 서술부라는 언어학의 용어와 관련이 크다는 생각 때문이었습니다.
술어 논리에 대해 잘은 모르지만 아주 간단히 이야기하면: 예를 들어 Tom is a student라는 문장에서 Tom은 주어이고 is a student는 서술어(또는 서술절, 서술부)입니다. 이 문장을 하나의 명제라고 볼 때 이 명제(의 진위 여부)를 술어 논리에서는 is_student(Tom)라고 표기한다고 합니다. 형태를 보면 C++의 predicate와 다를 바가 없죠.
번역어를 선택할 때 관련 분야(이 경우 언어학, 논리학)와 같은 용어를 사용해서 연관 관계를 드러내는 것[1]이 중요하다고 한다면, predicate의 번역어는 꼭 서술자가 아니더라도 '술'이라는 글자만큼은 들어가야 할 것 같다는 생각입니다. 술어, 술어 객체, 서술부 함수 등 여러 가지가 가능하겠지만, 서술자보다 아주 나아 보이지는 않습니다. 서술자는 반복자 등과 같이 ~자로 끝나서 왠지 일관성이 있어보이기도 하구요.[2]
[1] 의역과 직역 - Desktop의 사례에서 말한 비유의 유지와도 관련된 이야기인데 나중에 좀 더 써보겠습니다...
[2] 극복해야 할 일관성일 수도 있겠지만요... iterator, 반복자 참고 )
그러나 descriptor와 심하게 충돌하는 책을 번역하게 된다면 아마 서술자가 아닌 다른 번역어를 택할 것 같습니다.
예전 댓글(읽기 전용)
-
류광, 2005-09-14 23:09 :
판단자도 좋군요. 부울 결과를 돌려주는 함수 객체에 붙일 이름으로요... predicate의 번역어로는 본문에서 말한 이유 때문에 조금 아쉽구요...
-
쌀밥, 2005-09-16 01:09 :
이 글을 읽기 전까지는, predicate 와 descriptor 가 모두 서술자로 번역되고 있다는 사실을 미처 의식하지 못했네요. 그냥 동음 이의어로 생각해 버려도 되지 않을까요? ㅎㅎ;;
-
저도 판단자를 건의하려고 답글(3)을 눌렀더니, 위에 어떤 분이 건의를 해버리셨네요. 아직까지는 stl 구현에서 bool 판단을 하는 함수자에서 밖에 보지 못해서, 판단자가 나을 것 같습니다.
-
저는 조금 다른 의미에서 규칙을 만들어서 사용합니다. -er나 -or가 붙은 단어, 그러니까 '주어진 동작 혹은 역할을 수행하거나 가지는 주체'는 [동작/상태성명사]+"자(子/者)"의 조어를 최대한 사용하고, 이외의 경우엔 원어의 의미 및 국내 사정과 잘 맞는 단어를 찾아 사용합니다. 때문에 TC++PL에서 predicate=술어함수라고 썼었습니다. 용어만큼은 원문과 잘 조화된 느낌을 전달해야 이해에 무리가 없다고 생각하기 때문입니다. 사실 predicate란 말 자체가 predicate calculus에서 그대로 가져온 것이기 때문에 "술어"라고 쓰더라도 아무런 하자가 없습니다. f(x)를 수학에서 가져온 용어 그대로 "함수"라고 부르는 것과 마찬가지죠. 기존 분야의 용어를 프로그래밍 분야로 가져오면서 기존 분야의 그것을 그대로 차용하느냐 아니면 프로그래밍분야에 맞게 현지화하느냐의 고민은 늘 있어왔으나, 한자조어만 보고는 뜻을 알 수 없는 아주 과거의 말을 자주 접하면서(함수가 대표적이죠) 조금 더 정신차리지 않으면 안 될 거라는 생각을 합니다. 가급적이면 용어를 한문화, 우리말화하자는 사고보다는 어떻게 하면 독자들이 기존 지식의 토대 위에서 편하게 이해할 수 있는가를 고민하는 쪽이 더 필요하다고 보고요.
-
류광, 2005-09-19 18:09 :
판단자도 좋지만 결과적으로는 C++ 공동체 전체에게 predicate를 버리고 다른 용어를 제시하는 것일 수 있습니다... 저로써는 감히.. ^^(훑개가 마음에 들지만 사용하기 꺼려지는 이유도 이것입니다.) 이 주제에 대해 (객체지향 논의와 연관해서) 글을 하나 더 써야겠습니다.
술어 함수도 좋네요. 서술자가 크게 충돌한다면 술어 함수를 1순위로 고려할 생각입니다.
그리고 한문화, 우리말화에 대한 사고와 독자의 편한 이해를 추구하는 것이 대립되지는 않습니다. 좀 더 들어가자면 두 가지 고민으로 나뉠 텐데요. 하나는 일반적인 독자(프로그래머)들의 교양 수준이 어떠한가, 또 하나는 기존의 번역어들이 어떻게 만들어 졌는가...
그런데 둘 다 건드리기가 쉽지 않네요. 특히 둘째 문제는 근대사와 연관이 되어 있어서 건드리려면 단단히 준비를 해야 할 것입니다...(인문학자, 사학자들이 나서야 할 것 같은데요)
"판단자"는 어떨까요? condition predicate라면 "조건 판단"이 되겠고... 음 안 좋은 번역인가;