brunch

You can make anything
by writing

C.S.Lewis

by 안영회 습작 Mar 21. 2024

대화를 이벤트로 만들고 클래스도로 표현하기

베터코드 인사이트의 부활

<주문과 거래 우선으로 시스템 전체 맥락 잡기>로 맥락을 잡았는데요. 이번에는 후보로 포착한 말들을 따져 볼 때입니다.


낱말의 뜻을 깊고 넓게 묻고 따지는 일의 실천

더불어 그 과정 속에서 최봉영 선생님을 통해 배운 <낱말의 뜻을 깊고 넓게 묻고 따지는 일의 소중함>을 실천[1]하고자 합니다. 관성적으로 써 온 조회부터 따져 봅니다.


사전을 보니 프로그램으로 접하던 느낌과는 풀이가 주는 뉘앙스가 사뭇 다릅니다.

「1」 어떠한 사항이나 내용이 맞는지 관계되는 기관 등에 알아보는 일.

조회는 비출 조(照)와 모일 회(會)가 합쳐진 낱말입니다. 이런 질문을 하게 됩니다.

비추어서 모이는 일이 조회인가?


조회란 말이 적합한 낱말인지 의구심이 드는 순간입니다. 예시로 나온 구문들도 신원 조회, 비밀번호 조회, 성적 조회 따위인데, 경우에 따라 '조회'가 맞는 경우와 그렇지 않은 경우가 있다는 생각이 듭니다. 하는 일의 몸체가 분명해지면 그 기능을 따져 보고 다시 적합한 말을 생각해 봐야 할 듯합니다.


대화는 대답할 대(對)와 말할 화(話)가 합쳐진 낱말로 풀이는 다음과 같습니다.

마주 대하여 이야기를 주고받음. 또는 그 이야기.

마음에 드네요. 그림에 총 여섯 개의 어휘가 있는데, 일단 대화 하나만 앞서 마음먹은 대로 '함께 만드는 Ubiquitous Language 정의' 후보로 삼아서 해 봅니다.


Ubiquitous Language란 무엇인가?

제가 쓰는 Ubiquitous Language(이하 UL)란 말 뜻부터 분명히 해 봅니다. 위키피디아 페이지 다발말[2] 수준의 정의에서 출발합니다.

These aspects of domain-driven design aim to foster a common language shared by domain experts, users, and developers—the ubiquitous language. The ubiquitous language is used in the domain model and for describing system requirements.

사업 담당자(domain experts를 바꿔 씁니다), 사용자 그리고 개발자 사이에 같은 말을 쓰는 것을 시도합니다. UL의 중요한 특징은 Bounded Context입니다. 앞서 <주문과 거래 우선으로 시스템 전체 맥락 잡기>에서 잡았던 맥락과 어휘(개념)를 묶어 두는 것이죠. 자주 인용하던 아래 그림에서 아래쪽 내용이 특히 UL과 밀접할 듯합니다.

도메인은 시스템을 둘러싼 지식의 영역(domain)을 말합니다. 지식들은 용어(Terms)의 형태로 의미를 담고, 관계를 꾸리는 과정에서 규칙(Rules)들이 드러날 듯합니다.


Ubiquitous Language 정의 시도

표준국어대사전 수준의 정의와 달라지는 점은 무엇이 있을까요?

마주 대하여 이야기를 주고받음. 또는 그 이야기.

우리는 Cloud Native라고 부르는 통합 전략 그리고 '정보 자산을 개별 메뉴와 연결하는 UX 제공하기'를 위해서 이벤트를 표준 프로그래밍 모델로 채택할 예정입니다. 그에 준하여 처음으로 손때를 묻혀 봅니다. 왼쪽은 제가 좋아하는 UML 클래스도이고, 우측은 두레이가 지원하는 PlantUML 표기입니다.

저도 모르게 대화를 사전 풀이 중에서 '마주 대하여 이야기를 주고받음'을 추상화한 주고받음이벤트를 정의했습니다. 이벤트를 구성하는 요인(factor)을 나도 모르게 영어로 썼습니다. 이들도 모두 풀어 보기로 합니다. 영어 사전은 어릴 적부터 선호에 의해 콜린스로 합니다. sender 풀이는 다음과 같습니다.

