안드로이드

[안드로이드] 유용한 라이브러리 - 버터나이프 (Butter knife)

부르스리 2017. 2. 2. 16:20
반응형


안드로이드 개발이 참 많이 편해졌다.


기능도 많아지고 편리한 라이브러리도 많아졌다.


웬만한건 직접 만들기 전에 검색이라도 한 번 해보는게 이득이다.


나보다 유능한 사람들이 편리하게 라이브러리화 시켜놓은 것들이 수두룩하니까..



오늘 편리한 라이브러리 하나 소개를 하고자 하는데


아는 사람은 많이들 아는 버터나이프라는 라이브러리다.


http://jakewharton.github.io/butterknife/



앱을 만든다고 하면 프로젝트를 생성하고 액티비티를 만든 다음에


아마 다음과 같은 코드를 만들게 될 것이다.


이건 어느 액티비티에나 거의 다 있고 반복적으로 사용하는 코드들이다.


액티비티 뿐 아니고 프래그먼트든 어디든 UI 가 있다면 거의 들어가는 코드들이다.


public class MainActivity extends FragmentActivity implements View.OnClickListener {

private FloatingActionButton fab, fab_setting, fab_trash, fab_tag, fab_memo;
private FloatingActionButton fab_new_memo;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(this);
fab_setting = (FloatingActionButton) findViewById(R.id.fab_setting);
fab_setting.setOnClickListener(this);
fab_trash = (FloatingActionButton) findViewById(R.id.fab_trash);
fab_trash.setOnClickListener(this);
fab_tag = (FloatingActionButton) findViewById(R.id.fab_tag);
fab_tag.setOnClickListener(this);
fab_memo = (FloatingActionButton) findViewById(R.id.fab_memo);
fab_memo.setOnClickListener(this);
fab_new_memo = (FloatingActionButton) findViewById(R.id.fab_new_memo);
fab_new_memo.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.fab:
toggleMenu();
break;
case R.id.fab_setting:
changeFragment(3);
break;
case R.id.fab_trash:
changeFragment(2);
break;
case R.id.fab_tag:
changeFragment(1);
break;
case R.id.fab_memo:
changeFragment(0);
break;
case R.id.fab_new_memo:
                newMemo();
break;
}
}


그런데 이러한 코드량만 늘어나는 반복적이고 소모적인 코드를 


자바의 골뱅이 주석(Annotation) 을 이용하여 깔끔하고 편리하게 


정리해 주는 라이브러리가 바로 버터나이프(Butter Knife)인 것이다.


저 위 주소에 가보면 소개부터 사용법, 빌드, 라이선스까지 잘 나와있다.


한번 가서 읽어보고 사용해 보길 권장한다.


암튼...


버튼이든 뭐든 일단 변수를 선언하고, findView 로 찾아서 변수에 대입해주고,


대입한 변수를 가지고 onClick 이벤트를 걸어주고


액티비티는 onClick 을 implement 해주고


거기서 클릭한 view 에 따라 분기를 해주고...


이런 노가다들을 좀 깔끔하게 정리를 해준다고 보면 되는데

(물론 그게 다는 아니다. 대표적인 기능을 예로 드는 것이다.)


버터나이프를 적용하면 아래와 같이 바뀐다.


public class MainActivity extends FragmentActivity {

@BindView(R.id.fab) FloatingActionButton fab;
@BindView(R.id.fab_setting) FloatingActionButton fab_setting;
@BindView(R.id.fab_trash) FloatingActionButton fab_trash;
@BindView(R.id.fab_tag) FloatingActionButton fab_tag;
@BindView(R.id.fab_memo) FloatingActionButton fab_memo;
@BindView(R.id.fab_new_memo) FloatingActionButton fab_new_memo;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}

@OnClick(R.id.fab)
void toggleMenu(){

}


@OnClick({R.id.fab_setting,R.id.fab_trash,R.id.fab_tag,R.id.fab_memo})

void fragmentChange(View view){

....

}


어떤가....사용성도 가독성도 훌륭해지지 않았는가!


클릭 이벤트만 있고 버튼 자체가 어디에 사용되지 않는다면 @BindView 조차 필요없다.


그냥 바로 @OnClick 어노테이션만 붙이면 클릭 리스너가 지정이 되는 것이다.


다만 oncreate 에서 빨간색으로 박스 쳐 놓은 저 코드를 꼭 넣어줘야 한다.


저거 깜빡하면 앱 죽어버린다. 깜빡하기 쉬우니 주의하자.



그럼 빌드에 어떻게 포함 시키느냐...


안드로이드 스튜디오를 쓴다면 디펜던시에 두줄만 추가하면 된다.


compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'

저 위 주소링크로 들어가서 확인해보자. 어떤 기능들이 제공되는지


사용법은 어떻게 되는지.


간단하게 삽입하고 간단하게 사용할 수 있으니 지금이라도 사용해보자.




반응형