해결된 질문
작성
·
31
0
안녕하세요 강의 너무 잘 보고 있는 지망생입니다 . 한가지 궁금한게 생겨서 여쭤봅니다 . 겟과 리턴을 만들 때 액션의 널 체크를 하잖아요 . 이 부분을 if로 널 체크를 한번 하고 ? 로 널 체크를 한번 더 하는데 이렇게 두번 해야하는 이유가 있을까 조심히 여쭤봅니다.
답변 2
0
안녕하세요! 답변 드리겠습니다 🙂
일단 말씀주신 것 처럼 해당 내용은 null체크를 2번 하고있는게 맞습니다.
일단 가장 큰 이유는 습관(?)입니다. if문으로 null검사를 하여도 ?.Invoke를 통하여 다시 한 번 액션의 null을 체크하는 이유는
계속해서 코드 작업을 진행하면서 해당 Action은 멀티 스레드로 처리가 될 가능성이 크기 때문입니다.
싱글 스레드로 처리가 진행될경우에는 그냥 ?.연산자만 사용하여도 충분하지만
멀티 스레드 환경으로 진행이 되면서 해당 Action이 if문에서 null로 검수가 완료되어도 바로 다음 스레드에서 null로 변경될 가능성이 존재하기에 다시 한 번 Action을 본격적으로 진행 할 때에는 ?.연산자를 통하여 두 번 체크하는 방식을 적용하였습니다.
이 처럼 싱글 스레드 환경에서는 ?. 연산자만 사용을 하여도 무방하지만
멀티 스레드로 변경이 될 가능성이 큰 자주 사용하게 되는 풀링 매니저이기에 2번의 널 체크를 사용하였다고 이해해 주시면 감사드리겠습니다 (__)
0
안녕하세요, 인프런 AI 인턴입니다. ᄒᄋᄒ님.
질문하신 오브젝트 풀링(Object Pooling)에서 “겟(Get)과 리턴(Return) 시 액션(Action)의 널 체크”에 대해 설명드리겠습니다. 널 체크를 두 번 하는 이유는 코드의 안전성과 가독성을 높이기 위함입니다.
널 체크의 중요성:
두 번의 널 체크 이유:
if
문을 사용하여 널이 아닌 경우에만 이후 처리를 하도록 합니다.?
를 활용하는 것은 간결함을 더해줍니다. 이 연산자를 사용하면 조건에 따라 값을 취할 수 있어 가독성을 개선합니다.예시 코드:
if (action != null)
{
action?.Invoke(parameter);
}
여기서 if (action != null)
은 기본 널 체크이고, action?.Invoke(parameter)
는 널이 아닌 경우에 실행되도록 하는 것입니다. 두 번째 체크는 부가적인 안전장치이자 이전 코드에 따른 간결화의 일환으로 사용됩니다.
액션 및 이벤트 처리, 오브젝트 풀링과 관련된 추가 자료는 다음의 링크를 참고하실 수 있습니다:
이러한 자료를 통해 널 체크와 관련된 다양한 기법을 학습하실 수 있습니다. 널 체크를 제대로 하게 되면 예외 케이스를 예방하고 코드의 신뢰성을 높일 수 있으니, 잘 활용하시길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아하 멀티스레드를 위한 방어코딩이었군요 감사합니다 멀티스레드는 제가 아직 부족한 편이라 그까진 생각을 못했습니다 답변 감사합니다 :)