1.   a person or thing that sends

receiver의 첫 풀이는 주로 기기를 언급해서 제미나이를 해 보았는데, receiver가 일반적인 표현이라 다시 돌아가보니 아래쪽에 다른 풀이가 있었습니다.

1.   a person who receives something; recipient

recipient는 receiver보다는 조금 더 공식적인 말인 듯해서 receiver를 택합니다.


대화를 이벤트로 만들고 클래스도로 표현하기

영어를 쓰는 이유는 개발자도 함께 쓰는 UL이 돼야 하니 자연스럽게 그렇게 한 듯합니다. 대화도 영어로 바꿔야겠습니다. 함께 쓰려면 병기를 하는 편이 좋을 듯도 합니다. 콩글리쉬 사용을 막기 위해서 직관적으로 떠오르는 단어를 바로 쓰지 않고 제미나이에게 물었습니다.

중국에 있던 2017년 제가 하던 역할을 제미나이가 완벽하게 대처해 주네요. 새삼 놀라게 됩니다. 단어 선택 후에도 풀이는 찾아봅니다.

the act or an instance of talking together

일단, 병기합니다. 그리고 주고받음이벤트가 대화가 되려면 message라는 요소가 들어가야 합니다. 다행히 사전 풀이도 우리 상황과 딱 맞네요.

A message is a piece of information or a request that you send to someone or leave for them when you cannot speak to them directly.

이상을 적용한 클래스도입니다.

낱말의 바탕치를 깊게 따져 묻기

한숨 돌릴 타이밍이라 느꼈는데, <낱말의 뜻을 깊고 넓게 묻고 따지는 일의 소중함> 실천을 위해 도메인 지식은 아닌 배경 지식에 해당하는 낱말들을 따져 보는 것으로 글을 마칩니다. 앞서 요인이라는 단어를 쓸 때, 요소와 요인 차이가 헷갈렸습니다. 그리고 나도 모르게 element로 쓰는 단어와 factor 차이도 명확하게 않아 이들을 따져 봅니다.


요인은 중요할 요(要)자와 인할 인(因)자의 조합이란 사실을 깨달으니 의미가 명확해집니다. 사전 풀이는 다음과 같습니다.

사물이나 사건이 성립되는 까닭. 또는 조건이 되는 요소.

제 머릿속에서는 factor란 말과 일대일대응하네요. factor 풀이도 찾아봅니다.

A factor is one of the things that affects an event, decision, or situation.
1.   an element or cause that contributes to a result

'in British English'를 보니 두 번째 줄의 풀이(웹 페이지 상에서는 뒤쪽에 나오는 표현)는 영국 영어의 뜻인 모양입니다. 차이가 좀 있네요. element 뜻입니다.

The different elements of something are the different parts it contains.
one of the fundamental or irreducible components making up a whole

영국식 풀이 중에서는 factor와 같은 풀이도 있습니다.

3.   a cause that contributes to a result; factor

우리말 요소 풀이도 봅니다. 요소는 要(중요할 요)와 素(본디 소)의 조합입니다.

「1」 사물의 성립이나 효력 발생 따위에 꼭 필요한 성분. 또는 근본 조건.
「2」 그 이상 더 간단하게 나눌 수 없는 성분.


주석

[1] 실천과 실행 중에서 어떤 말이 좋을까 묻고 따지다가 풀이를 찾아봅니다.

실천은 열매 실(實)과 밟을 천(踐)을 조합한 낱말로 풀이는 다음과 같습니다.

「1」 생각한 바를 실제로 행함.

실행은 열매 실(實)과 다닐 행(行)을 합친 낱말로 풀이는 다음과 같습니다.

실제로 행함.

[2] 왜 다발말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.


지난 베터코드 인사이트의 부활 연재

1. Release의 모든 것 그리고 나의 길

2. 관성적 일상에서 나와 차리는 일상으로 바꾸기

3. 주문과 거래 우선으로 시스템 전체 맥락 잡기


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari