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

남은 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로 표현되는 데이터에게 특정한 행동을 할 수 있도록 분류해 놓은 것

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

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

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

행동은 책임이다

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

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

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

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

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

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

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

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

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

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

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

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

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

객체의 자율성

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

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

도메인 설정

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

협력 식별

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

구현 단계

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

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

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

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

이 책을 읽으면서 전반적인 트렌드들을 많이 알게 된 것 같다. MZ세대로서 현재 트렌드를 많이 안다고 생각했는데 책을 계기로 알게 된 점이 많아진 것 같고 또래들의 문화에 익숙하고 알파세대에서는 어떤 것이 유행인지 알지 못했던 것 같다. 알지 못했던 것 만큼 흥미로운 점이 많았다. 이 책은 알파세대에 대해 자기주장이 강하고, 자신이 하고싶은 것을 하면서 부당한 것이 있으면 아니라고 강하게 내세울 수 있는 점을 긍정적으로 평가했다.

 사실 지금 MZ라고 불리는 세대도 나름 자신을 강조하고 자신을 더 생각하는 세대라고 볼 수 있는데, 세대가 지날수록 더욱 자신을 생각하는 면이 많아지는 것은 장점이 될 수도 있지만 개인주의가 될 수 있지않을까하는 우려도 같이 생각하게 해주었다. 

물론 콘텐츠를 소비만 하는 것이 아니라 생산도 같이 하는 경향으로 바뀌었다는 점에서 나름 혁신적이었다. 특히 베렝구어 상황극이라고 해서  아기 인형을 직접 육아하는 브이로그를 찍어 올리는 것이 유행이라는 것이 흥미로웠다. 이제는 제3자가 아기 인형과 함께 노는 것을 지켜보는 것이 아니라 직접 콘텐츠를 생산한다는 점에서 우리나라 디지털 미래가 밝겠다는 생각을 했다.

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

역할, 책임, 그리고 협력을 객체의 주요한 특성으로 잡고, 각자 객체 개개인의 연결고리를 이해하기 쉽게 설명하는 내용이 담겨 있었습니다. 

객체를 이상한 나라의 앨리스에 빗댄 설명이 서술되어 있기도 했는데, 객체의 상태와 행동에 따라 달라지는 사례들이 인상적이었던 것 같습니다. 특히, 재판 이야기를 판사/증인/토끼의 세 객체로 나누어 협력과 책임에 대한 설명이 담겨 있었던 것이 인상적이었습니다. 대중적인 동화를 이용해 추상적인 프로그래밍 개념을 이해시킬 수 있었던 점이 유익했었던 것 같습니다.

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

 우선 브로콜리 펀치는 약간 짧은 영상을 보는 느낌이었다 고전적인 소설이 아니라 우리가 한 번쯤은 상상해봤을 법한 이야기들을 담아 낸 책이라 독서토론을 하기에 참 적합했다는 생각이 든다. 내가 생각한 이 부분이 또 친구들이 생각할 때는 다르게 와닿는 게 흥미로웠던 것 같다
가장 흥미롭게 읽었던 챕터는 이구아나와 나 이다 개인적으로 모든 챕터들 중에 가장 마음을 울렸던 대목인 것 같다. 헤어진 전남자친구가 두고간 이구아나
알고보니 그 전남자친구 또한 헤어지기 전에 전여자친구가 두고간 이구아나 였다
주인공은 재호가 두고간 이구아나가 미웠지만 어느 순간  자신의 처지와 비슷한 것 같다 생각하여 쓰다듬어 주고  봐주기 시작했다. 그때부터 이구아나는 주인공에게 말을 걸었고 자신이 죽기전 멕시코에 가는 게 꿈이라며 수영을 가르쳐 달라고 하였다.
이구아나와 주인공은 서로에게 따듯함을 느끼고 어느순간 의지하고 있었다 이구아나와 마침내 이별하게
된 그 순간은 마음이 이상했던 것 같다. 
남자친구도 사랑하는 사람도 아니고 고작 이구아나
인데 마치 정말 사랑하는 사람을 보내주는 것 처럼 여운이 남았던 것 같다
너무나도 다른 이구아나와 주인공 이지만, 버림 받았다 라는 그 동질감하나로 서로에게 의지하고 다시 일어날 수 있다는 자체의 스토리가 마음에 와닿았다

천 개의 파랑(큰글자도서) (2019년 제4회 한국과학문학상 장편소설 부문 대상 수상작)

 처음에 ‘천 개의 파랑’이라는 책을 들었을 때, 제목에서부터 흥미를 느꼈다. ‘파랑이라는 색을 천 개의 이미지로 나타냈다’의 생각에서부터 정말 다양한 생각이 내 머리 속에 돌아다녔다.
 천 개의 파랑을 읽어보니 내가 생각했던 것과는 전혀 다른 내용이었지만, 그랬기에 많은 것들을 깨달았던 것 같다.
 천 개의 파랑은 휴머노이드를 주제로 다룬 소설책이라고 생각한다. 나는 이 책을 통해 ‘휴머노이드’를 처음 들었다. 물론 무의식적으로 들은 적은 있었겠지만, 이렇게 직접적으로 들은 것이 처음인 것 같다. 나는 휴머노이드는 로봇, 기계이기 때문에 감정을 전혀 느끼지 못한다고 생각했다. 하지만 이 책에서는 휴머노이드인 ‘콜리’가 감정을 느끼는 것처럼 표현하였다. 나는 이 점이 가장 새로웠던 것 같다. 로봇이 인간의 감정을 배우고 느끼는 것이 마치 인간인 아기가 어른들을 통해 감정을 배우고 느끼는 것과 같았기 때문이다. 어쩌면 우리 또한 로봇과 같은 것이 아닐까? 인간이 로봇과 다른 점이 무엇일까?등등 많은 생각을 하게 만들어준 포인트이다.
 이 책을 읽는 시간은 그리 길지 않았다. 다음 내용이 궁금하여 빨리 빨리 읽게 된 것 같다. 나는 이 책을 읽으면서 상상력을 많이 활용한 것 같다. 일상 속의 이야기이지만, 일상의 소재가 아닌 내용을 다룬 책이었기에 우리가 모르는 것을 상상하면서 읽기 바빴던 것 같다.
 이 책을 읽으면서 인상 깊었던 부분과 내 생각을 말하고자 한다.
