Eternity's Chit-Chat

aeternum.egloos.com



객체지향의 사실과 오해 Presentation

주변 분들은 알고 계시겠지만 제가 처음으로 집필한 객체지향 책이 출간되었습니다.

책의 제목은 "객체지향의 사실과 오해"이고 부제는 "역할, 책임, 협력 관점에서 본 객체지향"입니다.

제목에서 알 수 있는 것처럼 객체지향에 관해 널리 퍼져 있는 오해를 바로잡고 객체지향 패러다임의 본래 의미와 목적에 관해 설명하고 있습니다.

이 책은 현재 집필 중인 다른 책에서 사용하는 용어나 개념을 설명하기 위해 작업하던 부분을 별도의 책으로 출간한 것입니다.

개인적으로는 만족스럽지만 책 전반적으로 추상적이고 개념적인 내용들이 넘쳐나다 보니 보시는 분에 따라서는 호불호가 갈릴것 같아 걱정이 앞서네요.

쓴 소리도 좋으니 책에 대해 다양한 관점에서 피드백을 주시면 다음 책을 쓰는데 많은 도움이 될 것 같습니다.

부족한 책이지만 많은 분들이 읽고 내용을 음미해 주시면 감사하겠습니다.

책에 대한 자세한 내용은 위키북스 홈페이지를 참고해 주시기 바랍니다. 

책 내용을 미리 보고 싶으신 분들은 여기를 방문해 주시면 됩니다.

책 표지에 나오는 그림은 이상한 나라의 앨리스에나오는 시계 토끼를 표현한 것입니다. 

이 표지를 선택한 이유는 책 전체적으로 이상한 나라의 앨리스의 내용에 빗대어 객체지향의 다양한 개념을 설명하기 때문입니다.


