블로그 글을 우연히 보고 댓글을 달던 중, 메일링 리스트에 쓰고 댓글로는 여기 링크를 다는 것이 더 접근성이 좋을 것 같아
메일링리스트에 씁니다.
1. 징검다리 비유
Stepping Stone은 현재 위치에서 내 목적지로 좀 더 가기 쉬워지는 지점으로 내딛게 해주는 돌멩이를 말합니다.
디딤돌, 징검돌 등으로 번역하죠. ("다리"가 아니라)
구체적으로 뭘 어떻게 해야할지 감이 잘 안올 때, 잘은 모르겠으나 이런 저런 기능과 객체들이 있으면 문제 해결이 더 쉬워지겠다
생각이 들어서 그것들을 만드는 걸 말합니다.
예를 들어서, 로컬 파일 검색기를 만드는데 이제까지는 캐싱을 안했는데 속도 문제로 캐싱을 해야한다는 요구가 생겼습니다. 이럴
때 캐싱을 어떤 식으로 현 설계에 융합시킬지 감이 잘 안옵니다. 그러면 Stepping Stone으로 일반적인 사전형 객체
같은 걸 만들 수 있겠죠. 일종의 필요한 조각(탄알?)들을 준비해 두는 겁니다.
그런데 이 방식은 사실 별로 필요도 없는 기능과 구조들을 만드는 데에 시간을 허비할 수 있다는 단점이 있습니다. 한참 하다가
보면, 어라 내가 뭐하고 있지? 내가 뭐하려다가 이걸 만들고 있는거지? 이거 정말 필요한 거 맞나? 이런 질문을 하게 되는
때가 있죠. 켄트 벡은 over-engineering이라고 표현했죠.
Lisp 커뮤니티에서는 프로그래밍이란 그 문제를 풀기 쉬운 언어를 만드는 것이다라는 표현을 쓰죠. (Paul Graham의
Bottom-up Programming 참고) 켄트 벡이 저와 오화종님이 이동 중에 한 대화에서 그걸 언급하더군요. 화종님이
Lisp에서는 그 방식이 잘 통하고 있는 거 아니냐고 했습니다. 저는 언어마다 over-engineering의 비용이 다른 것
같고, Lisp 경우 over-engineering의 비용이 적은 편이고, 다른 언어(예컨대 자바)에서는 굉장히 높은 경우가
있다는 말을 했습니다.
켄트 벡 자신은 이 전략을 그리 자주 쓰지 않는데 비해 초보들은 이 방법을 많이 쓰는 것을 관찰했답니다.
2. 네가지 전략의 선택 시점과 장점
> 하지만 잘 납득되지 않는 것이, 저 네가지 전략은 선택한 다음 파악하는 게 아니라, 현실적 요구에 의해 저 네가지 전략 중 하나를 선택하는 것이다.
>
> 디자인 패턴을 쓸 때도 이 패턴을 써야지 해서 쓰는 게 아니라, 현실에 존재하는 문제의 여러 측면을 고려한 결과로 어떤 패턴을
> 쓸지가 결정된다. 그게 순서다. 그럼 자신이 현재 쓰고 있는 패턴을 명확하게 인지해야 한다는 것은 무슨 장점이 있을까? 잘 납득이
> 가지 않아 쉬는 시간에 회사 분들과 얘기를 하면서, 각각의 패턴이 가지는 Pros/Cons 정도를 다시 검토해볼 수 있다는 정도가 아닐까
> ... 라는 추측을 했지만, 썩 납득이 가는 결론은 아니었다.
라고 하셨습니다.
디자인 패턴을 쓸 때 현실에 존재하는 문제의 여러 측면을 고려하고, 몇 가지 가능한 후보 중에서 하나를 고르게 되는데 이
과정은 의식적인 부분과 무의식적(혹은 직관적)인 부분이 섞여 있는 것 같습니다.
마찬가지로 4가지 전략도, 현실의 문제가 있을 때 몇 가지 후보가 떠오르고 그 중에 자신이 비교적 적합하다고 생각하는 (혹은
단지 익숙하거나 편안한) 전략을 분명히 선택합니다. 비록 무의식적일지라도 말이죠.
그런데 이런 선택들은 켄트가 말했듯이 항상 이성적(rational)이지 못합니다. 의사결정론에서도 인간의 판단은 이성적이라고
가정하고 그 다음을 연구했던 것들은 현실과는 거리가 한참 멀었죠. 그래서 나에게, 현재 상황에서 최적인 선택을 잘 하지 못하는
경우가 있습니다. 하지만 현재 내가 어떤 전략을 선택하는지 생각하고, 또 다른 전략 중에 혹시 현재 적용가능한 것이 또 있는지
생각하고 그것은 어떤 모양이 될까 상상하는 것은 매우 효과적인 인지적 전략입니다(학습이나 수행능력 등 면에서 모두). 메타
인지(meta-cognition) 전략이라고 하며, 전문가들(특히 비교적 새로운 문제를 접한 전문가)일수록 이런 전략을
자주/잘 사용한다는 것이 여러 전문성, 인지과학 연구를 통해 밝혀졌습니다.
3. 객체의 필드들은 동일한 수명주기를 가져야 한다
이번 강의에서 언급은 안했는데, 예전에 다른 책에서 했던 말로 기억이 되는데 관련이 있는 것 같아 말씀드립니다. 도움이 될까
해서요. 켄트는 하나의 메소드 내에서 라인들이 변경되는 속도가 비슷해야 한다고 합니다. 어떤 줄은 자주 바뀌고 어떤 줄은
1년에 한 번 바뀌면 변경 속도가 비슷한 애들끼리 다시 묶어야 한다고 말하죠.
http://groups.google.com/group/xper/browse_thread/thread/9e056f00e73c2447#
입니다.
2009/9/5 June Kim <june...@gmail.com>:
2009/9/5 June Kim <june...@gmail.com>:
--
Byeongweon Moon
http://tasy.jaram.org/blog
On 9월5일, 오후11시56분, Byeongweon Moon <tasyb...@gmail.com> wrote:
> 달려고 썼더니 저도 차단되었다네요.
> 허가된 사람만 달 수 있는거 아닐까요?
>
> 2009/9/5 June Kim <junea...@gmail.com>:
>
>
>
> > 블로그에 이 글에 대한 링크를 댓글로 달려고 했는데 저는 댓글 쓰기가 금지되어 있다고 나와서 못씁니다. 다른 분이 링크 달아주시면 고맙겠습니다.
>
> >http://groups.google.com/group/xper/browse_thread/thread/9e056f00e73c...
>
> > 입니다.
>
> > 2009/9/5 June Kim <junea...@gmail.com>:
1. Stepping Stone에 대해서는, 제가 이해한 내용도 김창준님이 설명해주신 내용과 다르지 않습니다. (좀 더 디테일
한 설명 감사드립니다. )
그 부분은 제 개인적인 감상으로, 좀 더 적절한 메타포가 있지 않을까 하는 아쉬움에 대한 부분이었습니다.
다른 분들도 다른 세 가지는 바로 이해하는데 반해서 이 설명에서는 바로 감을 못 잡으시는 것 같아 보여서 든 생각입니다.
2. 메타 인지의 측면에서 보기에는, 네 가지 전략은 모두 너무 뚜렷한 특징을 가지고 있다고 생각합니다. 한 전략을 선택한 사람
이 자신이 선택한 방식의 패턴을 상기한 다음 다시 면밀히 검토하고 종합적인 판단 결과에 따라 다른 전략으로 건너가는 일이 과연
있을까... 음. 사람마다 다르겠지만, 개인적으로는 그럴 일은 거의 없지 않나 싶습니다. 각각을 쓸 수 있는 상황도, 그에 따
른 장단점도 너무 명확해서 말이죠.
(지금 생각해보니 좀 더 미시적인 측면에서의 결정에 대한 것으로 바라본다면 좀 다를 수도 있지 않을까 하는 생각이 듭니다.)
3. 확실히 그럴 것 같네요. : ) 설명 감사합니다.