m4s0n501
도서출판 인사이트 | 프로그래밍, IT 관련 서적을 발간합니다.

루비로 배우는 객체지향 디자인

1. 루비로 배우는 객체지향 디자인

 여기 한 소설가가 있습니다. 소설의 첫 대목을 시작합니다. 주인공이 나오고 주변인물도 등장합니다. 시간이 흘러갑니다. 모든 사건은 소설가가 의도한 순서대로, 순차적으로 벌어집니다. 그러다가 어느 순간 소설 속 인물들이 각자의 성격과 개성이 확고해지면서 이상한 일이 벌어집니다. 소설 속 인물들의 관계가 복잡해집니다. 소설가가 미처 생각하지 못한 사이에 인물들이 부딪히고 사건이 생기며 이야기가 전개됩니다.

뜬금없이 소설 이야기로 시작해보았습니다. 그 이유는 제가 나름대로 절차적 프로그래밍과 객체지향적 프로그래밍을 이해한 것을 표현해보고 싶었기 때문입니다. (이렇게 소설에 비유를 하다보니, 비록 글짓기와 프로그래밍이 문과와 이과로 분류가 나뉘어져 있지만 실제 세계를 모델 삼아 텍스트로 무언가를 짓는 작업이라는 점에서 참 많이 닮았다는 생각이 듭니다.)
절차적 프로그래밍으로 시작해 객체지향이 등장하면서 발전해온 프로그래밍의 역사를 생각해봤습니다. 더 효율적이고 더 생산성 높고 더욱 좋은 소프트웨어를 만들기 위한 다양한 개발자들이 있었겠구나 하는 짐작도 할 수 있었습니다. 우리가 사는 세상에 해결되지 않은 문제가 많듯이 프로그래밍의 세계에도 만병통치약은 아직 없습니다. 소설가의 손을 벗어난 소설 속 인물들이 서로 부딪히며 말도 안 되는 상황을 만들어버릴 수 있듯이 객체지향 프로그래밍을 한다 해도 관리하기 힘들고 더 이상 손댈 수 없을 정도의 프로그램이 만들어지곤 합니다.
그럼 대체 객체지향 소프트웨어를 잘 만들려면 어떻게 해야 할까요? 객체지향을 검색해보면 나오는 ‘캡슐화’ ‘상속’ ‘다형성’ 같은 용어에서 이미 머리가 지끈거려 오는데요.
이 책은 객체지향 소프트웨어를 디자인하는 방법을 설명합니다. 세상을 이미 정해진 절차들의 묶음으로 생각하지 않고 객체가 서로 주고 받는 메시지들의 연쇄로 파악하는 것이 객체지향 디자인을 바라보는 관점이라고 말합니다. 그리고 저자는 이렇게 말합니다.
 

“객체지향 디자인을 배우기 위한 첫걸음은 객체들 속에 푹 빠져보는 것이다. 일단 객체지향적 관점을 얻고 나면 나머지는 자연스럽게 따라온다.”

저자 샌디 메츠가 30년이 넘는 시간 동안 셀 수 없이 많은 애플리케이션을 만들며 생각해온 것을 담은 책이라고 하니 한번 믿고 더 이야기를 들어볼까요?

2. 루비로 배우는 객체지향 디자인

디자인을 바라보는 저자의 관점 또한 매우 뚜렷하고 명확합니다. 문제의 해결방식은 여러 개가 될 수 있기 때문에 디자인은 공장에서 찍어내는 공산품이 아니라 주문제작하는 작품과 비슷하다고 말합니다.

 ”디자인은 예술이다. 코드 배치의 예술이다.”

