드디어 이벤트 부분을 배워서 정리해 보도록 하겠습니다! 내가 알고 있던 이벤트 with LUA LUA 에서는 1) 이벤트 타입을 만들고, 2) 그 이벤트를 Event Invoke 함수를 통해 호출시키고, 3) 이벤트를 감지하는 Event Handler 를 추가하여 이벤트를 발생시켰습니다. 이벤트의 장점 저는 이벤트를 정말 사랑했습니다. 한 번의 호출로 여러 함수를 호출할 수 있었거든요. 저는 코드를 작성할 때 가장 중요한 것이 현실과의 유사성이라고 생각하는데, 이벤트를 사용하면 마치 프로그램과 대화를 하는듯한 코딩이 가능했습니다. 다시말해 아래 그림처럼, 각 Manager Class 들이 내 얘기를 듣고 있는 것처럼 코딩할 수 있었습니다. 이벤트의 단점 하지만 이벤트가 좋다고 이벤트를 남발하면, 코드 속..
글을 열며 드디어 이벤트 사용법을 알아냈습니다! 저는 LUA언어로 미니게임을 만들며 이벤트를 아주 잘 사용했었습니다. 그때의 좋은 기억 덕분에 C# 개발을 하면서도 "이거 이벤트로 만들면 진짜 딱인데..." 싶은 것들이 나올 때마다 서적을 펼쳐 이벤트 부분을 무작정 읽었습니다. 하지만 앞부분을 읽지 않으면 이벤트를 이해할 수 없었고, 그 앞부분 또한 앞부분의 앞부분을 읽지 않으면 이해하기 난해했습니다. 결국 드디어 서적의 앞부분을 다 읽고 이벤트까지 오게 되었는데, 이걸 설명하려면 델리게이트 정도는 정리하고 넘어가야 할 것 같습니다. 서적에서 왜 바로 이벤트부터 말해주지 않고 델리게이트를 먼저 설명하고 넘어가는지 글 작성자 입장이 되어 보고 나니 이해가 됩니다. 델리게이트란 ? 델리게이트는 함수를 저장하..
1. Nuget 패키지를 설치한다. 2. NLog.Config 파일을 만들어 줍니다. 아무데나 원하는 곳에 NLog.Config 파일을 만들어 줍니다. 파일 내용은 이렇게 적습니다. 3. 코드 작성 이제 코드를 아래와 같이 작성합니다. path는 위에서 만들어 준 NLog.Config 의 절대 경로를 입력했습니다. 프로세스를 실행하면 로그가 파일에 저장됩니다. public class Program { private static readonly NLog.Logger log = NLog.LogManager.GetCurrentClassLogger(); public static void Main(string[] args) { string path = "/Users/jaeeun/free/TestSolution/N..
세줄요약 - 스레드끼리 지역변수를 매개변수로 전달 가능 - 스레드끼리 변수 하나를 스태틱으로 공유 가능 - 스레드끼리 지역변수 하나를 매개변수로 공유.... 하고싶음 ㅜㅜ 코드를 작성하고 실행하는데, 작업이 오래 걸리기 시작했습니다. 처음 10초 정도는 괜찮았습니다. 15초 후 불안해집니다. 20초가 넘어 가자 뭔가 잘못되어가고 있는 게 아닌지, 내가 이 일로 회사에서 짤리지는 않을지 조마조마해집니다. 저는 이 일이 제대로 돌아가고 있는지 확인해 주는 스레드를 만들기로 했습니다. 그런데 스레드A 의 변수를 스레드B 에서 출력할 수 있을까요? 가능합니다! 1. 스레드 간 값 전달 방식 public static void Main(string[] args) { int count = 1; Thread thre..
C# 교재를 읽다 깜짝 놀랐습니다. static 생성자라는게 존재했다니! static 생성자란, 클래스의 생성자와 똑같은 형식으로 생겼지만, static 으로 선언되어 정적 맴버들을 초기화할 수 있는 함수입니다. 아래와 같은 방식으로 오버로딩도 가능합니다. class Program { private int num; static Program() { Console.WriteLine("정적 생성자"); } Program() { Console.WriteLine("생성자"); } public static void Main() { Console.WriteLine("Main문 시작"); Program program = new Program(); } } 정적 생성자 Main문 시작 생성자
어떤 스레드의 작업이 끝나야만 다음 작업을 수행하는 스레드가 필요할 때, Join 메서드를 이용해서 해당 스레드의 작업이 끝날 때까지 기다릴 수 있습니다. 사용 예시 public static void Main() { Thread t = new Thread(Wait2Seconds); t.Start(); t.Join(); Console.WriteLine("나 너를 기다렸어"); } static void Wait2Seconds() { Thread.Sleep(2000); Console.WriteLine("업무 끝!"); } 업무 끝! 나 너를 기다렸어 그런데 이 Join 메서드는 스레드 풀을 사용할 때에는 사용할 수 없습니다. 스레드 풀은 스레드 사용이 종료되어도 스레드가 반납되지 않기 때문입니다. 이럴 때에는..