티스토리 뷰

개요

유니티 프로젝트를 진행하며 코드 작성 중 궁금한 점을 발견했다.

스크립트 _SCRIPT = null; // 스크립트 변수 선언

if(_SCRIPT == null && (_SCRIPT = gameObject.GetComponent<스크립트>()) == null)
{
    _SCRIPT = gameObject.AddComponent<스크립트>();
}
  • if문을 통해 스크립트 변수가 연결되어있는 스크립트가있는지 확인 (변수가 Null인가)
    • 스크립트 변수가 할당되어 있지 않다면 현재 오브젝트에 해당 스크립트 호출
      • 해당 스크립트가 현재 오브젝트에 존재하지 않는다면 새로운 컨포넌트로 스크립트 입력 후 변수와 연결

 

즉, 2번과 a는 하나의 if문에 구성되지만 if문은 둘을 모두 확인하고 결과를 넘어가는 것인지 첫번째 조건이 불충족시 바로 조건문을 나가는 것인지 궁금했다.

 

자료를 조사하기 전에는 무의식적으로 당연히 하나라도 안되면 바로 나가는 것을 생각했다.

 

하지만 막상 확실하게 단정을 지으려니 헷갈렸다.

 

아마 누군가 질문을 했다면 "그럴 것이다."는 여지를 남길 답을 했을 것이다.

 

 


다중조건문을 나가는 타이밍

💡 다중조건 if문은 몇번째 조건이든 불충족시 조건문을 나간다.

나와 같은 작은 고민을 한사람이 많아서 해답은 쉽게 발견했다.

 

The && and || operators short-circuit.

If && evaluates its first operand as false, it does not evaluate its second operand.
If || evaluates its first operand as true, it does not evaluate its second operand.

This lets you do null check && do something with object, as if it is not null the second operand is not evaluated.

 

위 문장을 요약하면 다음과 같다.

 

  1. if문의 &&연산자가 첫 조건에서 false가 되면 다음 조건을 확인하지 않는다.
  2. if문의 ||연산자가 첫 조건에서 true가 되면 다음 조건을 확인하지 않는다.

 

즉, 왼쪽부터 읽기 시작하여 처음 조건에 만족하지 못하는 구간에서 바로 조건문을 탈출한다는 것이다.

 

조건문 순서에 따른 오류 발생

List<object> _Test = null;

// 예제 #1
// OK
if (_Test != null && _Test.Count > 0)
{
		...
}

// 예제 #2
// nullreferenceexception
if (_Test.Count > 0 && _Test != null)
{
		...
}

위와 같은 코드에서 예제 #1은 오류가 발생하지 않는다.

하지만 예제 #2메모리가 할당되지 않은 오브젝트 리스트 _Test를 호출하여 "NullReferenceException"오류가 발생한다.

 


참고자료

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함