디자인을 할 때 어려운 점은 바로 ‘지금만 생각하면 안 된다’는 점일 것입니다. 오늘은 잘 돌아가던 프로그램이지만 내일은 내/외부적 변화로 인해 잘 돌아가지 않을 수도 있기 때문입니다. 그러면 어떻게 해야할까요? 미래의 변화를 다 예측할 수도 없는데 말이죠. 저자의 답변은 다음과 같습니다.

 ” 프로그래머는 초능력자가 아니다. 미래의 특수한 요구사항을 미리 예측하는 디자인은 거의 언제나 좋지 않은 결과를 낳는다. 실용적 디자인은 우리의 애플리케이션에 어떤 일이 벌어질지 예측하는 것이 아니라, 단지 언젠가 무언가는 변한다는 사실 그리고 지금은 무엇이 변경될지 알 수 없다는 사실을 받아들이는 것이다. 디자인은 미래를 추측하지 않는다. 미래를 대비해서 가능한 선택지를 여러 가지 만들어 놓을 뿐이다. 디자인은 선택하지 않는다. 변화하고 움직일 수 있는 공간을 남겨 놓을 뿐이다.”

디자인 원칙에 대한 생각은 어떨까요? 유명한 원칙들을 따른다고 해서 정말로 코드의 질이 높아지는 것인지 의심하는 독자에게 저자는 여러 가지 근거와 연구결과를 알려주며 이렇게 마무리합니다.

 ”이 연구들을 직접 읽어보지 않았더라도 그 결론은 확실히 알 수 있다. 좋은 디자인 원칙을 따르면 코드의 질이 높아지며, 이는 측정할 수 있는 과학적 사실이다.”

그렇다면 디자인 패턴은요? 동일한 문제에 이름을 부여하고 같은 방식으로 해결책을 제시하는 디자인 패턴은 매우 강력하며 한 세대의 모든 프로그래머가 서로 소통하고 협업할 수 있는 도구를 제공해주었습니다. 하지만 초보 프로그래머는 패턴을 오용하기도 하지요. 아무리 패턴이 강력하다지만 잘못 쓰면 복잡하고 혼란스러운 코드를 낳을 뿐입니다. 저자는 이렇게 초보 프로그래머를 다독입니다.

 ”이 책은 패턴을 설명하지 않는다. 하지만 독자가 패턴을 이해할 수 있도록 준비시켜 줄 수 있고, 올바른 패턴을 선택하고 제대로 사용할 수 있는 지식을 제공한다.”

위의 인용은 모두 이 책의 1장에 포함되어 있습니다. 저는 프로그래머가 아님에도 불구하고 이 책의 1장을 읽으며 감탄했습니다. 이 주제에 한해서는 정말 오래, 깊은 고민을 한 저자의 마음이 느껴졌기 때문입니다.  그 설득하는 태도가 강압적이지도 감정적이지도 않았기 때문이기도 합니다.

3. (루비로 배우는) 객체지향 디자인

마지막으로, 이 책은 분명 루비 예제를 썼고 루비의 특성을 감안하지 않을 수 없지만 이 책에서 설명하는 개념을 이해하기 위해 루비를 알아야 하는 것은 아닙니다.

“객체지향 디자인(object-oriented design, OOD)을 배우고 싶지만 객체지향 프 로그래밍 경험이 없다면, 이 책을 읽기 전에 튜토리얼 정도는 끝내고 오면 좋다. 객체지향 디자인은 특정 문제들을 해결하기 위한 방식이다. 이 문제들 때문에 고민해 본 경험은 문제의 해결책을 이해하기 위한 선결과제와 같다. 경험이 많은 프로그래머라면 이 단계를 생략해도 괜찮지만, 대부분의 독자는 이 책을 읽기 전에 간단한 객체지향 코드를 작성해 보면 이 책에 대한 만족감을 더 높일 수 있을 것이다.
이 책에서는 루비를 이용해서 객체지향 디자인을 설명하지만, 여기서 소개하는 개념을 이해하기 위해 루비를 알아야 하는 것은 아니다. 루비로 작성한 코드 예시가 많이 있지만 그 내용은 매우 명확하다. 객체지향 언어로 작업해 본 경험이 있는 사람이라면 루비를 쉽게 이해할 수 있을 것이다. “

저자가 밝힌 이 책의 목적을 올리며 책소개를 마무리하겠습니다.

