새로운 인류 알파세대 (이 시대 기업의 미래 트렌드를 좌우할 그들이 온다)

 <새로운 인류 알파세대>는 MZ세대의 다음인 알파 세대를 이해하기 위한 책이다. 자기 주장이 뚜렷하고 집단주의와 대척점에 서있어 사회성이 떨어지는 것 같아 보여도, 그들은 개인이 중요한 만큼 또 다른 개인을 존중한다. 알파 세대와 연관된 현상, 혹은 개념에 대해 설명하여 그들과의 거리를 가깝게 만들어 주기도 한다. 특히나 우리는 Z세대로서 알파 세대와는 맞닿아있는데, 비슷하면서도 다른 세대 간의 차이를 알아볼 수 있다. 알파 세대는 무엇보다 발전된 IT 기술, 코로나 등 여러 격변을 겪으며 다른 세대와는 확연한 차이점을 가지고 있는 세대이다. 아마 처음부터 그들을 완벽히 이해하기는 쉽지 않을 수 있다. 
 몇 년 후 MZ세대가 사회에 진출했을 때의 공략 대상은 다름 아닌 알파 세대이다. 특히나 아직 성인이 되지 않았음에도 그들에 대한 비즈니스가 활성화가 되는 것을 보면 많은 기업들이 알파 세대를 이미 주목하고 있음을 알 수 있다. 앞으로 많은 변화를 겪을 마케팅, 트렌드, 비즈니스 등을 알아보고 사회와 기업의 트렌드를 좌우할 그들에게 어떻게 접근하고 소통할지 이 책을 읽으며 생각해볼 수 있다.

데미안

저는 데미안이라는 책을 중학교 때도, 고등학교 때도 읽기 시작했던 적이 있습니다. 하지만 복잡하고 길게 이어지는 서술어나 성경에서 따온 메타포 같은 것을 이해하기 어려워 완독을 포기한 채로 대학생이 되어 처음으로 완독했습니다. 이렇게 완독하게 된 데미안은 개인적인 취향으로는 별로 잘 맞지 않는다고 느껴졌습니다. 제가 본 싱클레어와 데미안은 오만하고 지식인인 척 지식을 뽐내며 깊은 고찰을 하는 듯 보이지만 실상 속 빈 지식인처럼 느껴지기도 했습니다. 하지만 그렇게 느끼더라도 싱클레어라는 끊임없이 고민과 생각을 이어가는 인물, 데미안이라는 신비롭고 선지자 같은 모습의 인물이 등장해 이야기를 전개하는 데미안이 나쁜 이야기처럼 생각된 것만은 아닙니다. 생각하는 것을 잊고 살기 쉬운 현대에 싱클레어를 보며 생각의 중요성이나 끝없는 고민, 자아성찰을 다시 한 번 생각해볼 수 있었고 데미안의 가르침이나 선지자와 같은 언행을 바라보며 그의 생각이 옳은가 스스로 토론해볼 수 있는 책이라고 생각됩니다. 또한 데미안의 존재 자체에 대해 다른 사람들이 어떻게 생각하는지 들어보는 것은 즐거운 일이기도 했습니다. 아쉬움이 있다면 작 중에 등장하는 카인과 아벨 등 성경에서 나온 인물에 대해 잘 몰라 깊은 몰입이 어려웠고 전반적으로 그런 성경에서 따온 구절이나 가르침, 인생에 대한 방향이 많은 책이라 얕게라도 성경에 등장하는 이야기를 숙지하고 읽었다면 싱클레어를 이해하는 것에 더 도움이 됐을 거란 생각이 들었습니다. 

브로콜리 펀치 (이유리 소설집)

