Developer MJ Story

[Android/basic] 가독성은 높이고, 수정을 쉽게 할 수 있는 Android Button event 등록 본문

Software/Android

[Android/basic] 가독성은 높이고, 수정을 쉽게 할 수 있는 Android Button event 등록

집근처 2014. 7. 15. 09:45
반응형

Android로 개발 하다 보면 ui component들로부터 event를 받아 처리하는 기능을 자주 사용하게 됩니다.

어떤 방식으로 구현하던지 동작만 잘하면 되기는 하지만, 기왕이면 다홍치마라는 말이 있습니다.

SW를 구현할 때도 기왕이면 가독성을 높이고, 가독성이 높은 소스는 개발자가 나중에 수정도 쉽게 할 수 있다는 의미 입니다.

규모가 큰 Project 는 혼자 만 개발하는 것이 아니기 때문에 가독성과 소수 수정사항 반영이 쉬워야 합니다.

그래서 이번에는 android에서 보다 깔끔하고, 가독성이 높게(극히 주관적) Button event를 등록 하는 방법에 대해 설명해 드리겠습니다.

 

기존에는 아래와 같이 oncreate()에 다 등록하는 방식을 사용했습니다.

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

      

        Button mStartBtn = (Button)findViewById(R.id.start_btn);

        mStartBtn.setOnClickListener(new View.OnClickListener() {            

            @Override

            public void onClick(View v) {

                // TODO Auto-generated method stub

                

            }

        });

    }

 

뭐 저렇게 해도 문제는 없습니다.

버튼이 몇 개 없고, onClick event에서 처리해야 할 내용이 적다면 onCreate에서 처리해도 문제가 없을 것 같습니다.

그런데 하나의 함수는 하나의 기능을 수행해야 가독성과 수정사항 반영이 쉽다는 이론을 생각해보면 문제가 있는 것 같습니다.

그래서 저는 아래와 같이 바꿔봤습니다.

 

Button은 member 변수로 선언하고, xml 파일에서 button 객체를 받아오고, event listener를 등록하는 역할을 수행할 registButton() 함수를 추가 했습니다.

그리고 onClickListener를 함수는 따로 분리하여 관리하는 방식으로 구현해보았습니다.

 

public class MainActivity extends Activity {

    private final String TAG = "Main";

    private final boolean D = true;

    

    Button mStartBtn, mEndBtn;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        

        registButton();        

    }

    

    private void registButton(){

        mStartBtn = (Button)findViewById(R.id.start_btn);

        mEndBtn = (Button)findViewById(R.id.end_btn);

        

        mStartBtn.setOnClickListener(mBtnListener);

        mEndBtn.setOnClickListener(mBtnListener);

    }

    

    private View.OnClickListener mBtnListener = new View.OnClickListener() {        

        @Override

        public void onClick(View v) {

            switch(v.getId()){

            case R.id.start_btn:

                

                break;

                

            case R.id.end_btn:

                

                break;

            }

        }

    };

}

 

주관적으로 깔끔하다고 생각하는 구현 방식입니다.

반응형