인벤토리 구현중에 UI 와 인벤토리를 분리하여 장착패널의 버튼을 누르면 인벤토리에게 알려주기 위해 델리게이트를 사용하려 하는 도중 개념이 헷갈려서 제대로 알고 사용하기위해 델리게이트와 이벤트에 대해 복습을 하게 되었다
- Delegate
값이 아닌 코드 자체를 넘기고 싶을 때 사용하고 보통 콜백 용도로 쓰인다
- evnet
프로그래밍에 어떤 일이 생겼을 때 실행되는 객체로 delegate를 event 한정자로 수식해서 만들고 보통 객체의 상태 변화, 사건의 발생을 알리는 용도로 사용한다
차이점
- 이벤트는 인터페이스 내부에 선언할 수 있지만 델리게이트는 선언할 수 없다
- 이벤트는 public 으로 선언되어 있어도, 자신이 선언되어 있는 클래스 외부에서 호출할 수 없다
(이벤트 기반 프로그래밍에서 안정성을 추구하는 것으로, 클래스 외부에서 이벤트에 변화를 줄 수 없게 하기 위함이다)
요즘 계속 event를 사용해서 그런가 당연히 event를 사용하면 될 줄 알았다 하지만 클래스 외부에서 이벤트를 호출할 수 없기 때문에 오류가 났던 것 그래서 이벤트를 쓰지 않고 델리게이트를 사용하여 버튼이 눌리면 인벤토리에게 알려줄 수 있게 만들었다
또한, 사용자 정의 델리게이트 대신 사용할 수 있고 나는 반환값이 필요없는 미리 정의되어 있는 Action을 이용하여 간단하게 델리게이트를 사용하였다
'TIL' 카테고리의 다른 글
[TIL] 내일배움캠프_Unity ToolTip (feat.null 이 널 좋아해) ,내배캠 인터뷰 후기 (0) | 2023.09.22 |
---|---|
[TIL] 내일배움캠프_Unity 개인과제 회고 (0) | 2023.09.21 |
[TIL] 내일배움캠프_ Unity SkyBox, Cursor, NewInputSystem, Invoke, AnimationCurve (0) | 2023.09.19 |
[TIL] 내일배움캠프_Unity 스크립터블 오브젝트, 레이어 비트연산, Quaternion 과 Vector의 곱셈, Trail Renderer, ObjectPool (1) | 2023.09.18 |
[TIL] 내일배움캠프_Unity GroupBy, StringBuilder, UnityEducation Day 2023 (0) | 2023.09.15 |