재기발랄한 상상력과 현실 밀착형 SF, 그리고 비현실적일수록 현실적인 우리네 삶 속 이야기
SF라고 해서 반드시 우주적 스케일일 필요는 없다. 배경이 현실과 닮아 있을수록 그 안에 설치된 비현실적 요소들이 더욱 도드라진다. 그런 점에서 판타지 소설로서 성공적이었다고 생각한다. 또 소재의 독창성으로 독자의 집중력을 결말까지 끌고 갈 수 있는 단편 소설의 특성을 잘 이용했다고 생각한다. 가장 처음부터 마지막까지 일정한 색깔과 분위기를 유지하며 작가의 세계관을 독자들에게 온전히 소개해 주는 단편집이었다.
작가의 재치 있는 상상력은 섬세하게 사람의 심리를 긁어 내고, 실체로 빚어 독자들에게 보여 준다. 말하지 않으면 알 수 없는 마음들이 있지만, 그런 것들은 대개 어떻게 말해야 할지 막막하다. 이 책은 말로 표현하기 어려운 것들을 눈에 보이는 것으로 탈바꿈하여 많은 감정과 생각을 직접적으로 전달했다. 적확하게 입 밖으로 낼 수 있다는 것은 그걸 감당할 수 있게 되었다는 뜻이라고 생각한다. 이 책을 읽으면서 그동안 느껴 왔던 슬픔이나 패배감, 좌절감, 막막함을 정의할 수 있었고 정리할 수 없어 묵혀 왔던 감정들을 마주해 볼 수 있는 계기가 되었다.
가장 인상 깊었던 것은 사랑에 빠지는 과정을 대단히 낭만적으로 표현하는 것보다 일상적으로 그려 내는 쪽을 선택한 것이었다. 삶에 사랑은 없다가도 있을 수 있고, 있다가도 없을 수 있는 요소라는 것을 느낄 수 있어 좋았다.
가볍게 여러 소설을 읽고 싶은 사람, 담백한 심리 묘사를 좋아하는 사람, 요즈음의 현대 문학 단편집의 기조를 선호하는 사람이라면 끝까지 재미있게 읽어낼 수 있을 것 같다. 

클린 아키텍처: 소프트웨어 구조와 설계의 원칙 (살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙)

  코딩을 해봤다면 알겠지만, 어떤 한 작업을 반복하는 일이 생각보다 잦다. 그래서 그것을 처리하기 위해 반복문이 나왔다. 하지만 종종 반복문만으로 해결이 안되는, 한 작업이 있다. 이를 위해 함수가 나왔고, 또 전체적으로 관여하는 변수가 같은 경우를 처리하기 위해 클래스가 나왔다. 이런 식으로 프로그래밍 언어는 발달해왔다.
  반복문, 함수, 클래스 덕분에 큰 편의를 얻을 수 있었지만, 한번 짠 코드를 평생 바꾸지 않을 것이 아닌 이상 결국 수정의 때는 언젠가 오게 된다. 여기서 문제는 해당 코드를 짤 때는 거의 완벽하게 알고 있었던 그 코드의 체계를 결국 잊게 된다는 것이다. 그러면서 ‘가독성이 좋은 코드’의 필요성이 증가했다. 이 책은 ‘가독성이 좋은 코드’를 어떻게 짜는가에 대한 방법을 제시해주고있다. 또한 함수, 클래스 등의 이해를 바탕으로 기술되어있는 것으로 보였다. 나 같은 경우, 학교에서 배웠던 클래스의 이해만 갖고 책을 봤었기에 약간의 어려움이 있었다.
  책에는 여러 방법이 소개되어있었는데, 약간 부수적이고 앞에 나온 개념일지는 모르겠지만 나의 경우 ‘단일 책임 원칙’이 가장 와 닿았다.  나는 ‘백준’이라는 사이트에서 Problem Solving, 다시 말해 프로그래밍 문제 풀이를 즐긴다. 여기서는 어떻게 구현하든 정답만 나오면 되기에 main함수에 모든 로직을 때려넣거나, 함수 하나가 재귀를 통해 모든 일을 처리하거나 하는, 다시 말해 단일 책임 원칙이 철저하게 배제되는 상황이 자주 나온다. 사실 너무 특정한 분야이고 프로그램의 크기가 충분히 작아 (제출 할 수 있는 코드의 길이는 50KB를 넘지 못한다.) 상관 없지만, 확실히 실제 개발에 들어가면 어떻게든 버려야 할 습관이었다.
  그 외에도 상속의 단점과 같은, 정말 유명하지만 너무 당연한 이야기와 이 책에만 있는 많은 비법들이 있었다. 아직 프로젝트를 많이 해보진 않았지만, 이 책에 있는 여러 기법을 사용해봐야겠다는 생각이 많이 들었다.

브로콜리 펀치 (이유리 소설집)

