KVC와 KVO의 활용 및 목적

4 답변 글타래를 보이고 있습니다
  • 글쓴이
    • newoo
      참가자
      • 글작성 : 2
      • 답글작성 : 4

      최근에 KVC와 KVO에 대해서 검색을 했습니다.

      각각에 대한 개념이나 예시 같은 것은 많이 나와있지만
      왜 필요한지, 어떤 측면에서 사용되는지 잘 모르겠습니다.

      답변부탁드립니다.

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      질문을 보는사람 입장에서는 많은 튜토리얼과 위키 등에서 왜 필요한지, 어떤 측면에서 사용되는지 설명 되어있을텐데 이 질문은 뭘 원하는걸까?라는 의문이 생기네요.
      어떤 글을 보고, 왜 질문을 남기는지 이해할 수 없으니 답변이 어렵네요.

      질문에도 요령이 필요할 것 같습니다.
      그것을 찾아봤을 때 무엇을 배웠고, 어떤 점이 차이가 있다는 것을 알았는데, 각각의 개념에서 어떤 포인트가 잘 이해가 안가는지 질문을 해야지 답변을 드릴 수 있을 것 같아요.
      무작정 모든것을 설명받으려고 하면 여기에 하루 종일 정성스럽게 글을 써서 답변줄 사람은 많지 않을 것 같습니다.
      질문을 조금더 상세하고 명확하게 해보길 권합니다.

    • newoo
      참가자
      • 글작성 : 2
      • 답글작성 : 4

      질문이 초안이 너무 장황해서 길어지다보니… 줄인다는 것이 너무 줄여서… 질문의 내용이 부적절했습니다.
      죄송합니다.

      다시 정리해서 올립니다.

      일단 제가 이해하기로는
      KVC는 특정 문자열을 이용해 프로퍼티에 접근 가능하게 해주는 기능이고
      KVO는 객체의 프로퍼티가 변경되는 것을 알고 싶을 때 사용하는 기능이라고 알고 있습니다.

      사실 사용 목적이 위의 내용이기는 합니다만,

      하지만, 좀 더 구체적으로 무슨 목적으로 사용되는 기능인지에 대해서 좀 더 의문이 있었습니다.
      다시말해, 실제 프로젝트에서 어떻게 쓰일지 감이 잘 안 왔습니다.

      KVC의 경우 프로퍼티의 접근을 특정 문자열로 굳이 해야하나라는 생각이 있었고,

      KVO의 경우 [객체가 변경된다]라는 특정 조건 상황이 발생했을 때 유용한 것인데,

      만약에 UISwitch가 on/off 상태를 담아두는 객체X가 있다고 가정하겠습니다.
      X의 상태변화에 따라 화면 전체의 View가 변화한다고 했을 때 (예를 들어 라이트모드/다크모드 전환)

      개인적으로는 KVO를 사용하지 않고도 구현가능할 것이라 생각됩니다.

      해당 기능이 개발이 되었다면 명확히 만든 이유나 목적이 있을 것이라 생각했습니다.
      다시말해, 이 기능을 개발하기 전에 어떤 문제점이나 불편한 점이 존재했을 것이라 생각했습니다.
      야곰님 답변을 보니 아직 자료를 덜 찾아본 것 같습니다;;

      좀 더 공부한 뒤에 다시 한 번 생각 정리를 해보겠습니다.
      부족한 질문에도 답변작성해주셔서 감사합니다.

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      KVC의 활용 장점은 좀 더 유연한 구현이 가능하다는데 있습니다.
      예를 들어 어떤 객체의 특정 프로퍼티의 값을 가져오고 싶다고 할 때, 코드를 작성하는 시점에는 어떤 프로퍼티의 값을 가져오고 싶은지 정하지 않고 프로그램 실행 중에 원하는 프로퍼티의 값을 가져오게 설계하고 싶다면 KVC가 매우 유용할 것입니다. Objective-C의 Dynamic Dispatch 특성으로 인해 KVC를 손쉽게 구현할 수 있습니다.

      또, 말씀하신 것처럼 KVO의 대체제는 많습니다. 하지만 유용하게 쓰일 수 있는 상황이 있는거지요. 항상 KVO가 좋다는 것은 아닙니다.
      언제나 그렇듯 상황에 따라 유용한 디자인 패턴은 다양합니다.
      KVO에 대한 설명은 이 링크를 참고해보세요 🙂

    • newoo
      참가자
      • 글작성 : 2
      • 답글작성 : 4

      천절한 답변 감사합니다

4 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom