iterator, 반복자

류광, 2005/08/29 00:05

iterator를 반복자로 번역한 것에 대해 의문을 표시한 독자분이 있었습니다.

돌이켜보면 제 번역서에서 반복자를 처음 사용한 것은 1999년 정보문화사에서 나온 Waite Group의 C++ How-To였던 것 같습니다. 그 때 반복자라는 용어를 제가 직접 생각해 냈는지(최초는 아니겠지만) 아닌지는 기억이 나지 않습니다. 그 책을 제가 읽은 유일한 한글 C++ 책은 1995년도에 인포북에서 나온 양진석 저(역?) "C++ 프로그래밍"이었는데 거기에는 반복자라는 용어가 없었구요.

어쨌든, iterator의 번역어로 무엇을 택할 것인가에 대해 고민했던 기억은 없었습니다. '당연히 반복자다'하는 느낌이었던 것 같습니다.이후 여러 번역서와 문헌들에서 반복자라는 용어를 접하면서, 제 모든 번역서에서 iterator는 반복자가 되었습니다.

앞에서 언급한 독자분은 iterator가 과연 반복이라는 것과 관련이 있는가 하는 문제를 제기하셨습니다. 그런데 사실 iterator의 어근(?)인 iterate에는 '반복하다', '되풀이하다'라는 뜻이 있을 뿐입니다. 거기에, constructor-생성자의 예처럼 '~or'를 '~자'로 번역해서 반복자가 된 것입니다.

앞의 독자분이 제기한 것은 아마도 C++의(그리고 사실 자료구조 전반에서의) iterator가 뜻하는 바를 과연 '반복자'라는 용어가 온전히 담고 있는가의 문제일 것입니다.

전산학에서 말하는 iteration을 단순한 되풀이(repetition)과 굳이 구분하자면, "매개변수화된 반복", 즉 매번 뭔가 다른 부분이 있는 반복이라고 할 수 있습니다. 예를 들어 다음은

for(int i = 0; i<10; ++i)
    std::cout << "#"; 
같은 일을 10번 반복한다는 점에서 단순한 되풀이에 해당하지만, 다음은
SomeIter it = ....;
for(;it != somecont.end(); ++it)
    std::cout <<*it;

매번 출력하는 글자가 다를 수 있다는 점에서 it에 의해 매개변수화된 반복이라고 할 수 있습니다.

이러한 반복에서 중요한 수단으로 쓰이는 것이 바로 반복자입니다. 물론 반복자 자체에 반복 메커니즘이 있는 것은 아니라는 반박도 유효합니다. 사실 반복자는 "요소 접근을 일반화하는 수단"이라고 설명하는 것이 가장 정확할 것입니다. 다만 그러한 일반화의 주된 목적이 반복이라는 점이 중요하겠고요. (그 외에는 전달, 저장이 있겠습니다.)

지금까지 말한 것들이 반복자라는 용어 자체에 온전히 담겨 있지는 않습니다. 그러나 이런 문제는 iterator 자체에도 적용이 됩니다. 어쩌면 데이터베이스에서 쓰이는 "커서(cursor)"가 더 적합할지도 모르겠습니다. 사실 예전의 객체지향은 잘못된 번역인가 에서도 이런 관점의 논의가 있었습니다. 이 부분에 대해서는 "함흥차사"가 좋은 예가 될 것입니다. :)

제가 반복자라는 용어에 완전히 만족하는 것은 물론 아닙니다. 예전의 객체지향 논의에서 변별력, 합의 같은 이야기를 했었는데, 만일 그런 것에 자유로울 수 있다면 반복자 대신 "훑개"라는 용어를 사용하고 싶습니다.

