본문 바로가기
개발/Unity 내일배움캠프 TIL

C# Action으로 종속성 없애기..?

by 석시 2023. 8. 29.



C#을 배우는 과정에서 가장 곤란했던 건 과제나 실습을 할 때 코드 간 종속성이었다.

화면에 캐릭터의 정보를 표시한다고 해보자.

해당 정보를 받기 위해서 Character 클래스를 정보 표시 기능을 하는 클래스에 어떻게 전달해줄 것인가?

가장 간단하게는 이렇게 할 수 있겠다.

public static class ConsoleManager
{
    public static Character? CurrentCharacter { get; set; }
}

하지만 이게 난감한건 여러 가지가 있다.

  • CurrentCharacter를 어디서 설정해줄 것인가?
  • Character말고 다른 정보를 표시할 때에 이 클래스를 재사용할 수 있는가?

즉, 내 고민은 이것이다.

“Character Class의 참조 없이 Character의 클래스의 정보를 출력할 수 있을까요?”

이에 대해 찾다가 아주 좋은 글을 발견했다.

[C#] Callback, Action으로 간단히 사용하기 (delegate 사용안함)
C# Action Callback 역시 설명은 예시로~ 여러가지 경우에 쓰이지만 아래와 같은 예를 들어보겠습니다. Main Class 가 있습니다. 여기에서 Watcher 라는 클래스의 객체를 만들어서 파일 모니터링을 한다고 합니다. 특정 경로의 폴더에 어떤 파일이 생기거나 삭제되거나하면 알림을 주는건데요. 프로세스는 아래와 같습니다. 1. 프로그램이 실행되면 Watcher 를 띄워서 모니터링을 시작합니다. 이때 Main Class 에서는 본인이 할일을 합니다. 2. Watcher 가 모니터링 중에 파일 생성을 감지했습니다. Watcher는 Main 을 호출해서 Main 에서 해당 작업을 처리해야 합니다. 이럴때 코드를 어떻게 만드시겠습니까? 제가 주니어였을 땐 아래와 같이 코딩했습니다. (이렇게 하지마..
https://hello-bryan.tistory.com/367

클래스 간 통신을 클래스의 참조가 아닌 Action을 통한 callback으로 하자!라는 것이다.

즉, 내 코드에선 이렇게 사용할 수 있겠다.

public static class ConsoleManager
{
    public static Action<string> callback;

    public static SetCallback(Action<string> callback) {
        this.callback = callback;
    }
    
    public static FireCallback(string info) {
        callback.Invoke(info);
    }
}

아직 대리자와 콜백 함수를 다루는데 익숙하지 않아 생각하기가 힘든 것 같다.

더 이해하게 된다면 추가로 내용을 작성하도록 하겠다.


Uploaded by N2T

'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글

C# 중첩 클래스와 partial 클래스  (0) 2023.08.31
C# Enumerable 인터페이스  (0) 2023.08.30
C# StringBuilder 정리  (0) 2023.08.28
C# LINQ 간단 정리  (0) 2023.08.25
C# 값 vs 참조 형식 (Value vs Reference)  (0) 2023.08.24