서론
요새는 나를 괴롭히던 많은 잡념들에서 벗어났다. 이렇게 쓰니 거창하지만, 사실은 그동안의 불안에서 좀 해소된 것이 아닌가 싶다.
안정되어가는 생활과, 전문가나 노동자로서의 정체성도 명료하고 편해진 것이 한몫했을 것이다.
그리고, 심신의 안정을 바탕으로 공부량을 크게 올렸다. 다양한 서적을 매일 조금씩 읽고, 책 표지 안쪽에 날짜와 자유로운 짧은 후기와 범위를 기록 하는 방식으로 취미와 습관처럼 굳어지고 있다.
오늘은 회사에 신청해서 구매한 책인 “GoF의 디자인패턴” 을 읽었다. 워낙에 유명하고 오래된 책이기도 하고, 그동안 읽은 설계 관련 기술 서적에서 늘 인용될 만큼 중요한 것 같았다.
특히, 오늘은 <생성패턴> 들의 카탈로그를 한번 가볍게 읽어내렸다.생성패턴>
그러다가, 3년 전 즈음에 개인개발로 만든 드래곤 육성게임에서 부딪힌 이슈와 해결방법을 더 잘 표현할 수 있다는 것을 알게 되었다.
본론
당시, 특정 속성의 드래곤이나 공통점이 있는 드래곤은 같은 알에서 나오는 가챠(또는 랜덤뽑기) 방식으로 케릭터를 늘리는 시스템을 택했었다.
그런데, 테스트 도중에 이상한 일이 발생했다. 정확히 같은 인덱스의 드래곤을 뽑으면,
스탯과 스킬이 같을 뿐아니라 , 그 드래곤을 전투를 통해 육석해서 능력치를 올리면 새로 뽑은 같은 종의 드래곤도 능력치를 공유하는 것이었다.
지금은 당연히 이것이 얕은 복사와 깊은 복사, 쉘로우 카피와 딥카피, 콜바이밸류와 콜바이레퍼런스 등등 쉽게 설명할 수 있을만한 이슈지만,
당시에는 크게 좌절하면서 여러 날을 고민해 Clone()이라는 함수를 만들고, 그 함수 내부에서 새로 객체를 선언해서 요소를 맞춰주는 식으로 해결했엇다.
그런데, 이번에 디자인패턴 책을 보면서, 원형패턴 (Prototype Pattern) 과 정확히 같은 해결책이라는 것을 알게 되었다.
새로 만들 객체들이 복사될 만한 원형이 존재하고, 그 원형을 Clone( 깊은 복사 ) 해서 사용하는 식이다.
이제서야 당시의 해결책을 표현할 수 있게 된 것은 어찌보면 부끄러운 일일 수도 있지만,
나름대로 감동적이고 기뻤다. 어찌됐거나 지금의 상태가 중요하고, 나는 프로그래머나 설계자로서 분명 발전하고 있는 것이 아닌가?
일일신 우일신은 매우 즐겁다. 매일 매일이 새로우니 지겹지 않고, 매일 조금씩 나아지는 나를 보며 존재의 이유마저 느끼고 있다.
다른 패턴들도 천천히 살펴보긴 하겠지만, 이번 일 처럼 직접 부딪힌 사례들이 많아질 수록 이론 공부도 쉬워질 것 같다.
그러고보니 지난번 양자화(퀀타이즈) 용어도 모른채로 양자화를 구현하긴 했었다.
내일은 또 어떤 이슈가 날 기다릴까. 코난의 심정도 이해가 간다.