view.OnHit += : view 객체의 OnHit 이벤트에 새로운 동작 추가
(collider2D,fireballView) : 이벤트가 발생할 때 전달되는 매개변수(파라미터) 목록
=> : 람다 연산자 왼쪽의 입력을 받아서 오른쪽 코드를 실행하라는 의미
OnFireballHit(...) : 이벤트가 발생했을 때 실제로 실행될 Presenter의 메소드
(collider2D, model, view) : OnFireballHit 메소드로 전달되는 인수(Arguments)
이 코드가 하는 일
1. View에서 이벤트 발생: View에서 OnHit 이벤트가 발생하면 Presenter로 알림
2. Presenter의 반응(람다 실행) : OnFireballHit 메소드를 실행한다.
3. 데이터 전달: collider2D와 model view 객체를 OnFireballHit 메소드에 함께 전달한다
여기서 (collider2D,fireballView)는 파라미터이기에 사실 (a,b) 와 같이 적어도 된다. 넘어 오는 파라미터 값의 의미를 알 수 없기 때문에 알 수 있는 표현을 쓰는 것이다.
근데 왜 매개변수가 2개인데 3개의 인수가 생기지?? 이것은 풀어보면 알 수 있다.
// 람다 표현식:
// view.OnHit += (collider2D, fireballView) => OnFireballHit(collider2D, model, view);
// 위 코드를 풀어서 쓰면:
view.OnHit += delegate(Collider2D collider2D, FireballView fireballView)
{
// 이벤트가 발생했을 때 이 내부 코드가 실행됩니다.
// 여기서 Presenter의 메소드를 호출합니다.
OnFireballHit(collider2D, model, view);
};이렇게 2개의 파라미터가 넘어오지만 실제 메소드는 3개의 인수를 가진다고 보면 된다.
그러면 의문이 생기는 것이 fireballview는 쓰이지도 않는데 왜 선언하는 것인가?
그것은 처음에 만들 때는 collider2D 와 fireballView가 둘다 쓰일것으로 예상했지만 실제 사용하는 데에서는 collider2D만 사용하게 되어서 생긴 것이다.
그럼 왜 fireballview를 적어서 헤깔리게 하느냐, 이것이 C#9.0 이상에서는 변수 이름 대신 밑줄(_)을 써서 사용하지 않는 매개변수를 표현할 수 있게 해줬다.
(collider2D, _ ) => ... 이렇게 사용하면 된다.
그럼 delegate는 뭐냐? 다음에 설명하겠다.
구글 AI를 참조하여 작성하였습니다.
댓글 없음:
댓글 쓰기