프로토콜, POP와 OOP, Delegate(retain), NotificationCenter

Groot·2023년 1월 26일
0

TIL

목록 보기
126/153
post-thumbnail
post-custom-banner

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 프로토콜이란 무엇인가

  • 특정 작업이나 기능에 적합한 메서드, 속성 및 기타 요구 사항을 간단하게 정리할 수 있는 타입
  • 실제로 타입이나 메서드를 정의하지는 않고, 프로토콜을 채택하는 타입이 지켜야할 규칙을 가지고 있다.
  • 상속이 불가능한 구조체 같은 경우 프로토콜을 통해 다형성을 주입할 수 있다.
  • 상속은 여러개가 불가능 하지만, 프로토콜은 여러개 채택할 수 있다.
  • 프로토콜에서는 프로퍼티가 저장프로퍼티인지 연산프로퍼티인지 명시하지 않고, 이름과 타입 그리고 gettable, settable한지 명시하고, var로 선언해야 한다.
  • Extension을 사용해서 기본 구현을 할 수 있다.
    • 기본 구현을 하면 프로토콜을 채택해도 메서드를 구현하지 않아도 사용할 수 있다.

📌 POP와 OOP의 차이점

  • POP와 OOP의 가장 큰 차이점은 상속과 프로토콜이다.
    • 구조체, 클래스, 열거형 등 구조화된 타입 중에 상속은 클래스 타입에서만 가능
    • 기능의 모듈화가 더욱 명확해진다.
      • 클래스는 다중상속이 불가능하기 때문에 여러가지 기능을 사용하기 위해서 다시 구현해줘야 했지만, 프로토콜은 다중채택이 가능하다.

📌 Delegate란 무엇인가, retain이 되는지 안되는지 그 이유

  • 대리자 패턴이라는 개념으로 특정 객체가 내부에서 메서드를 호출할 때, 그 메서드의 실제 동작은 대리자 객체에서 실행되는 패턴.
  • 위임된 책임을 캡슐화하는 프로토콜로 구현하고 대리자는 그 프로토콜을 채택하는 방법으로 위임해야 하는 행동을 전달한다.
  • 대리자 객체와 요청하는 객체가 서로를 참조하기 때문에 Retain이 일어난다고 볼 수 있습니다.

📍 retain 해결방법

🔗 weak

  • weak은 말 그대로 약한 참조이며, A와 B가 서로를 참조 할 때 A 인스턴스의 수명이 더 짧아 먼저 할당해제할 수 있을 때 B가 A를 weak 로 선언한다.
  • 참조하는 인스턴스가 메모리에서 해제되면 자동으로 weak 참조한 인스턴스에 nil을 할당한다.
    • 런타임에 값이 nil로 변경될 수 있기 때문에 weak 참조 인스턴스는 항상 Optional과 var로 선언해야 한다.

🔗 unowned

  • 다른 인스턴스의 수명과 동일하거나, unowned로 선언된 프로퍼티의 수명이 더 긴 경우에만 사용
  • let으로도 선언 가능

📌 NotificationCenter 동작 방식과 활용 방안

  • NotificationCenter 싱글톤 객체를 통해 각 객체들이 알림을 보내고 받는 방식으로 알림을 보내는 객체와 받는 객체들은 서로에 대해 모르는 상태.
  • 활용 방안은 특정 데이터를 다중으로 전달해야 하는 상황에서 사용할 수 있을것 같다.
  • 하지만, 데이터의 전달을 어디로 보내고 어디서 받는지 직접 코드를 통해 확인해야 하기 때문에 컴파일시 추적이 어려움이 있을 수 있다.
  • Delegate Pattern이 지정된 객체와만 상호작용할 수 있는 반면 NotificationCenter는 어플리케이션 어느 곳에서, 어느 객체와도 상호작용을 할 수있다.
profile
I Am Groot
post-custom-banner

0개의 댓글