방프리
20.04.14 Chapter1. C# 언어 요소 (Item 8) 본문
Item 8: 이벤트 호출 시에는 null 조건 연산자를 사용하라
데이터를 바인딩할 때 항상 하는 조건문!! 바로 null인지 아닌지 체크하는 것이다. NullException은 어디에서든지 절대
빠져서는 안되는 조건문이다. 이벤트 호출하기 전에도 항상 null을 체크해주어야하는데 왜 해주어야 하는지?
그리고 어떻게 해야하는지 코드를 통해 알아보자
다음 코드는 아예 체크를 하지 않는 코드다. 이벤트에 아무것도 할당되지 않았음에도 그냥 바로 실행시킨다.
이 부분을 예외처리를 한다고 하면 보통 다음과 같이 처리한다.
나도 처음에 이렇게 처리면 끝나는줄 알았다. 하지만 멀티 쓰레드 환경이라면, 이 코드도 완벽하지 않다.
한 쓰레드에서 이벤트를 해제했는데 다른 쓰레드에서 이벤트를 실행하면 비어있는 이벤트를 실행해버리는 꼴이 된다.
다음의 방법이 가장 이상적인 방법이라고 저자는 말한다. 하지만 이 코드는 가독성에서 많이 떨어진다고 한다.
(내 입장에서는 이 방법이 더 가독성이 쉬웠다.)
handler라는 임시 변수에 이벤트를 얕은 복사를해서 다른 쓰레드가 이벤트를 해제하더라도 handler 변수에는
이벤트가 남아있기 때문에 실행이 가능하다.
다음의 코드는 위의 코드를 더 간결하게 나타낸 것이다. ? 연산자를 통해 이벤트가 null값인지 아닌지 확인한 후
이벤트가 있다면 Invoke를 통해 다른 쓰레드에게 이벤트를 위임한다.
다중 쓰레드 환경에서는 굉장히 유용하지만 싱글 쓰레드로 도는 유니티에서는 사용을 고려해봐야 할 것 같다.
특히 Invoke함수는 유니티에서는 대기 함수라는 이미지가 더 강해 과연 사용할까 싶다.
'C# > Effective C#' 카테고리의 다른 글
20.04.17 Chapter1. C# 언어 요소 (Item 10) (0) | 2020.04.17 |
---|---|
20.04.15 Chapter1. C# 언어 요소 (Item 9) (0) | 2020.04.15 |
20.03.29 Chapter1. C# 언어 요소 (Item 7) (0) | 2020.04.01 |
20.03.26 Chapter1. C# 언어 요소 (Item 6) (0) | 2020.03.28 |
20.03.25 Chapter1. C# 언어 요소 (Item 5) (0) | 2020.03.26 |