본문 바로가기
카테고리 없음

객체지향의 사실과 오해 4장 정리

by 킴도TV 2022. 5. 23.

인터페이스, 즉 스위프트의 Protocol의 중요성.

책임-주도 설계(Responsibility-Driven Design)

설계를 해서 internal 메소드로 활용될, 즉 협력에 필요한 메소드들을 추린다. 가능한 한 잘 추려서 해당 internal 메소드를 선언한 protocol 타입을 만든다. 구체적인 클래스들은 해당 프로토콜 타입을 채택함으로써 커플링을 줄인다. 이렇게 설계 -> 프로토콜 구현 -> 클래스를 구현을 차례대로 한다면 이후에 해당 프로토콜의 역할을 채택한 필요한 다른 클래스로 교체해야 하는 상황이 올 때 코드를 유지보수 하기 쉬워진다.

Design Pattern

  • Delegate Pattern
  • => 보통 하위 객체(상위 객체가 가지고 있는 멤버 객체)가 상위 객체(하위 객체를 프로퍼티로 가지고 있는 객체)를 알아야 할 때 자주 쓰는 패턴입니다. Delegate 패턴은 하위 객체가 상위 객체를 알아야 하는 경우에만 써야 하는 패턴이고, Delegate 패턴 자체가 커플링을 늘리는 행위라 쓰지 않아도 될 경우에 쓰는 것은 옳지 않습니다. 가령 자신의 상위 객체인 ViewController를 weak var 로 가지고 있는 경우는 좋지 않은 케이스 입니다. ViewController를 weak로 가지고 있는 것 대신 다른 방법은 없는지 고민해야 합니다. 예전에 관련해서 받았던 코멘트.

NOTE: 상위 객체와 하위 객체의 관계


class 상위_객체 {
    let a = 하위_객체()
}

class 하위_객체 {

}

  • Composite pattern
    • OOP 에서 컴포지트(Composite)패턴은 하나 이상의 유사한 객체를 구성으로 설계된 객체로 모두 유사한 기능을 나타낸다.
    • 간단히 말해 한 화면안에 여러 VC가 있는 것(RIBS 아키텍처로 얘기하면 하나의 RIB안에 여러 RIB이 있는 것)을 Composite Pattern이라고 말할 수 있다.

NOTE: Composite Pattern UML

TDD(Test-Driven Development)

  • TDD는 테스트 가능한 구조를 만들수 있는 가장 강력한 프랙티스이다.
  • TDD를 하려면 의존성 역전 원칙(Dependency Inversion Principle) 사용은 필수이다.
  • TDD를 하려면 가짜 객체가 필요한 경우가 있다.
    • Mock, Stub, Spy, Fake, Dummy
  • 역할, 책임, 협력에 집중하고 객체지향의 원칙을 적용하려는 깊이 있는 고민과 노력을 통해서만 테스트-주도 개발의 혜택을 누릴 수 있다.