object - 개체와 객체

류광, 2003/03/28 15:46
오랜만에 글을 올립니다..

요즘 비베 쪽에 알아볼 것이 있어서 비베 사용자들이 많이 모이는 사이트들을 돌아다녔는데, 제 나름대로는 좀 충격적인(?) 글들을 보았습니다.

object는 객체로 완전히 굳어질 줄 알았는데, 비베 사용자들 중에는 개체라고 하는 분들도 많더군요. 아마도 한글 도움말의 영향이 큰 것 같습니다.

개체와 객체 중 딱히 어느 것이 더 옳다고 말하기는 힘들 듯 합니다. 어쨌든... 비베에서 object를 개체라고 하는 것은 상당히 타당성이 있습니다.

object는 두 가지 문맥에서 쓰인다고 할 수 있는데.. 우선 첫번째로, object는 현실에 존재하는 실체들... 즉 소프트웨어 개발자가 모델링해야 하는 대상들을 가리킵니다. 이 경우에는 개체보다 객체가 더 적합한 것 같습니다. 즉... 프로그래머, 즉 주체가 인식하고 조작하고자 하는 대상으로서의 객체... 주체의 반대 개념으로서의 객체라고 생각해야겠죠(윽.. 혀가 꼬이네요...무슨 말인지 잘...).

또 하나는 틀 또는 류(類)로서의 클래스로부터 비롯된 인스턴스, 즉 현현체 또는 구현체로서의 object - 이 경우에는 개체가 더 적합합니다. 예를 들어 고양이는 클래스이고 우리집 야옹이는 object이다.. 이런 경우 개체라는 용어가 더 적합하겠죠.

비베는 객체 지향적 개발 환경이라기보다는 컴포넌트 기반 환경이며, 대부분의 류(클래스)들이 내장되어 있거나 컴포넌트라는 형태로 '이미 존재해 있는' 상태인 경우가 많구요. 실제로 주로 다루게 되는 것은 모델링 측면에서의 객체라기 보다는 이미 존재해 있는 류들의 현현체들로서의 개체입니다(역시... 아는게 없다 보니 말이 어려워 졌네요..)

또 비베 사용자들은 컴포넌트를 구성요소라고 하는 경우가 많은데, 역시 한글 도움말의 영향이겠죠. 매우 바람직한 현상이라고 생각합니다. 컴포넌트는 구성요소 이상도 이하도 아니죠... 그냥 구성요소 바로 그것입니다. 다른 언어 사용자들도 구성 요소라는 말을 한 번 적극적으로 고려해 보면 어떨까요...

-- 2001. 08. 05 15:09:33
top
TAG 번역
트랙백 0 : 의견 # + 0

valid, well-formed, 유효한, 적격

류광, 2003/03/28 15:45
XML의 중요 개념들 중 하나가 valid document, well-formed document입니다. 저는 각각 '유효한' 문서, '적격' 문서라고 번역했습니다. Professional XML Applications에서 처음 사용했구요...

valid를 유효한이라고 하는 것은 별 무리가 없다고 생각합니다. 대부분 그렇게 하죠.
well-formed는... 사실 별로 어려운 단어가 아닌데요. 영한 사전에도 '적격의'이라고 되어 있습니다. 적격이란 말 그대로 격이 맞는다는 뜻이구요. 언어학/문법에서 쓰이는 용어죠. 그런데 XML 초기 시절 잡지나 글들에서 well-formed를 '잘 짜여진', '구조를 갖춘' 같은 말로 표현하는 경우가 많았습니다. 적격이라는 말이 있음에도 그런 표현을 한 것은... 설마 저자들이 사전을 찾아보지 않았던 것은 아닐테구요. 아마 컴퓨터 기술에 언어학의 용어를 선뜻 쓰기가 뭐했던 것이 아닐까 생각합니다.

어쨌든.. 제 생각에 well-formed는 '적격의', well-formedness는 '적격성'으로 번역하는 것이 가장 적격입니다. XML도 '언어'구요. well-formed가 의미하는 것이 바로 문법에서 말하는 바로 그 '적격의'입니다. 여기서 '격'이라고 하는 것은... 주격, 소유격, 목적격 어쩌구 할 때 바로 그 격이구요. 격이 맞지 않으면 문장이 되지 않죠. XML도 마찬가지구요. 반면, 격이 맞는 문장이라도 말이 되지 않을 수 있습니다. XML도 마찬가지.. 그래서 '적격인 문서가 반드시 유효한 문서는 아니다'라는 말이 나오는거죠.

-- 2001. 08. 05 15:09:05
top
TAG 번역
트랙백 0 : 의견 # + 0

override와 재정의, overload와 중복

류광, 2003/03/28 15:43
다 아시겠지만 override라는 것은.. 부모로부터 물려받은 것을 다르게 만든다는 개념입니다. 별로 어렵지 않은 개념으로, 객체지향의 상속성에 관련된 것이죠.

반면 overload는... 동일한 모습을 가진 어떤 것이 상황에 따라 다른 방식으로 작동하게 하는 것입니다. 이것은 객체지향의 다형성에 관련된 것이죠. 예를 들어서 + 연산자는.. 모습은 같지만 정수에 쓰일때, 문자열에 쓰일때, 부동소수점에 쓰일 때 모두 다른 방식으로 작동하죠.

저를 비롯해서 많은 사람들이 overload를 중복이라고 번역합니다. 이는 어느 정도 굳어진 것이죠. override는 아직 굳어진 용어가 없는 것 같습니다. 오버라이드, 오버라이딩 등등 발음 그대로(좀 오버를 한다면 오버롸이드..) 쓰는 경우가 더 많은 것 같더군요.

제 번역 역사 중 override가 처음 나온 책은 아마 C++ Howto였던 것 같은데요... 조금 고심을 했습니다. 두 가지 후보가 있었는데요. 하나는 '번복'이구요. 또 하나는 제목에 나온 '재정의'입니다.

번복의 장점은... 중복과 운율(!)이 맞다는 것. override와 overload, 번복과 중복... 짝이 맞죠. 의미상으로도 그리 틀리지 않고요... 부모가 정의한 메서드를 자식이 '번복'한다... 그렇죠? 그러나.. 안그래도 override와 overload를 혼동하는 사람들이 있는데, 한글 번역어까지 비슷하게 만들 필요는 없다는 점과, 또 '번복'이라는 말의 어감이 그리 좋지 않다는 점... 특히 심판들의 자질에 상당히 불만이 많은 프로축구 팬으로서 '번복' 같은 말은 정말 싫거든요...

그래서 재정의를 선택했습니다. 처음엔 어색하더라도... 자주 쓰면 머리 속에서 override와 재정의가 자연스럽게 연결될 것입니다.

-- 2001. 08. 05 15:08:40
top
TAG 번역
트랙백 1 : 의견 # + 4

hierarchical - 계통적인가, 계층적인가....

류광, 2003/03/28 15:42
hierarchical이라는 단어... 어떠한 구조를 설명할 때 자주 나오죠. 윈도우즈 탐색기의 예와 함께 나오는 경우도 많구요. 대충 말하면 트리 구조에 해당하는 말인데... 영한 사전을 보면 계급 조직의, 계급제의, 계층적인 등으로 되어 있습니다.

그러나 '계층적'이라는 말은 적어도 프로그래밍에서의 hierarchical에는 좀 맞지 않는 부분이 있습니다. 왜냐하면 layer나 level과 겹치기 때문입니다. 제가 쓰는 용어는 '계통적'입니다. 적어도 프로그래밍 분야에서 hierarchical은 대부분 어떠한 부모-자식 관계, 즉 종적인 관계에 강조된 용어입니다. 그렇다면 '계통적'이 더 적합하리라고 봅니다. '계층적'은 수평적, 횡적 관계에 적합하구요...

