나의 노트

객체 지향 설계에 대해 내가 정말 알아야 할 모든 것은 블랙 다이아몬드 코스에서 배울 수 있었다

번역 워드 커닝햄(Ward Cunningham) (유타주 스노우버드에서 열린 객체 지향 설계 워크숍(WOOD'94) 개회사 기억을 되살려 각색함) c2.com/doc/everything.html ↗

동료 여러분, 저 또한 지난 며칠간 여기서 발표된 각 방법론의 미묘한 세부 사항들을 이해하느라 여러분처럼 애를 먹었습니다. 그러다 문득 우리가 이 모든 것을 필요 이상으로 복잡하게 만들고 있는 건 아닌가 하는 의문이 들었습니다.

설계란 스키와 비슷해서, 말로 설명하거나 규정하는 것보다 직접 하는 것이 훨씬 쉬운 활동이 아닐까 싶더군요.

그때 깨달았습니다. 객체 지향 설계에 대해 내가 정말 알아야 할 모든 것은 지난 주말 유타의 블랙 다이아몬드 코스에서 스키를 타며 이미 배울 수 있었다는 사실을 말이죠. [주: 블랙 다이아몬드는 최근까지 발표자가 정복하지 못했던 최상급 전문가용 스키 코스를 표시하는 마크입니다.]

설계(그리고 스키)를 짜릿하고 자연스러운 활동으로 만들기 위해 우리가 해야 할 일들은 무엇일까요?

왜 세 개의 둔덕 앞일까요? 그런 가파른 경사면에서는 상황이 꽤 빠르게 전개되기 때문입니다. 스키 앞부분만 쳐다보고 있다면 첫 번째 둔덕은 넘길 수 있을지 몰라도 두 번째 둔덕에는 대비할 수 없습니다. 소프트웨어도 마찬가지입니다. 하지만 세 개의 둔덕보다 더 멀리 계획을 세울 수는 없습니다. 무슨 일이 일어날지 모르고, 조건은 늘 변하기 마련이니까요. 턴을 할 때마다 계획을 수정할 준비가 되어 있어야 합니다.

자, 이제 이런 턴을 하려면 '에지'를 사용해야 합니다. 몸을 비틀거나 돌려서 스키를 회전시키는 게 아니라, 스키의 날(에지)이 그 일을 하도록 맡겨야 합니다.

그렇다면 여러분께 묻겠습니다. 객체 설계자의 '에지'는 무엇입니까?

(침묵)

다형성 메시지 전송(Polymorphic message sends)입니다! 이것이 바로 우리가 설계를 둔덕(장애물) 주변으로 유연하게 돌려 나갈 때 사용하는 기술입니다. 우리는 필요할 때 그 에지를 적용할 수 있도록, 즉 실제로는 거의 대부분의 시간에 사용할 수 있도록 설계를 계획하고 균형을 잡습니다.

마지막으로, 스키를 타거나 설계를 할 때 절대 두려워해서는 안 됩니다. 두려움은 경사면을 내려가거나 설계를 완수하기 위해 내려야 하는 끊임없는 결정의 흐름에서 저를 방해할 뿐입니다.

지난 주말 이곳 유타의 블랙 다이아몬드 코스에서 처음 스키를 배운 여성을 만났습니다. 그녀는 그 코스가 두려움의 대상이라는 것을 알기도 전에 그곳에서 시작했습니다. 그리고 성공했죠. 마찬가지로, 저도 객체(Object)가 두려워해야 할 대상이라는 것을 알기도 전에 객체를 배웠습니다. 그래서 빨리 배웠고, 잘 알고 있습니다.

우리가 이 객체 지향 설계라는 것을 너무 거창하게 포장하고 있는 건 아닐까요? 사실은 그저 사람들에게 겁을 주고, 두려움을 팔고 있는 건 아닐까요? (물론 두려움이 꽤 잘 팔리는 상품이긴 하죠.)

우리는 사람들을 더 믿어야 합니다. 우리는 그저 객체가 우리에게 '에지'를 제공하고, 그 에지가 날카로운 '턴'을 가능하게 해주며, 그 어느 것도 '두려워할 대상'이 아니라고 가르쳐야 합니다.