덧글

  • 사진우주 2015/07/10 02:30 # 삭제

    잘 읽고 있습니다 감사합니다. :)
  • 이터너티 2015/07/10 09:03 #

    읽고 계신다니 제가 더 감사드립니다. ^^
    읽으시면서 종종 책에 대해 피드백 주시면 제게 큰 도움이 될 것 같습니다.
    읽으시는 분들이 어떤 부분을 마음에 들어하시고 아떤 부분에서 걸리시는 지를 알면 다음 책을 더 훌륭하게 쓸 수 있을 것 같아요.
  • cecil1018 2015/07/11 11:39 # 삭제

    책이 너무 좋은것 같아요..
    저자분의 깊이 있는 내공이 느껴지네요..
    이런책이 이제야 나오다니... 감동입니다..//
  • 이터너티 2015/07/11 18:08 #

    읽어 주셔서 감사드립니다. ^^
    많은 분들이 읽고 공감해 주셨으면 좋겠어요.
  • cecil1018 2015/07/14 11:03 # 삭제

    책은 감동적으로 잘 읽었는데요..이제는 다르게 해봐야겠다란 생각을 가지구요.
    그렇지만 현실은 그렇지가 않네요..
    Spring, WAS, RDB를 기반으로 해서 개발을 하다보면, 생성해서 쓰는 객체는 대부분 서비스 오브젝트이구, Entity 오브젝트는 거의 DB를 조회하여 Value 오브젝트(값 설정/조회 정도?) 처럼 사용하게 됩니다. 부끄럽네요..ㅠ.ㅠ
    예를 들어 카톡과 메신저 서비스를 개발하는 경우에, 메시지 전송에 있어서, 나의 대화방, 상대방의 대화방 등에 메시지를 기록하고, 푸쉬를 보내게 되는데요.. 이때 나의 대화방, 상대방의 대화방 등은 DB에 존재하고, 대화방 서비스를 통해 대화 내용을 조회하는 형태로 개발을 하게 됩니다.

    아마 대부분의 WAS, DB를 가지고 개발하는 서버측은 비슷한 유형일 거라 생각됩니다.
    더 좋은 방법이 있을까요?? 책에 내용을 적용하고 싶은데.. 고민입니다..^^;

  • 이터너티 2015/07/15 10:17 #

    먼저 책을 읽어 주신 점 감사드립니다. ^^

    책에 있는 내용이 너무 개념적인 수준이다보니 실제 웹 애플리케이션을 구현하시는데 적용하기에는 무리가 있을 거라고 생각합니다.

    그래도 다른 방식으로의 사고를 시도하신다고 하니 어느 정도 제 책이 동기를 부여하지 않았나 싶어 뿌듯해지네요. ^^

    앞에서 대화방, 상대방의 대화방에 대한 데이터는 DB에 존재한다고 하셨지만 실제로 이플리케이션 상에서 이들을 조작하기 위해서는 메모리로 로드해야 합니다.

    객체지향 프로그래밍 언어를 사용하실 경우에는 메모리 상에 이 데이터를 저장하기 위해 객체를 사용할거구요.

    앞에서 말씀하신 것처럼 대부분의 분들이 비즈니스 로직을 서비스 레이어 안에 구현하곡 객체를 단순한 데이터로 사용하시지만 이 방식은 객체지향적인 방식은 아닙니다.

    객체지향으로의 전환은 서비스에 포함된 로직의 각 부분을 적절한 객체들의 책임으로 분배해서 로직을 객체들의 협력으로 바라보는 것입니다.

    처음부터 이런 식으로 코드를 구현하기가 어려울 것이므로 기존 코드에서 특정한 객체의 getter/setter를 불러서 처리하는 로직을 해당 객체로 넣거나 다른 객체에게 위임하는 방식으로 수정하시면서 연습해 보실 것을 권합니다.

    아래 자료를 읽어 보시는 것도 좋을 것 같습니다. ^^
    http://pds18.egloos.com/pds/201011/10/18/Rich_Domain_Model.pdf
  • cecil1018 2015/07/15 10:06 # 삭제

    감사 드립니다..아래 pdf 파일을 보니 이해가 되네요.^^//
    책임 주도 설계에 대해 깊이 있게 공부해 봐야겠어요.//
  • 이터너티 2015/07/15 10:18 #

    도움이 되셨다니 다행이네요. ^^
    혹시 책 보시다가 궁금한 부분이 있으시면 또 질문 남겨 주세요.
  • 뿌리깊은남자 2015/07/16 10:08 # 삭제

    소문듣고 왔습니다~! 가 아니라 구매했습니다.
    소장가치가 있는 책들은 개인돈으로 구매하는데...
    워낙 주변에서 극찬을 하셔서 개인돈으로 구매했습니다. 하하^_^

    내일 책이 온다고 하는데 기대되네요^^


  • 이터너티 2015/07/16 12:55 #

    구매해 주셔서 감사합니다. ^^
    제딴에는 최선을 다해서 쓴 책이라 재미있게 읽었다고 한 마디 해주시는 분들이 너무나도 고맙더군요.
    개인돈으로 구매하셨는데 돈이 아깝지 않다는 생각이 드는 책이었으면 좋겠어요. ^^
  • 이주형 2015/07/16 14:58 # 삭제

    훌륭한 글들에 매료되어 책도 구매했습니다. 기대되네요.ㅎㅎㅎㅎ
  • 이터너티 2015/07/16 17:27 #

    구해매 주셔서 감사합니다. ^^
    재미있게 읽어 주시면 더 감사할것 같습니다. ㅎㅎ
  • 희망개발자 2015/07/17 08:58 # 삭제

    전에 제주도까지 오셔서 쿠팡을 예로들어 DDD 설명해주신 강연 참 인상 깊었었는데요. 이렇게 책을 내셨다고 해서 팀원들끼리 함께 구입후 스터디 하고 있습니다. 앞으로도 왕성한 활동 응원하겠습니다. 감사합니다.
  • 이터너티 2015/07/17 23:31 #

    응원해 주셔서 감사합니다. ^^
    이제는 같은 회사에 다니는 동료분이시겠네요.
    DDD 책도 한번 도전해 보고 싶은데 여력이 될 지 모르겠습니다.
    스터디 하시다가 이상한 부분 있으면 문의주시면 성실히 답변 드리겠습니다.
  • 이장 2015/07/24 19:14 # 삭제

    도메인모델에 대해 공부 중 이며 실무에 적용하려고 합니다. 다른 자료들을 보다가 쓰신 책을 주문해서 이제 부터 보려고 합니다.
  • 이터너티 2015/08/14 08:58 #

    읽어 주셔서 감사합니다. 책이 도움이 되었으면 좋겠습니다. ^^ 혹시 읽으시다가 이상한 부분 있으면 여기에 질문 남겨주세요.
  • ryan 2015/08/14 08:44 # 삭제

    객체지향의사실과오해 책을 구매해서 보고 왔어요~
    다음 책도 너무 기대가 되네요~
    감사합니다!
  • 이터너티 2015/08/14 09:03 #

    다음 책도 재미있게 읽으실 수 있도록 열심히 써 볼께요. ^^
    책 읽어 주셔서 감사합니다~ ^^
  • polyglot 2015/08/15 01:55 # 삭제

    객체지향에 대해 잘 알것 같다가도
    과연 현실세계를 모방한다는 패러다임이 맞는건가? 라는 의문때문에 답답할때가 많았는데
    정말 너무 속시원한 설명이 좋았습니다.
    앞으로 개발하는데 있어서 정말 큰 도움이 될것 같습니다.
    정말이지 너무나 잘 읽었고 이 책이 세상에 나온것에 감사합니다.

    헌데 이렇게도 좋은 책에 인쇄가 잘못된 부분이 있어 속상한 마음에 이렇게 찾아와 덧글을 남깁니다.

    1. 책 옆면에 '조영호 지음' 이 아니라 '조영호 지음 지음' 이라고 2번 표기되어 있습니다.
    2. 51페이지 1번째줄
    '그림 2.2에서는 앨리스와 음료 사이에 선이 존재했지만 그림 2.3에서는 선이 사라졌다는 것에 주목하라.'
    라고 되어있으나
    50페이지 그림 2.3에는 선이 사라지지 않았습니다.

    마지막으로 다시한번 감사하다는 말씀 올립니다.
  • 이터너티 2015/08/29 17:42 #

    부족한 점이 많은 책인데도 좋게 평가 해주셔서 감사합니다. ^^
    책에 대해 어떻게 평가해주실지 걱정이 많았는데 많은 분들이 재미있고 유익하다고 해주셔서 한숨 돌렸습니다.
    책의 편집 상의 오류는 저도 나중에 출간된 후에 발견해서 좀 속이 상했네요. ㅠㅠ
    마지막까지 깔끔하게 마무리를 했어야 했는데 많이 아쉬워요.
    다시 한번 읽어 주셔서 감사합니다. ^^
  • lantlani 2015/11/07 12:48 # 삭제

    참 오랜만에 프로그래밍 관련 책을 읽으면서 설레임을 느낀 것 같습니다.

    나름 객체 지향 프로그래밍을 한다며 막연하게 경험으로 하던 일들을 다시 한번 되돌아보게 되네요.
    책에 쓰신 것처럼 당장 프로그래밍 하는 것이 확 바뀌지는 않겠지만, 어떤 관점에서 설계를 되돌아볼 수 있을지에 대한 생각이 많이 정리 된 것 같습니다. 흔히 하는 말로 먼가 내공이 확 올라간 듯한 느낌이네요.

    정말 좋은 책을 써주셔서 감사합니다. 그리고 원래 쓰고자 하셨던 다음 책도 꼭 빠른 시간 내에 내주셨으면 합니다. ^^

    매 페이지 마다 다음에는 어떤 내용이 나올지 너무 궁금해서 일단 책장부터 넘겼네요. 다시 한번 찬찬히 읽어봐야 할 것 같습니다. 그리고 다시 한번 책을 읽으면서 피드백을 드릴 부분이 있는지 찾아보겠습니다.

    다시 한 번 감사드립니다.
  • ㅇㅇ 2015/12/13 21:27 # 삭제

    사실 제가 책은 많이 안사보는데요 yes24에서 새로운 책을 찾다가 우연히 발견해서 8월부터 읽고 있어요. 뭔가 철학적인것 같아요ㅋㅋ 곱씹으면서 읽고있어요. 정말 좋습니다 ㅎㅎ
  • 이영수 2015/12/16 21:50 # 삭제

    프로그래밍 갓 시작한 초보입니다. 최근 일을 하게 되면서 설계관련 피드백을 많이 받게 되는데요.

    클래스와 상속, 기능을 중심으로 한 객체의 모습을 중심으로 한 개념적인 객체지향으로 작성을 하면 선임분들이 더 넓은 시각으로 피드백을 주는데 그것을 이해하기 어려웠습니다.

    학원에서 빨리 가르치기 위해서 취한 접근법을 그대로 재현하던 한계가 있었고, 계속 적으로 설계관련 개념을 채우기 위해서 "객체지향적으로 생각하라" 및 최범균씨가 쓴 객체지향 책을 봐도 시원하게 이해하진 않더군요... 뭐가 문제인지를 모르고 UML 관련 책도 봤습니다.

    이 책을 보니까. 뭘 놓친 것인지 이해가 됩니다. 추상적인 이야기가 많다고 하셨는데. 제가 글 쓰는 스타일이 추상적인 비유를 활용해서 쓰는 스타일이라 오히려 저한테는 도움이 많이 됐어요.

    특히, 목적 => 시스템의 책임 => 객체의 책임 => 메시지 => 협력... 이런 식으로 실제 설계하는 과정이 나와 있으니까. 구조적인 관점으로 설계하는 것을 최소한 흉내내기라도 할 수 있다는 자신감이 생깁니다.

    책이 간단한 개념을 설정하고, 해당 개념부터 차곡 차곡 단계를 넘어가며 결국 설계내용과 연계하는 방식을 취하고 있습니다. 책 중간부터 건너뛰어서 읽으면 책에서 말하는 개념과 내 머릿속 기존 개념이 꼬여서 읽기가 어려우실 겁니다.

    앞 부분부터 보면서 내가 이미 알고 있다고 생각했던 어렴풋한 관련 개념을 다시 명확하게 하면서 읽기를 추천합니다...

    설계책들이 너무 어렵고, 요구사항 분석, 이상한 이론들에 페이지 할애를 많이 하고 실제로 코드화 시키는 과정까지 이어져 있지도 않은 경우도 있고, 번역서인 경우는 대체 무슨 말을 하는지 알기 어려운 점 때문에 불만이 있었는데. 이책은 많이 다릅니다.

    그리고.. 조영호님 다음 책은 언제쯤 나올까요????
  • 황민 2016/03/18 12:47 # 삭제

    안녕하세요.
    DDD에 관심을 갖으면서 블로그를 몇 번 방문했었는데,
    책이 나왔다는 소식을 듣고 바로 사서 읽었습니다.

    부록부분만 남겨놓고 다 읽었는데요.. 좋은 생각들을 많이 배웠습니다.
    좋은 책, 좋은 내용 감사합니다.
  • comjang2 2016/05/10 09:57 # 삭제

    좋은 책 너무 잘 읽었습니다.
    제 업무가 객체지향 언어가 아닌 언어로 개발을 하지만, 그래도 객체지향 개념을 도입해 보려고 시도는 하고 있습니다.
    책 내용이 너무 좋아서 주변에 추천도 하고 있지만, 제 개인적인 소견으로는 책의 시작 내용부터 조그만 프로젝트를 시작해서 책 마무리에 프로젝트가 끝나는 간단한 예제가 있었으면 저 같은 객체지향 초보에게는 더 많은 도움이 되었을 것 같다는 생각이 듭니다.
    책 내용은 너무 좋은데 실제 사례에는 어떻게 적용해야 하나 하는 고민이 남네요..^^
    다른 책도 집필 중이라고 하셨는데, 어떤 책인지는 모르겠지만 그 책도 기대가 되네요.
    다시 한번 좋은 책 내용에 감사 인사 드립니다.
  • philolight 2016/09/25 18:56 # 삭제

    몇 달 전에 책을 사서 읽었는데 너무 좋았습니다.
    국내 서적 중에는 제대로 된 객체지향 개념을 설명한 자료가 별로 없었는데 책을 너무나 감명깊게 읽고 한참 지난 지금 우연히 이 블로그를 발견하게 되었네요.
    올리신 글들을 보니 제가 블로그에 올린 글들이 좀 부끄러워지네요.
    저도 현재 국내에 출판되거나 각종 블로그들에 설명된 객체지향 개념이 문제가 있다고 생각하고 있습니다.
    그래서 정보를 모아서 제대로 된 객체지향 개념을 설명하고 그 개념을 정확히 활용하여 훌륭한 소프트웨어를 개발할 수 있도록 하는 책을 한번 써볼 생각을 가지고 있습니다만......
    이 곳 블로그 글들을 보고 쓰신 책의 내용을 생각하니 제가 또 하나의 쓰레기를 만들려고 하는게 아닌가 싶네요 ㅎㅎ
    아무튼 많은 도움을 받고 갑니다.
  • 딤채 2017/05/23 17:06 # 삭제

    뉴비인데요. 여쭈어 볼게 있어요

    "마지막은 객체의 외부를 공용 인터페이스를 부른다. 내부는 구현이라 부른다.
    외부에 공개되는 인터페이스와 내부에 감춰지는 구현으로 분리하여 설계하는 것이다.:"
    "인터페이스에 포함된 오퍼레이션 역시 외부에서 접근 가능하도록 공용(public)으로 선언돼 있어야 합니다."

    그렇다면, 구현부는 감춰지는 것이기에, 해당 메서드는 private으로 선언하라는 뜻이 아닌가요?
    ====== 예를 들어====
    제가 이해하기로는

    public class Score
    {

    public string getScore(int numScore) // 공용 인터페이스
    {
    returnTranslateToText(numScore);
    }

    private string TranslateToText(int numScore) // 구현
    {
    점수를 A, B+... 학점으로 변환 뒤 리턴
    }

    }

    인데...

    이게 맞게 생각한건가요? ㅎㅎ
※ 로그인 사용자만 덧글을 남길 수 있습니다.