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


얼마 전까진 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를 구현하여 접근하였습니다. 이 방법이 옳은 방법인지 아닌지, 혹은 더 좋은 방법이 있는지 알려주세요.

감사합니다.

  • 2016년 11월 11일에 작성됨
    안드로이드 개발 관련

조회수 106


1 답변


좋아요
2
싫어요
채택취소하기

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 이 훨씬 힘들어서..)

  • 2016년 11월 16일에 작성됨
    노바입니다. 개발 잘하고 싶어요.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close