소설에서 기이하고 신기한 현상들이 일어나지만 우리가 상상해 보거나 우리에게도 일어날 법한 일들도 적혀있어 더욱 공감이 가고 재미있었다. 책의 공통적인 키워드는 위로라고 생각한다. 브로콜리 펀치에서 격투기 경기에서 이기기 위해 상대방을 미워하는 노력을 하는 복싱선수에게  이제 힘들다면 그만해도 괜찮다고 다독여주며 복싱 선수의 마음을 알아주는 것과 손톱 그림자에서 다시 살아서 돌아온 남자친구를 대하는 태도에서 느껴지는 미안한 마음을 보며 인물뿐만 아니라 독자에게도 공감과 위로를 건네주며 힘을 주는 소설이라는 생각이 들었다.

클린 아키텍처: 소프트웨어 구조와 설계의 원칙 (살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙)

남은 2년동안 계속 전공공부를 하며 가끔씩 다시 읽어보는것도 좋을것 같다는 생각이 들었다.

학교수업에서는 다루지 않은 부분들이지만 오랜 경력이 있는 저자의 생각, 저자의 조언이 담겼으니 공부의 일부라고 생각하고 읽는것도 좋을것 같다.

독서클럽활동을 통해 알게된 책으로, 전공책이 아닌 프로그래밍도서는 이 책이 처음이다.

좋은 기회, 좋은 시간으로 기억에 남을 것 같다.

Y의 비극

