어떻게 하면 모델링을 잘할 수 있을까?
이 글은 소프트웨어 설계를 공부하는 동료가 글로 쓴 내용을 토대로 그와 대화하듯 의견을 담는 글입니다.
대화의 바탕에는 <온라인 카지노 게임을 포착하여 객체로 만드는 이벤트에 대한 설명에서 다룬 내용이 있습니다.
먼저 이벤트를 다시 다룹니다. 몇 차례 다룬 기억이 있는데, 복습도 할 겸 찾아내서 정제를 하기로 합니다. 그전에 먼저 동료의 견해부터 해석을 하겠습니다.
동료가 사태와 온라인 카지노 게임을 표현한 것은 아마도 최봉영 선생님의 사태와 온라인 카지노 게임 정의에 바탕을 둔 것으로 보입니다. <쪽인 나로 일을 인식하는 과정을 풀어 보기에서 제가 정리한 내용을 인용합니다.
처음 보면 대번에 눈에 띄지 않습니다. 몇 차례 묻고 따져 보면서 인지한 두 개념 사이의 경계를 한자 풀이를 바탕으로 설명해 보겠습니다. 먼저, 모습 태(態)가 씨말을 등장하는 것을 단서로 일에서 드러난 모습을 사태라고 할 수 있습니다. 그런데 일을 둘러싼 요소들에는 다양한 모습이 있고, 관찰자의 주의력에 따라매우 다른 특징들을 포착할 수 있습니다. 일을 보는 관점이나 입장에 따라서도 달리 보이죠.
그렇게 관찰한 후에 주목할 만한 특징을 묶어 일을 규정할 수 있습니다. 그렇게 하면 온라인 카지노 게임이 된 것이라 할 수 있습니다. 온라인 카지노 게임이라는 낱말을 구성하는 씨말로 물건 건(件) 자가 들어간 이유도 유추해 볼 수 있습니다. 일을 물건처럼 취급하는 것이죠. 그게 무슨 말이냐?
갑자기 순간 이동하는 느낌이 들기도 하지만, DDD의 도메인 이벤트가 개발자에게는 가장 쉬운 설명이 될 듯도 합니다. 일을 물건처럼 취급할 수 있으려면 '이 온라인 카지노 게임', '그 온라인 카지노 게임'과 같이 지칭할 수 있어야 하고, 그리고 온라인 카지노 게임이 발생한 이후에 내용이 바뀌면 안 됩니다. 이를 각각 식별성Identification그리고 불변성Immutability이라고 하죠.
사실, 엄밀하게 따져 보면 '물건처럼 취급'하기 위한 조건은 식별성만 해당한다고 할 수 있습니다. '너, 그 온라인 카지노 게임 기억해?', '이 온라인 카지노 게임과 저 온라인 카지노 게임이 같은 온라인 카지노 게임을 말하는 것인가?' 따위의 질문과 그에 대한 대답을 다룰 수 있다면 물건처럼 취급한다 할 수 있죠. 불변성은 시간성과 더불어 일의 본래 특징을 담은 것입니다. 온라인 카지노 게임은 특정 시점에 일어난 것이고, 온라인 카지노 게임을 인지하는 순간 변하지 않는 과거의 온라인 카지노 게임이 되니까요.
쓰다 보니 긴 시리즈가 될 듯합니다. 그래서, 첫 번째 글에서는 온라인 카지노 게임의 '발생'까지만 다루고 남은 이야기는 다음 글로 넘기겠습니다. 일은 벌이는 사람도 있고, 벌어지기도 합니다. 나와 무관하게 벌어지는 경우도 상당히 많죠. 정확하게 말하면 무수하게 벌어지는 일 중에서 어떤 일만 특별히 인지할 뿐이라고 할 수도 있습니다. 우리의 인식을 잘 관찰해 보면 그렇죠.
그래서, 그렇게 다양하게 벌어지고 또 다양한 기준으로 관찰할 수 있는 사태 중에서 주목할 만한 것만을 추린 것을 온라인 카지노 게임이라고 할 수 있습니다. 앞서 도식화한 사태와 온라인 카지노 게임 비교를 다시 볼까요?
그런데 이를 프로그래밍에서 활용한다고 생각하면 모양을 조금 규정할 필요가 있습니다. 디자인(혹은 설계)이 여기서 개입되는 것이죠. '기능이 설계를 이끈다', 영어로 Form Follows Function은 기억할 필요가 있는 설계 원칙입니다.
그에 대한 설명은 한 편의 글이 다 필요할 듯해서, 여기서는 '발생'이라는 말에 대해서 이야기하는 것으로 마칩니다. 만일 여러분이 온라인 카지노 게임을 포착하여 객체로 만드는 이벤트에 관심이 있다면 앞서 '주목을 받을 만한' 것들을 정해야 합니다. 설계의 순간에는 프로그래머가 세상에서 배운 바를 토대로 창조자가 되는 것이니까 내가 관찰한 사태를 두고 주목할 만한 요인들을 모아 이벤트 즉, 온라인 카지노 게임을 표현한 객체의 정의 속에 담는 것이죠. 그리고, 그 온라인 카지노 게임이 어떻게 발생할 것인지도 결정하게 됩니다. 프로그래밍의 세계에 있어서는 그가 창조자이니까요. 이에 대해서는 다음 글에서 조금 더 구체적으로 다루겠습니다.
(21회 이후 링크만 표시합니다.)
21. 모델링과 인터페이스의 상관관계
24. 관계(關係)라는 말과 연관(聯關)이라는 말의 차이
26. 모듈화: 다시 쓰는 동시에 유연성을 줄 수 있나?
28. UML 혹은 객체지향 관계 중 합성과 집합의 차이
29. 상태 관리에 대한 이해가 필요한 비대칭 분산 시스템
30. 복잡한 클래스를 엮어서 단순한 복합체를 만드는 OCP
31. 온라인 카지노 게임을 포착하여 객체로 만드는 이벤트에 대한 설명
32. UI 디자이너가 만든 기획서로 객체 지향 모델링하기