“프로그래머가 행복을 느끼는 이유는 자기 자신이 쓸모 있다고 느낄 수 있기 때문이다. 행복이 고통으로 바뀌는 순간이 바로 우리가 좀 더 많은 작업을 할 수 있고, 또 해야 한다는 신호다. 코딩의 즐거움은 이제 일이 되기 시작한다.이 책은 객체지향 소프트웨어 디자인에 대한 책이다. 두툼한 교과서가 아니다. 코드를 어떻게 작성하면 좋을지에 대한 한 프로그래머의 이야기를 담고 있다. 오늘 당장 생산적이고, 다음 달 그리고 내년에도 계속 생산적일 수 있는 방식으로 소프트웨어를 정리하는 방법을 가르친다. 오늘 성공적이면서, 미래에도 적응할 수 있는 애플리케이션을 작성하는 법을 보여준다. 애플리케이션이 사용되는 기간 내내, 생산성을 끌어 올리고 시간과 비용을 낮출 수 있도록 해준다.
이 책은 우리가 모두 훌륭한 결과물을 만들고 싶어 한다고 생각하며, 이를 위해 가장 열심히 연마해야 할 도구들을 제공한다. 매우 실용적인 내용이며, 그렇기 때문에 이 책의 핵심은 우리를 다시 행복하게 만들어 줄 수 있는 코드를 작성하는 방법을 알리는 것이다.”

책 소개글을 쓰기 전에 고민이 좀 있었는데요. 제가 프로그래머가 아닌지라 내용을 확 와닿게 설명할 자신이 없었습니다. 그냥 좋은 책이 나왔다고만 소개하면 너무 겉핧기식 소개글이 되지 않을까 하는 생각도 들더군요. 그래서 어설프나마 제 수준에서 이해할 수 있는 비유로 시작해봤습니다. 혹시 잘못 표현된 부분이 있다면 말씀해주시기 바랍니다. 객체지향에 대한 서로의 의견이나 책에 대한 기대평을 실시간으로 달려주시는 것도… 권장합니다. ^ ^

 

(저자 샌디 메츠)

참, 저자인 샌디 메츠의 홈페이지를 방문해보시는 것도 추천합니다. 굉장히 유쾌한 에너지가 넘치는 분인 것 같습니다.

* 구입처

[Yes24] [교보문고] [알라딘] [인터파크]

떠오르는 애자일 방법론 칸반

2013년 5월 『칸반과 스크럼』이란 책을 소개한 적이 있습니다. 스크럼을 시행 중인 팀이 단기 속성(?)으로 칸반 실천법을 익혀 스크럼에 접목할 수 있게 구성된 책이었는데요. 한편으로 ‘칸반’ 자체는 무엇인지 궁금해 하는 독자분들도 있었으리라 생각합니다. 그래서 준비한 책이 바로 칸반의 창시자 데이비드 J. 앤더슨이 쓴 『칸반』입니다.

칸반은 ‘이렇게 저렇게 하면 되겠지’하는 공상의 산물이 아닌 데이비드 앤더슨 자신의 실천과 경험에서 비롯된 것입니다. 2002년 당시 데이비드 앤더슨은 스스로를 “궁지에 몰려 있는 개발 관리자”였다고 회상합니다. 프로젝트가 온갖 난관에 시달리고 있었죠. 데이비드는 다음과 같은 고민을 했습니다.

나는 일상 업무 그리고 이전에 썼던 책을 통해 마음속에 두 가지 도전을 품고 있었다. 첫 번째 도전은 어떻게 하면 늘어 나는 비즈니스 요구로부터 팀을 보호하면서 애자일 커뮤니티에서 말하는 ‘지속 가능한 속도’를 달성할 수 있을까였고, 두 번째 도전은 어떻게 하면 성공적으로 애자일 방식을 기업 전체에 확산시키면서도 변화에 필연적으로 뒤따르는 저항을 극복할 수 있을까였다. – 1장 3쪽