9p
“여기에서 두 가지 말도 안 되는 사고가 일어난 것이다. 하나는 연구생이 칩을 떨어트렸다는 것이고 또 하나는 바닥에 떨어진 칩을 청소 담당자가 다른 칩 상자에 넣었다는 것이다. 둘 다 인간이 아닌 기계였다면 절대로 일으키지 않았을 사고였다. 그러니 콜리는 인간의 실수로 탄생한 셈이다.”
-> 인간의 미래를 발전시킬 혁명이라고 생각한다. 인간은 실수할 수 있고, 예상치 못한 일들이 생길 수 있지만 로봇은 그렇지 않다. 인간이 하지 못했던 계산을 할 수도 있고, 인간보다 빠른 정보를 수집하는 등을 통해 인간이 보다 효율적으로 살아가게 할 것이다.
p. 22
민주는 콜리에게 왜 그렇게 말과의 교감에 집착하느냐고 묻고 싶었지만 물을 수 없었다. 콜리에게 질문하는 상상을 하면 기분이 묘해 견딜 수 없었다.
->안드로이드에게도 자아가 있다고 착각할 수도 있을 것 같다. 우리는 분명 안다. 안드로이드는 단지 로봇일 뿐이란 것을. 하지만 어떤 것과 교감을 한다는 것은 감정이 있다는 것과 비슷하기에 로봇에게도 인간의 모습이 희미하게 보일 것 같다.
39p
‘결국 이 세상은 수지타산이 얼마만큼 맞느냐로 돌아가는 것인데, 점장의 말마따나 이제는 인간 한 명을 고용해 쓰는 것 보다 휴머노이드 한 대의 비용이 더 저렴했다’
-> 오히려 휴머노이드는 노동측면에서 효율성이 떨어질 것 같다. 정확한 계산과 빠른 사고를 가지고 있지만, 휴머노이드의 본체는 플라스틱, 철 등 강하지 않은 것으로 만들어졌다. 이런 로봇이 노동력이 필요한 곳에 투입된다면 금방 망가지고, 고장이 날 것 같다.
 또한, 휴머노이드는 서비스 측면과도 맞지 않다고 생각한다. 서비스직은 사람과의 의사소통이 필요하고, 상황에 따라 융통성이 필요한데 휴머노이드는 절차와 질서를 중요시 하기에 알맞은 선택을 하기 어려울 것 같다. 그래서 휴머노이드는 노동력은 간단하면서 정보를 수집하는 일이나 계산이 필요한 일, 자료를 정리하는 일 등에 유용하게 쓰일 것 같다.

63p.
물론 정가의 휴머노이드 기수는 몇백만 원을 호가했다. 그렇지만 구매만 그렇다. 되파는 건 다른 문제다. 다른 휴머노이드와 달리 기수 휴머노이드는 소모품이었고, 말과 함께 경주를 뛰고 온 기수는 대체로 상태가 좋지 않았다. 그래서 구매가의 반의반도 되지 못하는 가격으로 싸게 되팔았는데 되파는 모든 행위가 불법이었다. 기관에 도로 반납하는 게 맞았으나 기관에서도 부품 하나 건질 수 없는 휴머노이드는 대체로 받지 않았으니, 웬만한 업체들은 ‘산산조각’이 났다는 거짓말을 하고 불법 거래를 했다.
->기관이 불법 판매와 아예 상관이 없는 것은 아니지만, 불법 판매를 하는 것은 불법 판매를 하는 대상들의 책임이 크다고 생각한다. 아무리 기관에서 말을 하고, 제재를 한다고 해도 불법 판매를 하려고 하는 사람들은 하기 때문이다.

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

독서 토론 활동을 통해 “객체지향의 사실과 오해”라는 책에 대해 다양한 의견을 공유하고 이야기를 나눌 수 있어서 매우 유익한 시간이었습니다. 객체 지향 프로그래밍에 대한 기본적인 개념부터 체계적이고 구체적으로 설명해주어 이해하기 쉬웠습니다. 특히 저는 객체지향 프로그래밍에 대한 지식이 부족했는데, 이 책을 통해 개념적인 이해도를 향상시킬 수 있었습니다. 책의 구성도 굉장히 체계적이었고, 이론적인 내용과 실제적인 예제를 적절하게 혼합하여 제시하여 이해하기에 도움이 되었습니다. 활동하는 동안 주제 별로 토론을 하며 다른 참여자들의 의견을 듣고 저의 견해를 표현하는 시간이 있었는데, 이러한 토론을 통해 다른 사람들의 시각을 접할 수 있었고, 제가 이해한 내용을 다른 사람들에게도 설명해야 하는 기회가 생겨서 더 깊은 이해와 학습을 할 수 있었습니다. 이번 활동을 통해 많은 도움을 받았고, 더 나아가 객체지향 프로그래밍의 깊은 이해를 위해 더 열심히 공부하고 실습해 나갈 생각입니다.