[북스터디] 객체지향의 사실과 오해 (1)

ggam-nyang·2022년 3월 25일
0

북스터디

목록 보기
1/2

북스터디 (첫 시작)

첫 북스터디를 객체지향의 사실광 오해로 시작해본다.
시작이 반이니 반만 더 성공해보자!

첫 주 개괄

책에 머리에도 나오지만, 코드는 아주 일부만 등장한다. 특히 1, 2장은 소설같은 느낌이다.
객체 지향을 이야기(이상한 나라의 앨리스)에 비유하여 풀어나간다. 그래서 읽는 내내 그냥 소설을 읽는 기분이 들었다.
때문에 1, 2장은 뇌리에 남는 구절들을 위주로 남겨보고자 한다.

1장. 협력하는 객체들의 공동체

객체 지향은 객체를 지향하는 프로그래밍 페러다임이다. 객체지향을 써보지 않은 사람도 이는 분명히 인지할 것이다. 그럼 객체 지향을 사용해본 사람들은 객체를 지향하며 프로그래밍을 했을까?
1달차 스프링 부트 응애인 나는 아니다. 객체 지향하면 바로 생각나는 것은 무수히 많은 class를 통해 추상화를 하고, 이에 연장선으로 캡슐화, 상속 등을 하며 코드를 작성한다. 그래서 객체 지향하면 생각나는건 Class다.


그럼 객체 지향에서 객체는 Class인가? 당연히 아니다. 객체는 Object이지 않는가. 1장은 객체 지향의 주인공은 객체임을 말한다. 그리고 이 객체는 **역할, 책임, 협력**을 가진다. 흔한 비유를 해보자. 커피를 주문하는 손님, 주문을 받는 캐셔 그리고 커피를 만드는 바리스타가 있다. 손님은 커피를 주문하고, 캐셔는 바리스타에게 주문을 전달하고, 바리스타는 커피를 만든다. 다시 바리스타는 커피를 캐셔에게 전달하고, 캐셔는 손님에게 커피를 준다.

다시, 각자 커피를 주문, 전달, 제작등의 역할을 하고 커피 한잔이 주문되는데까지 협력한다.
즉, 손님 객체는 주문을 제작하고 캐셔는 전달, 바리스타는 제작할 것이다. 이는 각각의 역할이다. 또 이를 행할 책임이 있고, 이를 위해 협력한다. 협력을 위해서는 객체 간의 메세지를 전달한다. 손님 객체는 주문을 생성하고 캐셔 객체에게 메세지를 보낸다. 캐셔는 메세지를 받고 주문을 확인하고 바리스타 객체에게 메세지를 보낸다.

아무튼 이런 이야기는 우리가 흔히 아는 객체 지향의 비유이다. 결국 핵심은 다음과 같다.

  • 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
  • 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
  • 객체는 다른 객체와 협력한다. 협력 내에서 역할을 수행하며 역할은 관련된 책임의 집합이다.

    정말 못 썻지만, 객체는 현실과 달리 자율적이라는 점을 기억하자.

    2장. 이상한 나라의 객체

    상태, 행동, 식별자는 객체의 중요한 특징이다.
    상태는 동적이다. 예를 들어, 나라는 객체는 유일함이 분명하다. 과거의 나와 지금의 나는 상태가 다르다. (최근 살이 많이 쪘다..) 상태가 다르다고 해서 과거의 나와 지금의 내가 다르진 않다. 이렇듯 객체의 상태는 계속 변화할 수 있고, 상태가 같다고 같은 객체가 아니다! (도플갱어는 나와 다른 존재이다.)
    중요한건 객체는 다른 객체의 상태에 접근할 수 없다.객체는 자율적이고, 자신의 상태를 스스로 변경한다.

    어떻게 상태를 변경할까? 바로 행동을 통해서다. 앨리스는 음료수를 마셔서 키가 작아진다. 즉 앨리스 객체는 음료수를 마시는 행동을 통해 상태(키)를 변경한다. 추가로, 앨리스가 문을 통과하는 행동을 하기 위해서는 키가 작아야한다.
    1. 객체의 행동은 상태를 변화시키고
    2. 객체의 행동은 상태에 의존한다.

    그럼 앨리스가 문을 통과하기 위해서는 음료수를 마셔야한다.(키가 작아져야한다)
    앨리스 객체는 음료수 객체에게 요청(메세지)를 통해, 협력한다. 이 협력을 통해 앨리스는 상태가 변경되고 (키가 작아짐), 음료수 또한 변경된다 (양이 줄어듦). 객체는 유일하게 메세지를 통해 협력하고 그 결과로 자신의 상태를 스스로 변경한다.

    식별자는 id값이다. 대충 이해하니 넘어가자. (귀찮은게 아니다.)

    자 다시 중요한 내용이다. 우리는 Class에 집중하는 실수를 했다. 다음 실수는 뭘까?
    객체의 상태에 집중한다는 것이다. 객체를 설계할 때 어떤 상태를 가져야 하는지 생각한다. 그러나 행동보다 상태를 먼저 결정할 경우
    1. 캡슐화가 저해된다. 상태가 공용 인터페이스에 노출될 확률이 있다.
    2. 객체를 협력자가 아닌 섬으로 만든다. 상태를 먼저 고려하면 협력에서 멀어진다.
    3. 객체의 재사용성이 저하된다. 마찬가지로 협력을 못하기 때문이다.

    객체의 행동은 협력에 참여하는 유일한 방법이다.
    즉, 객체지향 설계는 어플리케이션에 필요한 협력을 생각하고, 필요한 행동을 생각하고, 이를 수행할 객체를 선택하는 방식으로 수행해야 한다. 이때 행동에 필요한 정보를 생각하게 되고, 필요한 상태가 결정되는 것이다.

    마치며

    다음 독서에서는 이를 주의하자.
  • 매일 조금씩 읽자.
  • 매일 조금씩 읽었으면, 매일 조금씩 기록하자.
  • 기록했다면 추가 공부를 찾아보자.
  • profile
    개발 꿈나무

    0개의 댓글