01. 협력하는 객체들의 공동체

리뷰기간: 2024년 10월 14일 → 2024년 10월 20일
태그: 1회독, 작성완료

✨ 내용 요약

  • 일상생활에서 찾은 객체지향적 요소

  • 손님, 캐시어, 바리스타는 각각 역할 에 해당하며 각 역할은 책임 을 가져야 한다.

  • 요청과 응답의 상호작용으로 객체지향적 설계를 설명할 수 있다.

  • 캐시어는 1명일수도, 여러명일수도 있다 마찬가지로 바리스타도 1명일수도 여러명일수도 있다

    ⇒ 반드시 하나의 객체 만 동일한 역할책임지는것은 아니다.

  • 하나의 객체가 여러일을 수행 할 수 있다

    • 캐시어가 주문을 받고, 동시에 직접 커피를 제조해서 손님에게 전달할 수 있다 ⇒ 대체가능성
  • 책임을 수행하는 방법은 각 객체가 자율적으로 선택할 수 있다

    • 예를들어, 아이스아메리카노를 주문할때, 손님이 직접 “얼음을 먼저 넣으시구요 물을 반만 채운 다음 에스프레소를 넣고 나머지 물을 채워주세요” 와 같은 주문을 하지 않아도, 바리스타 스스로 얼음을 먼저 채울수도, 물을 먼저 채울수도, 에스프레소를 먼저 채울수 도 있다.
  • 역할, 책임, 그리고 협력

    • 각 객체는 메세지를 통해 소통하며, 메세지의 요구조건을 수행하는 것을 메서드라고 표현할 수 있다.
    • 객체들은 상호 협력적인 관계를 가져야한다, 또한 특정 역할을 수행하는 객체는 역할에 대한 책임을 가져야한다.
  • 객체의 자율성

    • 객체들은 서로 무엇을 수행하는지는 알수 있으나 어떻게 수행하는지는 몰라야한다.
  • 객체지향 ≠ 클래스

    • 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과
  • 객체지향의 본질 Point!

    1. 상호작용하는 자율적인 객체들의 공동체로 시스템을 바라보고, 객체를 이용해 시스템을 분할
    2. 자율적인 객체란 상태행위를 포함해 스스로 자기자신을 책임지는 객체를 의미
    3. 객체는 다른 객체와 협력하며, 각 객체는 협력 내에서 정해진 역할책임을 갖고 수행해야한다
    4. 객체들간의 협력은 메세지를 통해 이루어지고, 메세지를 수신한 객체는 메세지 처리를 위해 적합한 메서드를 자율적으로 선택한다.

📝 감상 및 리뷰

  • 객체지향 = 클래스 로 인식했던 과거를 반성하게 됨
  • 객체지향에 대한 이론적 지식이 잡혀있지 않은 상태로 개발을 해왔으나, 왜 그러한 구조로 개발을 수행되어야 하는지 이해가 되었음

🛠️ 실무/프로젝트 적용

  • 대략적인 공부

      class Calcurator {
          let a: Int
          let b: Int
    
          init(a: Int, b: Int) {
              self.a = a
              self.b = b
          }
    
          func add() -> Int {
              return a + b
          }
    
          func divide() -> Double {
              return a << b
          }
    
          func minus() -> Int {
              return ((a * 3) - (b * 3)) / 3
          }
      }
    
      class MainClass {
          let cal = Calcurator(a: 1, b: 3)
          print(cal.minus) // -2
      }

    코드를 보면, MainClass는 a-b 를 수행한다고 생각 할 수 있지만, 실제로 minus 함수를 보면 각 수에 3을 곱하고 뺀다음 3으로 나눈다, 하지만 아무 문제없다.

    → MainClass 입장에서 cal.minus는 a 에서 b 값을 뺀다(무엇) 는 것은 알수 있지만 어떻게 계산하는지는 모른다 ⇒ 객체의 자율성

+ Recent posts