문제가 있는 것이 아니라, 안들로이드 스튜디오가 해당 코드에 대한 추천사항이 있다는 표시입니다. View.OnClickListener를 마우스 오른쪽 클릭해보시면 아마 "convert to lamdba" 가 보이실 겁니다. View.OnClickListener는
public void onClick(View view)
메소드 하나만 가진 인터페이스이므로, 이렇게 메소드를 하나만 가진 인터페이스는 Lambda expression(람다 표현식)을 사용할 수 있습니다. Java8 부터 지원되는 기능으로 View.OnClickListener는 아래처럼 onClick메소드 선언부만 상요해서 처리할 수 있습니다.
button.setOnClickListener(new View.OnClickLsitener() {
@Override
public void onClick(View view) {
...
}
});
이 코드를 람다식을 써서 간략하게 표현할 수 있습니다.
button.setOnClickListener(v -> {
// 멀티라인의 코드
});
button.setOnClickListener(v -> /*싱글라인의 코드*/ );
publc void onClick(View view)의 파라미터가 View이므로
View.OnClickListener는
(View v) -> { }
로 간략하게 표기가 가능하며, View타입도 생략이 가능하므로
v -> {}
로 사용할 수 있습니다. 람다를 하나의 타입으로 보시면 됩니다. View.OnClickListener의 onClick은 View 타입을 받아서 void를 리턴하는 함수타입으로 볼 수 있습니다.
리스너를 설정하는 기존코드는 boiler plate에 해당하는 코드이므로 굳이 사용할 필요가 없습니다. 개인적으로도 람다를 사용하는 걸 추천합니다. 조금만 써보면 어렵지 않고 금방 눈에 들어옵니다. boiler plate코드에 신경을 쓰지 않아도 되므로, 가독성이 올라갑니다.