KTRJB / The-Essence-Of-Object-Orientation-Study

꿍톤루주 객체지향의 사실과 오해 스터디
5 stars 1 forks source link

[Judy] 메시지와 결합도 #17

Closed Judy-999 closed 1 year ago

Judy-999 commented 1 year ago
  1. 객체지향 프로그래밍 언어의 핵심적인 특징은 절차적인 언어와 다르게 메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다는 점이라고 합니다. 실행 시간에 메서드를 선택한다는건 어떤 경우이고, 어떤 코드의 형태인걸까요? (149p)

  2. 메시지는 송신자와 수신자 사이의 결합도를 낮춘다고 합니다. 메시지를 보내는 건 송신자와 수신자가 연결되는 것이라 생각했는데 왜 결합도를 낯추게 되는 걸까요? (153p)

  3. 공용 인터페이스는 메시지로 구성되어 있다고 이해했습니다. (167p) 이후 뒤에 최소 인터페이스를 가지는게 좋다고 나와 있는데 결과적으로 전체적인 설계에서 메시지를 적게 가지도록 하는 것이 좋을까요?

Groot-94 commented 1 year ago

1. 객체지향 프로그래밍 언어의 핵심적인 특징은 절차적인 언어와 다르게 메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다는 점이라고 합니다. 실행 시간에 메서드를 선택한다는건 어떤 경우이고, 어떤 코드의 형태인걸까요? (149p)

다형성을 이용해서 메시지를 수신하는 객체가 실행 시간에 정해지면 그 객체가 실행하게 되는 메서드 자체가 달라진다고 생각합니다.

protocol iOSDeveloper {
    func study()
}

struct 그루트: iOSDeveloper {
    func study() {
        print("악")
    }
}

struct 수꿍: iOSDeveloper {
    func study() {
        print("야호 너무 재밌어")
    }
}

struct 야곰 {
    func 공부시킨다(iOS배우는사람: iOSDeveloper) {
        iOS배우는사람.study()
    }
}

2. 메시지는 송신자와 수신자 사이의 결합도를 낮춘다고 합니다. 메시지를 보내는 건 송신자와 수신자가 연결되는 것이라 생각했는데 왜 결합도를 낯추게 되는 걸까요? (153p)

실제로 다른 객체 그 자체와 연결되는 방법이 아니라 기능을 수행할 수 있는 객체들의 집합(다형성)에 메시지를 보내면, 송신자는 수신자를 모르는 상태로 메시지를 보내고 결과를 전달받을 수 있습니다. 이 부분에서 결합도가 낮아진다고 생각합니다.

struct 야곰 {
    func 공부시킨다(iOS배우는사람: iOS) {
        iOS배우는사람.study()
    }
}

3. 공용 인터페이스는 메시지로 구성되어 있다고 이해했습니다. (167p) 이후 뒤에 최소 인터페이스를 가지는게 좋다고 나와 있는데 결과적으로 전체적인 설계에서 메시지를 적게 가지도록 하는 것이 좋을까요?

객체가 수신하는 메시지가 많다는 의미는 책임이 많다는 의미로 생각이 됩니다. 객체에 책임이 많아지면 객체가 처리해야 하는 일이 많아지기 때문에 응집도가 낮아지게 됩니다. 그리고 기본 원칙인 단일책임원칙을 생각해봤을 때 최소 인터페이스를 가지면 유지보수 용이성나 재사용성이 높아지게 될 것 같습니다.