고전 추리 소설의 거장 엘러리 퀸과 드루리 레인과의 첫만남.
 새로운 세계관을 만나는 일은 쉽지 않은 도전이지만 취향에만 맞는다면 꽤나 즐거운 일이다. 이번에 내가 도전할 세계관은 드루리 레인이라는 탐정이 등장하는 추리 소설 시리즈로 작가는 엘러리 퀸이라고 한다. 나는 살면서 제대로 읽은 추리 소설 시리즈가 셜록 홈즈 시리즈와 해리 홀레 시리즈 뿐인 추리 장르의 문외한이나 추리나 미스터리 장르를 좋아하는 편이기에, 이번에 새로운 엘러리 퀸의 비극 시리즈를 읽는 것 역시 기대감을 품고 있었다. 그도 그럴 것이 세계 3대 추리 소설 명작으로 뽑히는 Y의 비극이었으니 말이다. 참고로 나는 추리 소설을 어려운 문학 작품 보듯 깊게 보는 편은 아니다. 상징을 찾는다거나, 인간적인 고뇌라거나를 생각하지 않았다는 뜻이다. 지루함을 달래기 위해, 흥미를 위한 오락거리 느낌으로 읽어왔기 때문에 이번 책도 당연히 제일 집중했던 부분은 과연 범인의 정체가 무엇일까? 라는 부분이었다. 하지만 이 책은 그런 마음으로 접근해서는 제대로 읽을 수 없는, 그런 책이다. 
 이 책의 배경인 대략 100년 정도 전 미국 뉴욕에 위치한 대저택에서 일어난 3번의 사건은 저택 주인인 에밀리 해터의 남편 요크 해터의 자살 사건, 에밀리 해터가 전 남편 사이에서 얻은 딸 루이자 캠피언의 살인 미수 사건, 그리고 마지막으로 에밀리 해터 살해 사건으로 쉴 틈 없이 진행된다. 요크 해터의 자살 사건 이후로 안 그래도 분위기가 좋지 않았던 해터가 저택에서는 계속 살인을 목적으로 하는 사건이 벌어지며 분위기가 더욱 흉흉해진다. 미수에 그쳤던 살인 미수 사건은 에밀리 해터의 살인 사건에서 정점을 찍으며 레인은 바로 전 루이자 캠피언 살인 미수 사건의 범인과 같은 인물이 살해 사건을 저지른 것이라는 결론에 도달한다. 그 페이지가 책을 읽던 독자도 함께 추리를 시작 해야 하는 순간인 것이다.

 우리가 추리, 미스터리 장르를 읽으면서 범인을 추리할 때 집중해야 하는 것은 아마 피해자를 살해할만한 동기를 가진 등장인물이 누구인가, 그리고 사건 현장에서 발견한 증거와 등장인물들의 증언은 어떤가 정도일 것이다. 하지만 이 책을 읽다 보면 에밀리 해터에게는 미안하지만 이런 생각을 할 수 밖에 없을 것이다. 에밀리를 죽일만한 사람이 너무 많아…! 실제로 내가 2막까지 읽고 내린 결론은 루이자와 바버라를 제외하고는 이미 자살로 판정된 요크 해터를 포함해 집안의 모든 사람이 에밀리 해터를 살해할만한 동기를 가지고 있다는 것이었다. 그리고 그 이후의 내용에서도 증거나 증언에서도 그렇게 범인을 특정 지을만한 이야기는 없이 넘어가는 것처럼 보였다.
 그런 흐름 속에서 의외로 후반으로 가면 갈수록 오히려 레인의 상태가 안 좋아진다. 나는 처음에 레인이 침울해져가는 모습을 보고 내가 아는 몇 안 되는 탐정과 형사 중에 사건 중에 이렇게 우울해하는 탐정은 처음 본다는 생각과 함께 계속 이렇게 중요하게 서술 되는 것에 이유가 있을 거라고 생각해 그 묘사에 초점을 맞춰 추리를 해보기로 했다. 과연 정체만으로 탐정을 저렇게까지 우울하게 만들만한 범인은 누굴까? 내가 최종적으로 지목한 범인은 마사 해터로, 해터 가문 망나니와 결혼해 인생이 불행해진 사람이자 어린 두 아들의 엄마였다. 에밀리와 콘래드 사이에서 고통을 받던 마사라면 이 가문의 최대 피해자가 아닐까 싶어서 말이다. 나쁜 예상은 아니었으나 보기 좋게 빗나갔다.
 이 책의 범인을 결국 에밀리 해터에 대한 원망이 있긴 하나 치기라고 표현해도 좋을 정도의 수준에, 계획도 동기도 전부 남의 것을 빌린 자가 범인으로 나온다. 심지어 어떤 결과가 나올지 제대로 예상을 하고 일을 실행한 것도 아니다. 증언에서 잡아낼 수 없었다면 정황이나 상식 선에서는 추리할 수 없을 거라고 생각한다. 애초에 용의자로 올릴만한 인물조차 아니기도 하고. 나중에 봤는데 반전으로 유명한 작품이라는 글을 읽고 나서야 납득이 갔다. 아예 반전을 위한 내용이었구나 싶어서. 하지만 그런 아쉬움으로만 끝날 내용이었다면 아마 세계 3대 추리 소설로 불리지는 않았을 것이다.
 내가 이 소설에서 제일 흥미롭게 뽑는 부분은 제일 후반부로 레인이 사건의 진상을 공표하지 않겠다는 조건으로 경감과 검사에게 말하는 내용이다. 그 내용만으로 생각할만한 거리가 되는 진상이지만, 여기서 레인은 자신이 범인을 살해했을지도 모른다는 고백, 혹은 그렇게 오해를 받을만한 소지가 있는 투로 이야기를 끝내버린다. 그 부분을 읽기 전 나왔던 범인이 죽을 당시의 묘사, 그리고 그런 진상을 고백할 때의 레인의 묘사를 봤을 때 나는 거의 확실하다고 생각한다. 정말 충격적이지 않은가? 탐정이 범인을 살해했을 수도 있다는 화두를 던진 것 자체가 말이다. 거기에 범인의  정체는 저런 사실에 충격을 더하면 더했지 줄일만한 인물은 아니다. 이 소설의 반전은 범인의 정체 뿐 아니라 레인의 고백까지 이어진 것이다. 끝까지 반전에 반전인 내용이었다.

오브젝트 (코드로 이해하는 객체지향 설계)

역할 책임 협력

  • 객체지향에서 가장 중요한 것은 역할,책임,협력이다.
  • 역할,책임,협력을 고려하지 않은 채 상속,클래스,지연 바인딩과 같은 구현요소에 초점을 맞추면 유연하지 못한 코드를 낳는 원인이 된다.

영화 예매 시스템 돌아보기

  • 다양한 객체들이 영화예매라는 usecase를 달성하기 위해 메시지를 주고받으며 상호작용(협럭) 한다.

협력

  • 다른 객체에게 무언가 요청하는 것
  • 메서드 : 메시지를 처리하는 방법
  • 객체의 자율성을 보장하기 위해서는 필요한 정보와 정보에 기반한 행동을 클래스 안에 모아두어야 한다. => 응집
  • 객체를 자율적으로 만드는 기본적인 방법은 캡슐화이다.
  • 자신에게 할당된 정보 이외의 정보가 필요하면 다른객체에게 협력을 요청하자.

