Activity와 Fragment 사이의 통신 방법에 대해 질문드립니다.

조회수 3278회

얼마 전까진 Fragment를 별 생각 없이 구현하다 최근 급 관심이 생겨 알아보던 중 몇 가지 궁금한 점이 있어 질문 드립니다.

질문 1.

일반적으로 Fragment는 독립적으로 구현하기 위해 Activity의 변수나 메소드 등에 접근하지 않도록 하는 것으로 알고 있습니다. 여기서 말하는 Activity란 바로 위의 부모Activity를 말하는건가요?

(Activity )mContext -> O
(AppCompatActivity) mContext -> O (모든 activity가 AppcompatActivity를 상속받는 앱)
(MainActivity) mContext -> X

저는 위의 내용으로 이해했는데 제대로 이해한게 맞나요? 그러면 딱히 여러 Activity에서 활용되지 않는 Fragment를 구현할 경우에는 굳이 위의 규칙을 지키지 않고 구현하는게 보통인가요?

질문 2.

위와 반대로 Activity에서 Fragment로 접근할 경우의 규칙이 있나요? 예를 들면 저는 지금까지 Fragment에 getter/setter를 구현하여 접근하였습니다. 이 방법이 옳은 방법인지 아닌지, 혹은 더 좋은 방법이 있는지 알려주세요.

감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Getter/Setter 를 이용해 직접 접근하는건 Activity 와 Fragment 사이에 의존성을 가지게 해서 별로 좋은 방법이 아닙니다.

    이런 경우 안드로이드 예제들에서는 보통 Interface 를 사용합니다.

    Activity 의 변동사항을 Fragment 가 알아야 할 일이 있으면 interface 를 만들고, Fragment 에서 해당 interface 를 구현하고, Activity 에서 호출을 해줍니다.

    Fragment 의 액션을 Activity 가 알아야 할 경우엔 반대로 interface 를 Activity 에 구현하고 Fragment 에서 interface 를 통해 Activity 에 전달해주면 되구요.

    Activity 와 Fragment 모두 여기저기에서 호출해서 사용 할 수 있도록 설계되어있기 때문에 어느 특정 Activity 나 Fragment 에 의존성을 가지게 되면 이후 유지보수도 어려워지게 되고 debugging 할때도 어디서 값을 변경했는지 알기 어려울 수 있습니다.

    Interface 를 사용하는 걸 추천합니다.

    +@ 다른 방법으로는 event bus 방식이 있는데 개인적으로는 추천하진 않습니다. (개발이 편하긴 하지만 코드 추척이나 debugging 이 훨씬 힘들어서..)

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)