brunch

You can make anything
by writing

C.S.Lewis

by 안영회 습작 Apr 29. 2024

함께성이 알려준 이벤트 기반 프로그래밍의 이점

베터코드 인사이트의 부활

지난 글에 이어 계속해서 <한국인에게 나는 누구인가>를 묻고 따지고 풀어봅니다. 다만, 소프트웨어 개발이나 설계 과정에서 하던 사고를 접목하여 책의 주제에서 동떨어진 내용을 쓰고자 합니다. (주의) 관련 경험이 없으시거나 취향에 따라 궤변으로 느껴지실 수 있어서 주의를 요합니다. 그래서, 연재도 '베터코드 인사이트의 부활'로 할당(?)합니다.


Loosely-coupled: 따로 또 같이

이 글은 다음 다발말[1]을 보자 직업적 경험 탓에 필연적으로 떠오른 생각들을 풀어서 써 보고 싶은 욕망에서 출발합니다.

한국인이 말하는 난 것과 난 데와 낸 것과 낳은 것은 내가 홀로 하는 것이 아니라 언제나 다른 것과 함께하는 것임을 말한다. 이는 나라는 존재가 낱낱으로 따로 하면서 모두로서 함께하는 존재임을 말한다.

'따로 또 같이'라는 표현은 제가 소프트웨어 설계 원칙으로 삼아 온 '느슨한 결합(loosely-coupled)'과 그대로 드러 맞습니다. 반면 강렬한 느낌은 있지만 구체적으로 어떤 것이 그러한지 알알이 풀어지지 않습니다. 앞선 다발말을 실마리로 삼아서 느낌을 개념으로 만들어 보려고 합니다.


제 믿음 속에 존재하는 'loosely-coupled' 혹은 따로 또 같이 함께하는 양상은 소프트웨어 설계를 끌어가는 핵심 원칙이라고 했습니다. 앞으로는 이를 최봉영 선생님 표현을 빌어 함께성이라는 말로 대신하겠습니다. 그렇게 되면 결국 이 글은 함께성과 소프트웨어 구현 혹은 설계와 연관성을 찾고 싶은 욕망을 실천하는 글입니다.

출처: 윤여경 님 페이스북


난 것과 난 데라는 짝

다시 최봉영 님 글로 돌아갑니다. 포기말[2]로 나눠 보죠.

한국인이 말하는 난 것과 난 데와 낸 것과 낳은 것은 내가 홀로 하는 것이 아니라 언제나 다른 것과 함께하는 것임을 말한다.

먼저 '난 것과 난 데'를 짝으로 보는 관점이 하나의 기억을 소환합니다. 바로 쓰임새(usecase)와 TDD라는 개념 혹은 이들을 수행한 제 경험입니다. 일단 이러한 연상도 하나씩 풀어서 따져 보기로 합니다. 그전에 연상이라는 낱말도 바탕치를 따져 보기 위해 사전을 찾아봅니다.


연상(聯想)은 잇닿을 련()과 생각 상()을 씨말로 합니다. 머릿속에서 접화(接化)가 일어나는 것이군요!

『심리』 하나의 관념이 다른 관념을 불러일으키는 현상. ‘기차’로 ‘여행’을 떠올리는 따위의 현상이다. ≒관념 연합, 연합.

내면에서 접화가 일어나는 이유는 뜻밖에도 생각 상() 한자 풀이에서 근거를 찾을 수 있습니다. (나도 모르게) 마음을 마주하여 바라보기 때문이 아닌가 싶습니다.


'난 데 - 난 것' 짝을 '쓰임새와 기능' 짝으로 응용하기

다시 난 것과 난 데라는 짝으로 돌아갑니다.


이 짝과 쓰임새(usecase)를 연결할 이유는 무엇일까요? 마음속 접화의 근거는 무엇일까요? 금세 그려볼 수 있었습니다.

다만, 난 데가 물리적 장소라면 명확하지만 쓰임새는 추상적인 결과물이기 때문에 쓰임새와 기능은 그대로 일대일 대응이 되기는 어렵습니다. 암튼 한 걸음씩 가 보죠.


'난 데 - 난 것' 짝을 '테스트케이스와 동작 수정' 짝으로 응용하기

이번에는 '난 데와 난 것' 쌍과 TDD에도 대입을 해 볼까요? 어렵지 않네요. 동작 수정이라는 표현은 Tidy First? 번역 과정에서 정의한 용어를 썼습니다.

이제 포기말의 뒷부분도 마저 볼까요?

~ 내가 홀로 하는 것이 아니라 언제나 다른 것과 함께하는 것임을 말한다.

함께성을 말하고 있습니다. 무엇과 함께 할까요? 일단 둘이 함께 합니다. 쌍이 있으니까요. 테스트케이스에 보여 어떤 동작이 등장한 맥락과 조건 그리고 시나리오(내러티브)가 드러납니다. 최봉영 선생님이 흔히 바탕치 따위로 부르는 내용입니다.

이들은 인수분해를 해야 분명해집니다. 놀랍게도 <말의 바탕치와 짜임새를 살펴보는 일>과 쓰임새나 기능 혹은 동작 수정의 맥락과 의존관계(dependencies)를 살펴보는 일은 너무나도 닮아 있습니다. 아니 표기법(자연어이냐? 프로그래밍 언어이냐?)만 다를 뿐 정확하게 같은 지적 활동인 듯도 합니다.


복합적인 상태 변경의 표준화를 돕는 이벤트

아마 느닷없이 <한국인에게 나는 누구인가>를 읽다가 여기로 끌린 이유는 이런 충동 이면에 어떤 생각이 있었는지 밝히기 위함이었나 봅니다. 아직 그런데 분명하지는 않습니다. 다행히 실마리로 삼을 포기말이 하나 더 남았습니다.

이는 나라는 존재가 낱낱으로 따로 하면서 모두로서 함께하는 존재임을 말한다.

'나' 대신에 지금 작성 중이 객체로 바꾸면 딱 드러 맞습니다. 처음 해 본 생각인지 앞의 경우처럼 확신이 서지는 않지만 흥미로운 그림이 그려졌습니다. 내가 다른 대상(collabroator)을 호출하면 상대의 작용을 낳습니다.

그리고 만일 그 작용에 내가 다시 반응하게 되면, 상태 변경을 하게 됩니다. 상태 변경의 범위는 객체 내부인지 객체 내부를 넘어서는 범주인지는 맥락과 의도에 따라 다릅니다. 이런 부분에 대한 표준을 재미 삼아 생각해 본 일이 있는데 그때 쓴 글이 <이벤트는 변경을 알리는 표준 프로그래밍 단위>입니다.



주석

[1] <한국말 말차림법>에서 제안한 구절에 대한 토박이 말입니다. 왜 다발말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.

[2] <한국말 말차림법>에서 제안한 문장에 대한 토박이 말입니다. 왜 포기말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.


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

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

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

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

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

5. 인식과 개념 형성의 과정을 이해하기

6. 관리 요소 식별을 위한 조기 시각화의 필요성

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