협력은 설계를 위한 문맥을 결정한다.

객체가 가질 행동과 상태를 결정하는 기준은?

  • 객체가 참여하고 있는 협력이 기준이 된다.
  • ex: movie객체는 어떤 행동을 수행해야 할까?
    • movie의 관점에서 생각을 하면 movie.play()를 떠올릴 수 있다 -> x
    • 협력의 관점에서 생각해야한다. movie는 예매라는 협력에 참여하고 있다.
    • 협력에 의거하여 행동을 결정한다.
    • 행동은 상태를 결정한다
    • 협력 –(결정)–> 책임(=행동->메시지) –(결정)–> 상태

책임

  • 책임은 행동이다.
  • 책임은 하는 것과 아는 것으로 나뉜다.
  • ex 영와 예메 협력
    • 메시지 -> 예매,요금 계산,할인 계산, 할인 조건 … [하는 것 책임]
    • 예매 메시지에서 영화요금을 알아야 한다.[아는 것 책임]
    • 메시지 <= 책임
  • Movie 에게 요금 계산 책임을 할당
    • 요금계산 메시지를 받는다 -> calculateFee() -> 할인정보는 모름으로 메시지 요청한다.
    • 영화(요금) 정보를 알아야한다. -> fee

책임할당 자세히

  • 책임할당은 정보전문가에게 책임을 할당하자 (정보전문가 전략)
  • 협력을 설계하는 출발점은 시스템의 책임
  • 시스템 책임이 영화예매 일때
    • 영화 예매라는 책임을 달성하기위해 다른 객체에게 메시지를 보내야 한다.
      • 이로써 메시지 이름을 도출할 수 있다 -> 예매하라(reserve)
    • 메시지를 처리할 객체를 선택한다
      • 정보 전문가는 누구인가? -> 상영+요금을 알야아한다. -> ‘상영’도출
    • 요금에 대한 전문가는 ‘상영’이 아니다
      • ‘요금계산하라’ 라는 메시지를 보내야한다.
      • 정보 전문가는 누구인가? -> 요금과 할인정보를 알고있어야 한다. -> ‘할이정책’ 도출

정리

  • 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.
  • 시스템 책임을 더 작은 책임으로 분할한다.
  • 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
  • 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
  • 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 된다.

메시지가 객체를 선택하는 이유

  • 최소 인터페이스를 가질 수 있고 추상적인 인터페이스가 도출된다는 장점
  • 협력 ->행동(=책임->메시지) -> 정보전문가 도출(객체) 맟 상태 도출

역할과 협력

  • 역할: 책임의 집합
  • 역할에 책임을 할당한다고 생각하자.
  • 역할을 통해 유연하고 재사용 가능한 협력을 얻을 수 있다.
  • ex: 퍼센트 요금계산, 금액 요금계산 -> 객체관점 -> x
    • 요금계산 역할 -> 추상화 -> o
  • 역할은 일종의 슬롯이다. 누구든지(객체) 역할의 책임을 다한다면 교체될 수 있다. -> 추상화

역할의 구현방법

  • 추상클래스 -> 책임의 일부를 구현해논다.
  • 인터페이스 -> 책임에 대해서 정의(나열)만 해논다.
  • 단 협력에 참여할 수 있는 대상은 후보(역할,객체)인데 한객체만 참여할 필요가 있다면 후보는 객체가 된다. 쉽게 말해 항상 역할을 고려할 필요는 없다는 것
  • “객체가 무슨역할을 수행해야 되는가?” 라고 자문하자
    • 역할과 객체가 동일한지 아닌지로 후보를 결정하자
  • 설계 초반에는 절절한 책임과 협력의 큰그림을 탐색하는 것이 우선되어야한다.
    • 이후 반복적으로 책임과 협력을 정제해 가면서 필요한 순간에 객체로부터 역할을 분리하는 전략을 취하자
    • 후보의 상세결정은 초반에 고려하지 않는다
    • 도메인 모델에 개념을 후보로 생각하고 책임할당한 뒤 이후에 정제하자

역할과 추상화

  • 객체는 협력에 따라 역할이 달라질 수 있다.
  • 역할은 협력에 참여하는 잠시동안에만 존재하는 개념이다
    • 문맥(협력)안에서 무엇을 하는지에 의해서만 정의된다.

객체지향의 사실과 오해 (역할, 책임, 협력 관점에서 본 객체지향)

객체 상태 행동 식별자에 관한 이야기

행동은 외부의 메세지에 따라 수행되고 행동의 결과는 상태에 의존적이며 행동은 상태를 변경한다.

행동은 사이드이펙트가 발생하며 다른 객체의 상태를 변경하도록 행동을 요청할 수 있다

우리는 자율적인 객체를 설계하도록 노력해야한다. 객체가 자율적일 수록 OCP 원칙을 지키게 되며 유지보수가 용이한 코드가 완성된다.

Entity에 관한 이야기

entity는 외부세계에 노출하지 말아야 한다. 때문에 request dto를 사용하는 것이다.

커맨드와 쿼리를 분리하여라, 예를들어 update메소드에서 갱신 후에 entity를 반환하면다면 갱신명령과 조회쿼리가 혼합된다. 이를 분리하는 것은 유지보수성에 용이하다.

객체설계시 상태가 아닌 행동중심적 사고를 가져야한다. 행동중심적 사고로 설게하면 객체지향의 본질을 보다 지킬 수 있다.

객체지향은 현실세계를 모방하는 것이 아니라 은유에 가깝다. 현실객체를 기반으로 새로은 세계를 창조하는 것. 다만 현실객체를 은유하기 위해 해당하는 특징과 일치하는 현실세계의 객체의 이름을 사용하는 것이 좋다.

헨리백이 지하철 노선을 단순화 한것 처럼. 추상화는 단순화라는 목적을 가진다. 먼저 구체적인 사물들을 하나로 묶기위해 차이점을 버리는 일반화를 진행하고, 목적에 불필요한 속성들을 제거하면 된다. 이로보아 추상화는 목적에 의존적인 것을 알 수 있다.

분류는 추상화하기 위한 도구이고 개념을 가지면 분류를 할 수 있다.

개념의 3가지 속성

심볼,내연,외연

심볼은 각 개념을 구별할 수 있는 이름

내연은 각 개념에 속하는지 판별할 수 있느 특징

외연은 각 개념에 속하는 집합

타입은 개념이다

타입 은 1010101로 표현되는 데이터에게 특정한 행동을 할 수 있도록 분류해 놓은 것

클래스도 타입이다 정확히 타입을 구현하는 방법중 하나가 클래스이다 클래스는 코드의 재사용성을 위해서도 사용될 수 있다

클래스를 만든다는 것은 특정한 행동을 할 수 있도록 분류하는 것이고 때문에 클래스를 설계할 때

행동 중심적 사고가 이루어져야한다

행동은 책임이다

객체를 설계힐때 어떤행동이 필요한지 탐구하고 상태는 부수적인것

일반화 특수화 , 특수화는 일반화의 부분집합이다. 트럼프 인간은 트럼프에 속하는 것처럼

이 관계에서는 리스코프 치환원칙이 권장된다 개념의 내연이 많아질수록 외연은 적어진다

기억할 것은 행동을 기준으로 타입을 분류하고 타입을 기준으로 객체를 구성하면 된다

협력관점에서 보는 것이 가장 중요하다

어떤 협력이 필요한지 파악하고, 해당협력을 위해 어떤 메시지들이 필요한지 생각한다. 그다음 메시지를 수신할 객체를 정하거나 생성하고 해당 객체는 메시지에 대한 책임을 가지고 그에 응하는 행동을가진다. 이런 책임이 여러객체에서 가지게 된다면 그것은 역할로 추상화 되도록 설계한다.

다른 객체에게 메시지를 던질 때 해당 객체의 자율성을 해치는 수준의 메시지를 던지게 되면 유연성이 떨어진다. 객체는 자율성을 가지면서 해당 메시지에 대한 책임을 수행하는 방법을 선택하게 되어 많은 장점을 가지기때문이다. 그렇다고 너무 추상화된 메시지를 던지게되면 책임이 불분명해질 수 있다,

메시지는 해당객체에게 협력에 대한 책임을 수행하도록 요청할때 사용되며 수신자는 해당 책임을 수행하기 위한 방법을 선택하는 수단을 메소드라고 한다.

다형성은 메시지를 기반으로 객체간의 결합도를 낮추면서 수신자에 대한 정보를 최대한 모르게 구성하여 같은 책임을가지는 다른객체도 협력을 위해 사용될 수 있게 구성되는 것이다.

