유니티를 하다보면 콜백 함수, 콜백 ~~ .. 이러한 기능들을 사용하곤 한다. 주로 내가 생각나는 것은
옵저버 패턴이나 대리자와 관련된 기능에서 사용했던 것으로 기억한다. 근데 그래서 이 콜백이란게
대체 무엇인지 사실 모르고 쓰고 있었다. 그렇기 때문에 이 개념에 대하여 숙지하고자 한다.
Callback 이란?
호출을 당한 곳에서 다시 호출한 쪽을 호출하는 것이다.
이 개념을 처음봤을 땐 이게 뭔 소린지 감이 안잡힌다. 그렇기 때문에 상황을
병원에 갔을 때 나, 접수처, 의사 이렇게 3명이 있다고 가정해보자.
그럼 내가 접수처에가서 의사에게 진료를 받고싶다고 요청을 한다. 그럼 접수처에서
수락을하고 접수처가 의사에게 진료를 받고싶다는 환자가 있다고 전달한다.
여기까지가 내가 의사에게 호출을 한것이다.
그럼 의사가 아 그럼 바로 진료를 시작도록 할테니 들어오라고 나를 다시 호출한다.
여기까지가 의사가 다시 호출한 쪽을 호출하는 것이다.
그럼 이 상황을 설명하자면 "의사" 는 메서드라는 사실을 알 수 있다. 근데 접수처는
무엇일까? 그것은 바로 대리자(Delegate) 라는 것이다.
그래서 Delegate라는 개념을 숙지하고 Callback을 이해하려고 하면 수월하게 진행될 것이다.
Delegate를 이용한 설명
얼마전 델리게이트 개념에 대한 글을 썼는데 그곳에서 가져온 사진이다.
위를 보면 delegate(대리자)를 PerformCalculation이라는 이름으로 선언했다.
Main에서 보면 addTest와 subTest가 있는데 이것이 위에서 설명한 "나" 에 대한 부분이고
addTest("나")가 PerformCalculation이라는 대리자를 통해 Add("의사")에게 호출을 하고
Add("의사")가 addTest("나") 를 다시 호출하여 3, 2가 더해진 5가 결과 값으로 나오게 된다.
요약
콜백이란 호출을 당한 곳에서 다시 호출한 쪽을 호출하는 것입니다. 이는
대리자에게 원하는 기능을 요청한 후 대리자에게 요청을 메서드에게 전달
해 달라는 뜻입니다. 그럼 메서드가 요청을 대리자에게 받고 다시 호출한 쪽을
호출하게 됩니다. 이것이 가능하게 해주는 기능으로는 Delegate를 비롯한
대리자를 사용하는 Event, Action, Func와 같은 기능들이 있으며 이를 사용하면
Callback의 기능을 사용할 수 있습니다.
'TIL > C#' 카테고리의 다른 글
[C#] 스택, 힙 메모리란 무엇인가 (0) | 2023.11.10 |
---|---|
[C#] 정렬 알고리즘 (선택 정렬, 버블 정렬) (0) | 2023.11.09 |
[C#] 델리게이트 (0) | 2023.11.06 |
[C#] 제네릭 (0) | 2023.11.02 |
[C#] 배열, List, ArrayList, Dictionary의 차이점 (1) | 2023.11.02 |