예제에서 setOnClickListener를 사용하지 않는 이유는 해당 코드는 ViewModel을 사용할 때 one-off event를 어떻게 처리하는지 보여주는 데모코드이기 때문입니다. 님이 그렇게 사용하는 상황이라고 가정한 겁니다. 예를 들면, 네트워크 호출을 하다가 에러가 나서 화면에 toast를 보여줘야 한다고 생각해보시면 됩니다. 이런 상황에서 ViewModel + LiveData을 사용하고 있다면, 해당 블로그에서 제시한 방법대로 처리를 하는 겁니다.
토픽과 관련한 구글의 공식적인 가이드는 아래 블로그에서 확인하실 수 있습니다.
https://medium.com/androiddevelopers/viewmodel-one-off-event-antipatterns-16a1da869b95
구글의 방향이 종종 바뀌기 때문에, 어쩌면 참조하신 블로그의 방법들이 더 현실적으로 적합할지도 모르겠습니다. 구글의 요점은 님이 말씀하시는 이벤트(정확히는 한번만 사용하는 one-off event 또는 one-time event)는 UI의 상태로 간주하는 것이 바람직한 방향이다. 따라서 상태값을 업데이트하는 형태로 처리해야 한다. 구글의 말대로라면 님이 참조하신 블로그의 대부분의 방식은 안티패턴에 해당합니다. 하지만 개인적으로는, 구글은 이 간단한 처리를 빙빙 돌려하게 만드는 오버엔지니어링을 하고 있다는 생각을 자꾸 하게 됩니다.
블로그에 나오신 방법들 중에서 상황에 맞는 걸 선택하시면 되구요. 추가로 한가지 더 사용하는 방법이 있는 Channel을 이용하는 것입니다. 이건 해외 커뮤니티에서 안드로이드 개발자들이 기존에 많이 사용하고 있는 방법입니다. 아래 유투브에 자세한 가이드가 있습니다.
https://www.youtube.com/watch?v=6v8iJDJdtMc