허접한 질문을 드려 송구스럽습니다.
"헬로, 안드로이드"라는 책에 버튼 클릭설정하는 부분인데요.
아래의 빨간색으로 this 표시된 부분은 어떤 역할을 하나요? 자바 this 키워드 인가요?
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class Sudoku extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
View continueButton = this.findViewById(R.id.continue_button);
continueButton.setOnClickListener(this);
View newButton = this.findViewById(R.id.new_button);
newButton.setOnClickListener(this);
View aboutButton = this.findViewById(R.id.about_button);
aboutButton.setOnClickListener(this);
View exitButton = this.findViewById(R.id.exit_button);
exitButton.setOnClickListener(this);
}
public void onClick(View v){
switch (v.getId()){
case R.id.about_button:
Intent i = new Intent(this, About.class);
startActivity(i);
break;
// 버튼이 더 있다면 이곳에 입력된다.
}
}
}
Activity 클래스를 상속받아 쓰시고 계신데요 이 Activity 클래스에는 findViewById()메서드가 정의되있고 Sudoku 클래스는 Activity를 상속 받았습니다. 즉 자식이 부모의것을 상속 받았으니 findViewById()라는 메서드는 오버라이딩해서 쓰지 않는이상 부모의 것이 곧 자식클래스의 것이기 때문에 this 호출로 쓸수있는 겁니다.
setOnClickListener(this); 구문의 의미는 OnClickListener라는놈은 인터페이스 입니다. 이 인터페이스를 Implements 하여 기능 구현후에 setOnClickListener()라는 메서드안으로 넘겨주면 클릭이는 행동을 할때 해당되는 구문을 실행하게 되는거죠 근데 해당 예제에 보면 Sudoku 클래스가 OnClickListener를 implements 하고 onClick()메서드를 오버라이딩하여 구현하였네요 그러므로 Sudoku 자신의 참조를 넘겨주면 버튼에서는 클릭이라는 이벤트가 일어나면 Sudoku 클래스안의 onClick()을 실행하는겁니다.
여담으로 좀더 깊이 들어가면 자바에서 버튼이나 각종 컴포넌트에서 리스너를 이벤트 핸들러로 사용하는것은 디자인패턴에서 보면 옵저버패턴을 구현하고 있는겁니다. 지금 이해가 안되실지 몰라도 나중에 패턴이라는것을 배우거나 느낀다면 제가 적은 글이 생각나실때가 올겁니다.