-
(5분 읽기) BaseFragment? 그게 뭐야? 🤔Android 개발/아키텍처 2025. 3. 17. 22:32
안녕하세요, 개발 입문자 여러분! 👋
혹시 Fragment를 만들 때 매번 비슷한 코드 복붙하다가 질렸던 경험 없나요? 🥲
"아, 또 onCreateView() 만들어야 해?" 같은 생각, 한 번쯤 해봤을 거예요.오늘은 BaseFragment라는 걸 사용해서 얼마나 편해질 수 있는지
쉽고 친절하게 알려드릴게요! 🛠️✨
🏗️ BaseFragment 없이 Fragment 만들기 (그냥 하던 대로...)
먼저, BaseFragment 없이 일반적으로 Fragment를 만드는 코드를 볼까요?
📌 HomeFragment.kt
class HomeFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return inflater.inflate(R.layout.fragment_home, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val button = view.findViewById<Button>(R.id.btnNext) button.setOnClickListener { findNavController().navigate(R.id.action_homeFragment_to_nextFragment) } } }
📌 ProfileFragment.kt
class ProfileFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return inflater.inflate(R.layout.fragment_profile, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val button = view.findViewById<Button>(R.id.btnEditProfile) button.setOnClickListener { findNavController().navigate(R.id.action_profileFragment_to_editFragment) } } }
🤯 문제점
✅ onCreateView()에서 레이아웃을 불러오는 코드가 똑같음
✅ onViewCreated()에서 버튼 리스너 등록하는 코드도 비슷함
✅ 여러 Fragment가 많아질수록 같은 코드를 여러 번 복붙해야 함
✅ 유지보수할 때 너무 불편함 😵💫그럼 이걸 어떻게 해결할까요? 🤔
💡 BaseFragment 도입하기 (이제부터 개꿀! 🍯)
BaseFragment는 쉽게 말하면 공통적인 코드를 따로 빼서 정리해두는 부모 Fragment예요.
모든 Fragment가 이걸 상속받으면 중복 코드 없이 깔끔하게 유지할 수 있죠!✅ BaseFragment.kt 만들기
abstract class BaseFragment(@LayoutRes private val layoutId: Int) : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return inflater.inflate(layoutId, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setupView(view) setupListeners() } abstract fun setupView(view: View) abstract fun setupListeners() }
이제 각각의 Fragment는 그냥 이걸 상속받으면 됩니다! 🤩
📌 ProfileFragment.kt (개깔끔 ✨)
class ProfileFragment : BaseFragment(R.layout.fragment_profile) { override fun setupView(view: View) { // 프로필 화면 초기화 로직 } override fun setupListeners() { view.findViewById<Button>(R.id.btnEditProfile).setOnClickListener { findNavController().navigate(R.id.action_profileFragment_to_editFragment) } } }
😍 BaseFragment 적용 후 달라진 점
✅ onCreateView()에서 레이아웃을 설정하는 코드가 사라짐
✅ onViewCreated()에서 버튼 리스너 설정하는 부분이 짧아짐
✅ 유지보수가 훨씬 쉬워짐!
🏗️ BaseFragment 확장하기
이제 여기서 한 단계 더 나아가서,
ViewBinding까지 자동으로 적용할 수 있는 BaseFragment를 만들어볼까요? 🚀abstract class BaseFragment<VB : ViewBinding>( private val bindingInflater: (LayoutInflater) -> VB ) : Fragment() { private var _binding: VB? = null protected val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = bindingInflater(inflater) return binding.root } override fun onDestroyView() { super.onDestroyView() _binding = null } }
이제 각 Fragment에서 ViewBinding을 편하게 사용할 수 있습니다!
📌 HomeFragment.kt(초깔끔)
class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::inflate) { override fun setupView() { binding.textViewTitle.text = "홈 화면입니다!" } override fun setupListeners() { binding.btnNext.setOnClickListener { findNavController().navigate(R.id.action_homeFragment_to_nextFragment) } } }
🎯 정리
✅ BaseFragment를 만들기 전과 후의 차이점
Before (BaseFragment 없음) After (BaseFragment 적용) 코드 중복 많음 (매번 같은 코드 반복) 없음 (BaseFragment에서 공통 처리) 유지보수 어려움 (모든 Fragment 수정 필요) 쉬움 (BaseFragment만 수정하면 됨) 확장성 낮음 높음 (ViewBinding, 로깅 추가 가능)
📌 결론
👉 BaseFragment 사용하면 개발이 훨씬 깔끔해짐!
👉 중복 코드 줄이고 유지보수도 편하게 가능!
👉 특히 ViewBinding 적용하면 개꿀! 🍯이제 여러분도 프로젝트에 BaseFragment를 적용해 보세요!
초보 때부터 깔끔한 코드 습관을 들이면 나중에 훨씬 편해집니다! 💪🔥오늘도 즐코하세요! 🚀
'Android 개발 > 아키텍처' 카테고리의 다른 글
(1분 읽기) MVVM은 아키텍처 패턴일까? 🚀 (0) 2025.03.04 (5분 읽기) MVVM 패턴 쉽게 정리! (초보 개발자도 이해할 수 있게✨) (0) 2025.03.04