JakeWharton / butterknife, 더이상 사용 하지 않는 이유

결론부터 말씀드리면, Butter Knife는 현재 공식적으로 개발이 중단(Deprecated)되었으며, 새로운 프로젝트에서는 사용을 권장하지 않습니다. 물론 기존 프로젝트에서는 여전히 동작하지만, 더 이상 유지보수나 업데이트가 지원되지 않습니다.

왜 더 이상 사용하지 않을까요?

Butter Knife의 핵심 기능은 findViewById setOnClickListener 같은 반복적인 코드를 어노테이션(@BindView, @OnClick)으로 대체하여 보일러플레이트 코드를 줄여주는 것이었습니다.

하지만 안드로이드 생태계가 발전하면서, 이 기능을 공식적으로, 그리고 더 효율적으로 대체하는 기술들이 등장했습니다.

1. View Binding (뷰 바인딩) – 공식 대체 기술

  • 현재 안드로이드에서 가장 권장되는 방식입니다.
  • 작동 원리: Gradle 플러그인이 레이아웃 XML 파일(activity_main.xml 등)을 기반으로 각 뷰에 직접 접근할 수 있는 바인딩 클래스를 자동으로 생성해 줍니다.
  • 장점:
    • 컴파일 타임 안전성(Compile-time safety): 존재하지 않는 ID를 참조하면 컴파일 시점에 에러를 잡아줍니다. (Butter Knife의 런타임 크래시 위험이 없음)
    • 타입 안전성(Type safety): TextView Button으로 잘못 캐스팅할 위험이 없습니다.
    • 성능: 어노테이션 프로세싱을 사용하지 않아 빌드 속도가 Butter Knife보다 빠릅니다.
    • Google 공식 지원: 안드로이드 스튜디오에 완벽하게 통합되어 있습니다.
  • 사용 예시:
    activity_main.xml TextView Button이 있다면 (@+id/textView, @+id/button)

2. Data Binding (데이터 바인딩)

  • View Binding보다 더 강력한 기능을 제공합니다. 뷰와 데이터를 XML 레이아웃 파일에 직접 결합(bind)할 수 있습니다.
  • android:text="@{viewModel.userName}" 와 같이 XML에서 직접 데이터 모델의 값을 참조할 수 있어, 액티비티/프래그먼트의 코드를 더욱 줄여줍니다.
  • View Binding보다 학습 곡선이 조금 더 높지만, MVVM 아키텍처와 함께 사용할 때 매우 강력합니다.

3. Kotlin Synthetics (개발 중단됨)

  • 과거 Kotlin을 사용하는 안드로이드 개발자들이 많이 사용했던 기능입니다. 뷰의 ID를 코드에서 직접 프로퍼티처럼 사용할 수 있게 해줬습니다.
  • 하지만 몇 가지 문제점(다른 레이아웃에 동일 ID가 있을 경우 혼동 등)으로 인해 Google은 이 기능의 사용을 중단하고 View Binding으로의 전환을 공식적으로 권고했습니다.

Jake Wharton의 공식 발표

Butter Knife의 제작자인 Jake Wharton 자신도 2019년에 Butter Knife의 개발을 중단하고 View Binding을 사용할 것을 권장했습니다.

“Okay, but what should I use instead?
Use view binding. It’s great.” – Jake Wharton

참고: Butter Knife 공식 GitHub 페이지

결론

구분 Butter Knife View Binding
현재 상태 개발 중단 (Deprecated) 공식 권장
안전성 런타임 에러 가능성 컴파일 타임 안전
성능 어노테이션 프로세싱으로 빌드 속도 저하 더 빠른 빌드 속도
공식 지원 없음 Google 공식 지원
권장 사항 새 프로젝트에 절대 사용 금지. 기존 프로젝트는 점진적으로 마이그레이션. 모든 새 프로젝트에 사용 권장.

따라서, 지금 안드로이드 개발을 하신다면 Butter Knife는 잊으시고, View Binding을 적극적으로 배우고 사용하시는 것이 올바른 방향입니다. View Binding은 설정도 간단하고 사용법도 직관적이어서 금방 익숙해지실 수 있을 겁니다.