책임주도설계과 메시지의 중요성

협력문맥내에서 메시지 중심 사고를 해야하고 메시지를 정하고 객체를 찾아야한다. 쉽게 방법을 정의하면 협력을 책임지는 객체를 정하고 해당 책임을, 협력을 이루기위한 메시지들을 구성한뒤 적절한 객체에 메시지를 수신할 수 있도록 한다. 그러면 객체의 자율성과 캡슐화를 증진시킬 수 있고 메시지 기반사고는 인터페이스를 발견할 수 있다. 메시지를 기반으로 협력을 구성하는 것은 객체지향 장점을 극대화한다

인터페이스란 사물간의 상호작용을 위한 통로이다.

메시지가 인터페이스를 결정하고 인터페이스는 공용 인터페이스와 사적인터페이스로 나뉜다. 공용은 외부와 협력하기 위한 수단이고 사적은 객체 자신이 자신에게 메시지를 보내기 위한 수단이다. 이렇게 분리하는 것은 변경으로부터 안전한공간과 위험한공간을 분리하기 위함이고 이는 캡슐화를 의미한다.

객체의 자율성

인터페이스와 구현의 분리를 가지게 되면 객체의 자율성을 확보할 수 있다.

객체의 자율성을 확보하게 되면 외부객체는 객체의 추상화된 행동으로 메시지를 송신할 수 잇고 이는 다른 객체여도 같은책임을 한다면 대체할 수 있음을 의미한다. 또한 같은 메시지안에서 수신받는 객체는 다른 메소드를 선택하더라도 협력관점에서의 변경은 일어나지 않는다. 또한 객체의 자율성을 해치는 추상적이지 않은 메시지를 송신할 경우, 즉 객체의 처리순서까지 강제할경우 처리순서가 바뀌면 협력관점에서의 변경이 일어난다. 이처럼 객체가 자율성을 가지게 설계한다는 것은 변경에서 자유로워 지고 협력을 파악하는데 간단해진다는 것을 의미한다.

도메인 설정

요구사항을 기반으로 현실세계를 은유하여 존재하는 객체를 식별하고 타입으로 추상화하여 관계를 나타낸 것은 도메인 모델이라고 한다

협력 식별

도메인 모델간 필요한 협력을 식별하고 협력에 필요한 메시지들을 식별한다. 메시지가 식별되면 해당메시지를 수신하기에 적절한 도메인을 설정한다 이 메시지를 기반으로 인터페이스가 발견된다 

구현 단계

발견된 인터페이스를 기반으로 실제 구현작업에 들어가며 내부적인 속성이나 메시지의 책임를 수행할 있는 코드를 작성한다. 이때 인터페이스가 수정될 있다 이것은 자연스러운 일이다 

최재천의 공부 (어떻게 배우며 살 것인가)

작가의 이름을 걸고 집필한 <최재천의 공부>는 최재천 선생님께서 직접 어떻게, 어떤 공부를 해야 하는지에 대한 의문에 답을 주고 있다. 질문과 답변을 통해 의문점을 제시해 곧바로 그에 맞는 해결책을 답변하는 인터뷰 형식으로 책으로 썼다는 점이 흥미로웠다. 공부에 대한 그의 생각은 “누구나 잠재력이 있고 끌려가지 않아야 하며 끌고 가야하고, 읽고 쓰고 말해야 한다. 배우는지 모르게 배워야하고, 섞여야 한다. 혼자만 잘 사는 대신 손잡아야 살아 남고 학생 기간에도 인간답게 살 권리가 있어야 하며 애들에게 삶을 되돌려주어야 한다.”고 강조하고 있다. 그런데 그의 이러한 생각과는 달리 우리의 현실은 그의 말과 정반대라는 것에 문제를 제기하고 있다. 이 책은 다른 책들이나 매체를 통해 교육과 독서에 관해 개념화했던 생각들이 정리되도록 도움을 주고, 평소 본인이 가졌던 생각들이 교육에 변화를 가져오고 싶은 엘리트와 닿아 있다는 점에서 기쁨을 안겨주는 책이다. 이 배움을 어떻게 우리의 삶과 교육에 적용할 지 고민해볼 수 있도록 한다는 점에서 평생 공부에 공감한다면 꼭 읽어보기를 추천한다.