MyCloud

[안드로이드] 버튼만드는 2가지 방법 비교 본문

Programming/Android

[안드로이드] 버튼만드는 2가지 방법 비교

Swalloow 2016. 4. 3. 04:57


안드로이드에서 버튼 만드는 방법에는 2가지가 있습니다.

첫번째는 xml의 onClick 속성을 통해 함수를 만드는 방법

두번째는 onClickListener 인터페이스의 onClick 함수를 오버라이딩해서 만드는 방법입니다.

하나씩 만들어보고 어떤 차이점이 있는지 비교해보겠습니다. 








xml의 onClick 속성을 통해 만드는 방법


먼저 xml의 onClick 속성을 통해 만드는 방법입니다.


1. 

먼저 xml 파일의 Design 탭을 누르고 Widget 중에서 Button을 클릭합니다.

다음 원하는 위치로 커서를 옮기면 위와 같이 버튼이 생성됩니다.



2. 

다음 우측의 Properties 항목중에서 onClick 속성을 누른 후 원하는 함수 이름을 적어줍니다.


public class MainActivity extends AppCompatActivity {

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

public void onButtonClick(View view) {
Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
}

3. 

MainActivity.java 파일로 돌아가서 아까 만들었던 함수를 작성합니다.

그리고 클릭 이벤트에 대한 처리를 해주면 끝.

여기서는 Toast 메세지를 띄우는 것으로 처리했습니다.








onClickListener 인터페이스를 통해 만드는 방법


다음은 onClickListener 인터페이스를 통해 만드는 방법입니다.



1. 
먼저 아까와 같이 버튼을 만들어줍니다.

public class MainActivity extends AppCompatActivity {

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

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
});
}
}

2. 

Button 객체를 생성하고 findViewById 를 통해 xml 와 바인딩 해줍니다.

다음으로 setOnClickListener를 통해 onClick 함수를 오버라이딩합니다.

onClick 함수 내에 원하는 이벤트 처리를 하면 됩니다.








두 가지 방식에 대한 비교


onClick 속성은 XML 레이아웃과 onClick 함수를 바인딩 시켜준 겁니다.

android:onClick 속성은 초기부터 있었던건 아니며 클릭 이벤트를 쉽게 다루기 위해 생긴 속성이라고 합니다.

API 버전 4부터 생긴 속성이라 이전 버전에서는 호환이 안된다는 단점이 있습니다.

하지만 버전 4면 아주 오래전이기 때문에 큰 지장은 없을 것 같습니다...


우선 성능을 비교하자면 차이가 거의 없습니다.

다음으로 4개의 버튼이 한 가지 기능만 수행한다고 가정했을 때,

public class MainActivity extends AppCompatActivity {

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

ButtonClickListener buttonClickListener = null;
Button button = (Button) findViewById(R.id.button);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
Button button4 = (Button) findViewById(R.id.button4);

button.setOnClickListener(buttonClickListener);
button2.setOnClickListener(buttonClickListener);
button3.setOnClickListener(buttonClickListener);
button4.setOnClickListener(buttonClickListener);
}

class ButtonClickListener implements View.OnClickListener {

@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "ButtonClicked", Toast.LENGTH_SHORT).show();
}
}
}

OnClickListener의 경우 각 버튼에 리스너를 달아주거나 아예 Listener 클래스를 만들어서 사용하는 방법이 있습니다.

각 버튼을 xml에 바인딩하는 코드가 지저분하다면 ButterKnife 라이브러리 사용을 추천합니다.


public class MainActivity extends AppCompatActivity {

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

public void onButtonClick(View view) {
Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
}

반면에 onClick 속성을 사용하면 같은 이름의 함수에 바인딩시켜 위와 같이 편하게 사용할 수 있습니다.


둘의 가장 큰 차이점은 인터페이스 사용에 있습니다.

onClickListener는 View에 대한 클릭 이벤트를 처리해주는 인터페이스인 만큼 여러 함수를 오버라이딩 할 수 있습니다.

따라서 특별히 사용해야 하는 함수가 없는 경우 좀 더 가독성이 좋고 

유지보수가 용이한 쪽으로 사용하면 될 것 같습니다.


+ 추가 

대부분 큰 프로젝트에서는 단순히 하나의 뷰를 사용하는게 아니라 

Fragment, RecyclerView등 다양한 뷰를 사용합니다.

이 경우 직접 xml에 연결하는 방법이 제한되기 때문에 OnClickListener를 사용하는 것이 더 좋습니다.


참고 : http://stackoverflow.com/questions/21319996/android-onclick-in-xml-vs-onclicklistener



Comments