훑개가 마음에 드는 이유는 두 가지인데, 첫째는 반복자가 쓰이는 어떤 작동을 이야기할 때 "훑다"라는 동사가 요긴하다는 점입니다. 예를 들면 "요소들을 차례로 훑으면서..." 등. 또 한가지는 '~or'를 '~자'로 두는 것(예를 들면 constructor/생성자 등)에서 벗어나고 싶다는 점입니다. 어떤 도구의 이름을 만들 때 ~자(아들 자)를 붙여서 말을 만드는 방식이 어디서 비롯된 것인지는 잘 모르겠는데, 아마도 일제 강점기부터가 아닐까 싶습니다. 어쨌든, '훑다'라는 순우리말 동사에 '지우개', '깔개' 등 이미 많이 쓰이는 '~개'를 붙여서 만든 '훑개'는 iterator의 의미를 '반복자'보다 더 잘 반영하며(적어도 일부 측면은) 게다가 구성요소와 조어법 모두 순 우리말이라는 점에서 마음에 듭니다.

p.s. 쓸 때는 몰랐는데 쓰고 보니 꽤 기네요... 긴 글 읽어 주셔서 고맙습니다. 그리고 예제 코드가 엉망이었습니다... 뭐 의사코드 차원으로 만든 것이긴 하지만, 그래도 완전히 말도 안 되는 부분은 고쳤습니다.

top
트랙백 1 : 의견 # + 15

Trackback Address :: http://occamsrazr.net/tt/trackback/78

  1. Tracked from Younghoe.Info 2006/10/26 14:28 DELETE

    Subject: 프로그래밍 서적 번역의 어려움

    얼마전 Refactoring Databases 번역을 맡기로 했다가 취소해서 해당 출판사에 폐를 끼친 일이 있다. 애초에는 좋은 책을 출간하려는 그분들의 의지와 국내에는 보급이 더딘 좋은 사상들을 전하고 싶..
comments powered by Disqus

(2013년 11월 10일자로 블로그에도 DISQUS 시스템을 도입했습니다. 기존 의견의 수정, 삭제, 댓글 추가는 여전히 가능합니다.)

  1. atprompt 2005/08/29 11:03 PERMALINKMODIFY/DELETE REPLY

    저도 최근 iterator에 대해서 왜 반복자라 했을까? 하는 의문이 있었는데, 그런 고민이 있었군요. "훑개", 괜찮은 것 같은데요? 반복자 보다는 말씀하신 대로 의미가 더 다가옵니다. 더 나은 것은 없을까요? 예전에, MS-Access에서 필터라는 것이 있었죠? 예를 들어 SQL 구문의 Where 절에 org = 'aa' 이런 식으로 그럴 알고 지내던 선배가 "추려보기" 라고 만든 프로그램에 넣었던 적이 있는데, 정말 확 와닫는 의미였습니다.
    앞으로도, 번역하실 작업에 한글을 적극 활용해 주세요. ^^

  2. Sensui 2005/08/29 19:20 PERMALINKMODIFY/DELETE REPLY

    흠..아무래도 옛날 책들 보면 한자어로 이루어진 언어를 많이 쓰던데.컴퓨터에도 그런 여파가 있지 않았나 싶습니다. 그런데 훑개는 발음하기 좀 힘들지 않나요?^^:

  3. 류광 2005/09/01 00:22 PERMALINKMODIFY/DELETE REPLY

    두 분 답글 고맙습니다...

    그나저나 훑개를 과연 실제 번역서에서 사용할 수 있을지는 의문입니다.... 물론 GPG 4에서 밀개, 끌개 같은 용어를 사용했지만 그것들은 한국물리학회의 사례가 있었기 때문에 부담이 없었는데요...

  4. zelong 2005/09/03 18:46 PERMALINKMODIFY/DELETE REPLY

    훑개라고 하니까 딱 감이 옵니다. (한국인만이 느낄 수 있는) 반복자보다 훨씬 iteration을 잘 설명하는 말 같습니다. ...하지만 말씀하신 것처럼 말이란 것이 윽박으로 바뀌는 게 아니니 당장 쓸 수 없음을 안타깝게 여길 뿐이네요.
    컴퓨터라는 말도 전산기, 셈틀 같은 대체어를 가지고 있듯이 강요는 하지 않고 예비 대체어들을 꾸준히 보관한다면 굳이 우리 세대가 아니라 하더라도 언젠가 이 정감 있고 정확한 말이 쓰일 날이 올 거라고 생각합니다.

  5. CN 2005/09/04 02:29 PERMALINKMODIFY/DELETE REPLY

    좋은 단어입니다.!!
    평소에 훔쳐만 보다가 이 글에 약간 충격을 느껴 글을 적습니다!

  6. redpixel 2005/09/16 23:49 PERMALINKMODIFY/DELETE REPLY

    간만에 들립니다. 훑개라... 전 이유야 어찌되었든 "반복자"에 인이 박혀서... ㅜ_- 오늘부터라도 우리말 단어로 적용해버릇해야겠네요.

  7. 琴君 2005/09/18 21:23 PERMALINKMODIFY/DELETE REPLY

    후배가 "&#55133;개"는 "셈틀"꼴 난다면서,
    iteration은 "돌림빵"이라는군요. -_-;
    반박의 여지가 없었습니다 -_-;;;

  8. 류광 2005/09/19 18:48 PERMALINKMODIFY/DELETE REPLY

    반박의 여지가 없다기보다는 반박할 가치가 없는 용어가 아닐까요.. ^^ (오랜만에 들어보는 단어인데 혹시 의미가 바뀌었는지....)

  9. 琴君 2005/10/19 14:04 PERMALINKMODIFY/DELETE REPLY

    아-_- 훨씬 안좋은 뜻도 있었군요. 생일'빵' 같은 류의 '뭇매'라는 뜻만 생각나서요 ;;
    가능하면 만들어 낸 말 보다는 있던 말을 차용하는 편이 제 취향에는 맞는 듯합니다.
    물론 저런 별로 안좋은 표현 말구요-_-; (한달만에 답글이군요)

  10. hey 2005/12/02 18:29 PERMALINKMODIFY/DELETE REPLY

    atprompt> 필터의 다른 우리말 번역으로는 그놈 번역에서 주로 사용되는 "거르개"도 있습니다. :]

  11. vortex 2007/09/20 07:54 PERMALINKMODIFY/DELETE REPLY

    반복자라는 번역어를 대체할 만한 단어는 이미 번역 문서들에서 나와있지 않을까 하는데요.

    저는 그 가운데서 '각 요소들을 순회하다'가 가장 의미가 잘 전달된다고 생각합니다.

    이것을 명사화 시킨다면 순회변수, 순회자, 혹은 순회기 쯤 되겠네요.

  12. vortex 2007/09/20 08:00 PERMALINKMODIFY/DELETE REPLY

    첨언하자면 전문용어를 순우리말로 번역하는 일은 좋은 판단이 아닌 것 같습니다.

    개념이 어려운 어떤 용어가 있을때 그만큼이나 개념이 어려운 순우리말로 대체한다고 해서

    그 의미가 더 쉽게 전달될 것 같지는 않습니다. 한문용어로 의미를 최대한 근접시키고 그에 대한

    설명이나 도식을 뒷받침하는게 좋을 것 같아요.

  13. 류광 2007/09/20 20:47 PERMALINKMODIFY/DELETE REPLY

    문제는 어차피 영어이든 순우리말이든 한자이든 용어 자체가 개념을 온전하게 전달하기는 힘들다는 점입니다. 예를 들어 iterator라는 용어 자체에서 얻을 수 있는 뜻은 iterate 하는 것(-or) 밖에 없지요. 그 외의 지식은 사실 iterator 외부에서 온 것입니다.

    이는 우리가 전문 용어라고 생각하는 것이 과연 전문적인 용어인가라는 문제제기로도 생각할 수 있습니다. 두문자어 용어들을 제외할 때, 전문 용어라고 하는 것들은 용어 자체가 전문적인 것이 아니라 용어로 표식을 붙인 대상이 전문적인 것일 뿐인 경우가 많습니다.

  14. 나그네 2011/03/18 16:56 PERMALINKMODIFY/DELETE REPLY



    잘 이해가 안되는 부분이었는데 님 덕분에 잘 이해했습니다.

    좋은글 퍼가도록 할께요...출처는 명시했습니다.

  15. 류광 2011/03/18 23:53 PERMALINKMODIFY/DELETE REPLY

    이 블로그는 최대한 오래(어쩌면 네이버보다도 더^^) 유지할 계획이니 굳이 퍼가실 필요 없이 링크&트랙백만 거시면 되는데요... 다음부터는 그렇게 하시길!