델리게이트란 메서드를 변수처럼 사용할 수 있게 해주는 기능입니다. 여러 메서드에서 동일한 메서드 처리를 필요로 할 때, 델리게이트를 통해 메서드를 매개 변수처럼 넘겨주는 것이 가능합니다. 이를 통해 여러 메서드마다 같은 동작 처리를 구현할 필요 없이 델리게이트를 활용하여 코드의 확장성을 높여줄 수 있습니다.
delegate는 메서드를 변수처럼 활용할 수 있도록 해주는 기능입니다. delegate를 활용하기 위해서는 반환 타입과 매개 변수를 맞춰줘야 합니다. delegate는 인터페이스의 내부에 선언을 하고, public을 통해 외부에서도 불릴 수 있습니다.
반면 event는 인터페이스에서 선언을 할 수 없고, public으로 선언되어 있어도 외부에서 불릴 수 없습니다.
action과 func 모두 델리게이트 변수로, 델리게이트를 선언할 때 따로 델리게이트 변수를 선언하지 않고 Action, Func을 통해 선언할 수 있습니다. Action은 반환 타입이 없을 때, Fucn은 반환 타입이 있을 때 사용합니다.
event와 action은 옵저버 패턴을 구현하기 위해 사용해본 경험이 있습니다. 예를 들어, 플레이어와 몬스터가 싸우는 게임에서 스테이지 승리 또는 패배 시 처리를 하기 위해 스테이지 종료 이벤트를 만든 적이 있었는데, 그 때 event와 action을 활용한 적이 있습니다.