2004년 마침내 데이비드는 골드랫의 제약 이론에서 영향을 받아 오늘날 칸반의 시작이 된 드럼-버퍼-로프라는 당김 시스템을 적용하고 큰 성과를 거두게 됩니다. 사이클 타임이 92% 감소되었고 수율이 세 배 이상 증가했으며 완료 일자 준수율도 98%에 이르렀습니다. 그 후 2005년 도널드 라이너슨과 만남을 계기로 드럼-버퍼-로프 시스템은 칸반으로 발전하게 되고 데이비드는 이 방식으로 코비스라는 회사에서 다시금 큰 성과를 이룩하게 됩니다.

칸반은 2007년 Lean New Product Development Summit에서 발표를 계기로 대중에 알려졌고 이후 야후를 비롯한 여러 기업으로 퍼져 나가기에 이릅니다. 분야도 소프트웨어 개발뿐 아니라 운영이나 마케팅 분야에도 확대 적용되어 그 가능성을 넓혀가는 중입니다. 무엇보다도 전통적 방법론을 비롯해 스크럼 같은 기존 애자일 방법론과 유연하게 결합해 쓸 수 있으며 변화가 쉽지 않은 대규모 조직에도 맞물려 들어가기 쉽다는 면에서 주목받는 애자일 실천법으로 떠오르고 있습니다.

그리고 그 모든 역사와 경험, 실천 방법과 조언을 기록한 것이 바로 오늘 소개해 드리는 『칸반』입니다. 번역에는 조승빈 님이 수고해 주셨습니다. 특히 번역서에는 원서에 없는 부록들이 추가됐는데요. 전 세계 칸반 실천가들의 경구와 지은이 데이비드 앤더슨을 취재한 인터뷰 두 편입니다.

자신만의 애자일 툴박스에 칸반이란 좋은 도구를 하나 더 추가해 보는 것은 어떨까요? 『칸반』 본문에서 주목할 만한 문구를 몇 가지 소개하고 책 소개를 마칠까 합니다.

칸반 시스템을 사용하는 이유는 팀이 진행중 업무를 정해진 수용량만큼으로 제한하고, 들어오는 요구량을 팀의 업무 처리량에 맞추기 위함이다. 이렇게 함으로써 개개인이 업무와 개인생활 간의 균형을 이룰 수 있는 지속 가능한 개발 속도를 달성할 수 있다. – 2장 20쪽

우리는 우리 프로세스를 바꿀 권한이 있다. 우리는 다르게 존재할 권한이 있다. 여러분이 처한 상황은 유일하며 여러분에게는 여러분의 분야, 가치 흐름, 관리하고 있는 위험, 팀의 기술, 고객 요구에 맞게 최적화한 유일한 프로세스를 정의할 자격이 있다. – 2장 24쪽

카이젠 문화에서는 각 개인이 스스로 할 일과 그 일을 하는 방법을 (일정 범위 내에서) 자유롭게 구성한다. 시각적 제어 및 신호가 그 특징이며 작업할 업무는 보통 상급자가 할당하는 것이 아니라 자발적으로 선택한다. 카이젠 문화에서는 높은 수준의 협업이 이루어지며, 누구나 자신보다 팀이나 비즈니스 성과를 먼저 생각하는 협력적 분위기가 형성된다. 카이젠 문화는 부분적 개선으로 전체 성과를 끌어올리는 시스템 수준 사고에 집중한다. – 5장 68쪽

칸반은 팀 내부의 사회적 자본 수준을 엄청나게 증가시킨다. 신뢰도를 개선하고 두려움을 없애면 함께 혁신을 추구하고 문제를 해결할 수 있게된다. 결국에는 짧은 시간 내에 카이젠 문화가 탄생하게 되는 것이다. – 5장 76쪽

칸반은 기존 프로세스를 최적화함으로써 변화를 이끈다. 칸반을 시작하는 핵심은 가능하면 최소한으로 바꾸는 것이다. 업무 흐름, 직책 이름, 역할, 책임, 구체적 업무 관행 등을 바꾸고 싶은 유혹에 맞서야 한다. – 6장 85쪽

다음 서점에서 구입하실 수 있습니다.

[Yes24] [교보문고] [알라딘] [인터파크]