인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ᄒᄋᄒ님의 프로필 이미지
ᄒᄋᄒ

작성한 질문수

[Unity] 함께 만들어가는 방치형 게임 개발

오브젝트 풀링 (Object Pooling)

오브젝트 풀링 파트에서 겟과 리턴을 만들때

해결된 질문

작성

·

31

0

안녕하세요 강의 너무 잘 보고 있는 지망생입니다 . 한가지 궁금한게 생겨서 여쭤봅니다 . 겟과 리턴을 만들 때 액션의 널 체크를 하잖아요 . 이 부분을 if로 널 체크를 한번 하고 ? 로 널 체크를 한번 더 하는데 이렇게 두번 해야하는 이유가 있을까 조심히 여쭤봅니다.

답변 2

0

Pinous님의 프로필 이미지
Pinous
지식공유자

안녕하세요! 답변 드리겠습니다 🙂

일단 말씀주신 것 처럼 해당 내용은 null체크를 2번 하고있는게 맞습니다.
일단 가장 큰 이유는 습관(?)입니다. if문으로 null검사를 하여도 ?.Invoke를 통하여 다시 한 번 액션의 null을 체크하는 이유는

계속해서 코드 작업을 진행하면서 해당 Action은 멀티 스레드로 처리가 될 가능성이 크기 때문입니다.

싱글 스레드로 처리가 진행될경우에는 그냥 ?.연산자만 사용하여도 충분하지만
멀티 스레드 환경으로 진행이 되면서 해당 Action이 if문에서 null로 검수가 완료되어도 바로 다음 스레드에서 null로 변경될 가능성이 존재하기에 다시 한 번 Action을 본격적으로 진행 할 때에는 ?.연산자를 통하여 두 번 체크하는 방식을 적용하였습니다.

이 처럼 싱글 스레드 환경에서는 ?. 연산자만 사용을 하여도 무방하지만
멀티 스레드로 변경이 될 가능성이 큰 자주 사용하게 되는 풀링 매니저이기에 2번의 널 체크를 사용하였다고 이해해 주시면 감사드리겠습니다 (__)

ᄒᄋᄒ님의 프로필 이미지
ᄒᄋᄒ
질문자

아하 멀티스레드를 위한 방어코딩이었군요 감사합니다 멀티스레드는 제가 아직 부족한 편이라 그까진 생각을 못했습니다 답변 감사합니다 :)

0

안녕하세요, 인프런 AI 인턴입니다. ᄒᄋᄒ님.

질문하신 오브젝트 풀링(Object Pooling)에서 “겟(Get)과 리턴(Return) 시 액션(Action)의 널 체크”에 대해 설명드리겠습니다. 널 체크를 두 번 하는 이유는 코드의 안전성과 가독성을 높이기 위함입니다.

액션(Action)의 널 체크

  1. 널 체크의 중요성:

    • 액션이 널일 경우에는 실행될 수 없기 때문에 널 체크를 통해 NullReferenceException과 같은 런타임 오류를 방지할 수 있습니다.
    • 이는 코드가 의도한 대로 동작하도록 하며, 예외 상황에서의 처리를 통해 응용 프로그램의 안정성을 높입니다.
  2. 두 번의 널 체크 이유:

    • 첫 번째 널 체크는 기본적인 존재 여부를 확인하기 위한 것인데, 일반적으로 if 문을 사용하여 널이 아닌 경우에만 이후 처리를 하도록 합니다.
    • 두 번째 널 체크에서 삼항 연산자 ?를 활용하는 것은 간결함을 더해줍니다. 이 연산자를 사용하면 조건에 따라 값을 취할 수 있어 가독성을 개선합니다.

예시 코드:

   if (action != null)
   {
       action?.Invoke(parameter);
   }

여기서 if (action != null)은 기본 널 체크이고, action?.Invoke(parameter)는 널이 아닌 경우에 실행되도록 하는 것입니다. 두 번째 체크는 부가적인 안전장치이자 이전 코드에 따른 간결화의 일환으로 사용됩니다.

추천 자료

액션 및 이벤트 처리, 오브젝트 풀링과 관련된 추가 자료는 다음의 링크를 참고하실 수 있습니다:

이러한 자료를 통해 널 체크와 관련된 다양한 기법을 학습하실 수 있습니다. 널 체크를 제대로 하게 되면 예외 케이스를 예방하고 코드의 신뢰성을 높일 수 있으니, 잘 활용하시길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ᄒᄋᄒ님의 프로필 이미지
ᄒᄋᄒ

작성한 질문수

질문하기