굳이 예를 들자면... HTTP는 OSI 일곱 계층의 '응용 계층' 프로토콜에 속하구요.. 응용 계층의 또다른 프로토콜인 FTP와는 수평적인 관계죠. 반면 계통적이라는 것은... 예를 들어 PasswordBox는 InputBox로 비롯되는 입력 대화 상자의 계통에 속한다 정도.... 수직적인 관계가 강조된 것입니다.

계층적이라는 것은 여러 개의 층들이 쌓여 있는 것, 계통적이라는 것은 하나의 조상으로부터 각각의 후손들이 뻗어나가는 것이라고 할까요.. 어쨌든 두 용어 사이의 차이는 틀림없이 존재합니다. 함께 쓸 수 있는 성질이 아니라고 생각합니다...

-- 2001. 08. 05 15:08:11
top
TAG 번역
트랙백 1 : 의견 # + 2

comment out과 loop through

류광, 2003/03/27 22:46
이번 역시 번역가 지망생이나 원서를 읽으시는 분들께 도움이 될만한...

comment out과 loop through 모두 오직 프로그래머들만 사용하는 말입니다.

comment out... comment는 주석, 각주, 참고 노트 뭐 그런 뜻에 관련된 것이구요. 기본적으로는 '뭔가 한 마디 덧붙인다', 즉 기존의 어떤 것에 뭔가를 추가한다는 의미를 내포하고 있습니다. 그런네 out은 그 반대... 빼다, 내보내다, 제외시키다 그런 뜻을 가지고 있죠. 이 두가지가 결합된 숙어는 프로그래밍에 관련된 글에서만 나타나는 것 같습니다. 뜻은 대부분 알고 계시겠죠. 번역하자면 '주석 처리하다', '주석으로 제외시키다'가 되구요. 좀 더 길게 설명하면,

"어떤 특정한 코드에 주석 표시를 추가해서(comment) 그 부분을 컴파일 또는 기타 처리로부터 제외(out)시킨다"

가 됩니다. comment out이 프로그래머만의 말이 된 것은, 다른 분야에서는 주석을 추가한다는 행위가 뭔가 처리에서 제외시키는 결과가 되는 일이 거의 없기 때문입니다. 오직 프로그래밍 언어에서만 있는 일이죠...

loop through 역시 프로그래밍 서적에만 나오는 숙어... 이와 비슷하면서 좀 더 일반적으로 쓰이는 것은 walk through입니다. 어떤 여러 개의 항목들을 차례 차례 거쳐가면서 보거나 처리하는 것을 뜻하죠.
제가 선택한 번역은... 상황에 따라 '루프로 돌려서 처리한다' 또는 '루프 안에서 훑어 나간다' 정도입니다.

loop through라는 말을 처음 쓴 사람은 아마 walk through에서 영감을 얻었을 겁니다. 게임의 세세한 공략을 walk through라고도 하죠. 어떤 시스템 또는 집합 안의 각 요소들을 하나 하나 거쳐 가는 것을 walk through라고 할 때, 프로그래밍 세계에서 그런 일을 하려면 항상 루프문이 끼어 들게 되죠. 그래서 walk에 through를 붙이듯이 loop에 through를 붙였지 않았을까요.

또하나 재미있는 것은, 일반 영어 사전에도 loop가 동사로 쓰인다고 나와 있긴 하지만 '고리로 만들다', '고리로 묶다' 정도의 뜻만 있을 뿐 프로그래밍 세계에서처럼 '반복적', '순환적'이라는 의미를 가지지는 않습니다.... loop가 '루프를 돌리다, 반복적으로 처리하다'라는 동사로 쓰이게 된 것은 명사로서의 loop에서 의미를 가져온 것으로 보입니다.

역시 한가지 교훈... 프로그래머에게는 프로그래머만의 언어 생활이 있으며, 저자들 중에는 새로운 말을 만들어 내는 것이 일종의 취미인 사람도 있다는 점... 번역은 저자와의 머리 싸움이기도 하죠...  

-- 2001. 08. 05 15:07:42
top
TAG 번역
트랙백 0 : 의견 # + 1