질문이 상세하고 중요한 포인트를 물어보시고 있고 작업하신 코드도 같이 올려주셔서 답을 해드리기가 좋네요.
1. btn_로그인.setOnClickListener(this)
API문서를 보시면 궁금증을 해결하실 수 있습니다. setOnClickListener안에 들어가는 건 View.OnClickListener라는 인터페이스입니다. (https://developer.android.com/reference/android/view/View.OnClickListener 참조)
인터페이스는 뭔지 아실거예요. 그리고 this는 클래스(여기서는 아마도 액티비티일 것 같은데요)의 인스턴스를 가리키는 겁니다. 코드를 작성하는 시점에서는 인스턴스가 뭐가 될지를 알 수 없기 때문에, 런타임에 생성될 인스턴스를 "this"해서 사용하는 거죠. 이말은 setOnClickListener에 넘겨지는 this가 View.OnClickListener이기도 하다는 것이고 해당 액티비티가 View.OnClickListener구현하고 있다는 겁니다. 액티비티의 선언부를 살펴보시면 "implments View.OnClickListener" 이런 식으로 되어 있을 것이고
@Override
public void onClick(View v) {
}
위와 같이 View.OnClickListener의 onClick메소드가 구현되어 있을 겁니다.
2. View v
OnClick메소드에 스위치문을 사용한 것은 여러개의 버튼이 똑같은 View.OnClickListener를 공유하기 때문입니다. 화면에서 버튼이 눌리게 되면 안드로이드 OS가 제일 먼저 버튼이 눌린 것을 센서를 통해 감지를 하고 이걸 어떻게 처리할 것인지 애플리케이션에 물어보게 됩니다. 애플리케이션내에서 눌린 버튼에 대한 onClickListener가 구현되어 있다면, 안드로이드 OS는 "이앱은 이 onClickListener안의 onClick메소드를 실행하기 원하는 구나" 하고 해석하여 처리하게 됩니다. 이 때 onClick메소드의 View 파라미터에 눌린 Button이 넘어오게 되는 거죠. 따라서 위처럼 View.OnClickListener를 여러뷰가 공유하는 경우는 View의 id를 이용해 구분하는 것이고 여러개의 case가 존재할 경우는 switch문이 적합한 문법이 됩니다.
2번에서 3번도 자연스럽게 답이 된 것 같네요.
잘 이해가 되시면 좋겠네요.