티스토리 뷰
개요
유니티 프로젝트를 진행하며 코드 작성 중 궁금한 점을 발견했다.
스크립트 _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.
위 문장을 요약하면 다음과 같다.
- if문의 &&연산자가 첫 조건에서 false가 되면 다음 조건을 확인하지 않는다.
- 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"오류가 발생한다.
참고자료
'Computer Language > C#' 카테고리의 다른 글
[C#] 박싱과 언박싱 (Boxing & Unboxing) (1) | 2024.03.27 |
---|---|
[C#] 메모리 할당 (0) | 2023.08.15 |
[C#] StringBuilder (0) | 2023.08.15 |
[C#] 문자열 연결 방법 (+, Concat, Format, Interpolation, Join, StringBuilder) (0) | 2023.08.14 |
[C#] String.Remove 메서드 - 문자열 제거 (0) | 2023.08.14 |
- Total
- Today
- Yesterday
- 함수
- 크기
- 컴파일
- 레지스터
- 구조
- 명령어
- CPU
- dynamic_cast
- New
- 운영체제
- 포인터
- static_cast
- 인터럽트
- 프로세스
- 백준
- thread
- 스레드
- 알고리즘
- 멀티스레드
- 상속
- 입출력
- const
- malloc
- 수학
- 할당
- 게임수학
- 클래스
- 메모리
- c++
- 초기화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |