도드넷
C# 객체 new 생성시 기본값 - string 기본값이 NULL? 본문
C# 객체를 새로 생성하는 키워드 new 로 새로운 객체를
만들었을시 내부 변수 초기화에 대하여.
Pony Vinyl = new Pony();
라고 하면
Vinyl.name 이라는 string 프로퍼티의 초기화 값은
""(될수도있음) 혹은 " "(아예안됨)
이 아니라
null 이 된다.
Wait,
string 값이 null ???
WHAT THE FUCK?
그렇다.
느낌상 string은 int 나 float 처럼 null 이 될수없는
"값"이라고 생각할 수 있지만
string은 명백히 레퍼런스 변수다.
이게 큰 문제가 되는 이유는 바로
[string값이 없으면...] 같은 조건문을 작성할때다.
if(SomePony.name == "") ...
이런식으로 조건문을 작성했을때
만약 해당객체가 유니티 에디터상 이미 Serialized(존재) 되서
형체가 있으면 == "" 조건식이 말은 된다.
그런데
C# 스크립트상 new 키워드로 새로 만들어진 객체라면
해당 string 변수의 값은 아예 존재하지 않는 NULL이 되버린다.
그러면
if(SomePony.name == "") ... 은 무시되어 버린다.
만약 하부 조건에 else if(SomePony.name != "") 같은 구조로 되어있으면
무조건 else if 로 들어가버린다.
보통 객체 가지고 놀때 해당 프로퍼티 값이 null 이면
null reference 오류가 나는데 여기선 그런것도 없다;;;;
즉 정리하자면
new 키워드로 객체가 생성됬을때
SomePony.name의 값은 null 이 된다.
하지만 특이하게도 name 이라는 프로퍼티에 접근 했을때 Null Reference 오류는 발생하지 않고
name == "" 은 만족하지 않는다.
하지만 name != "" 은 만족한다.
고로 여기서 null 이라는것은 흔히 생각하는 "없음"이 아니라 일종의 귀신같은(?) string 값으로
null (공백) 이라는 일종의 특이한 유령값[GHOST-VALUE]이라고 보면될것같다.
최종결론
new 키워드로 객체를 새로 생성했을때 string 프로프티의 자동 초기화값은
[공백(Null)(엔터아님,스페이스바아님,""아님)] 이다.
*Heads Up : 유니티 에디터상 객체가 시리얼라이즈되서 이미 존재할시 기본값은 "" 임.
'창고 > 게임 개발 [Hidden]' 카테고리의 다른 글
유니티 C# 딕셔너리 저장? List Dictionary화 JSON Serialize 하는 방법. (0) | 2020.10.03 |
---|---|
유니티 Assertion failed on expression 해결 - CurrentHidden...? (0) | 2020.09.19 |
C# enum 인덱스로 접근하기, enum 길이? (Feat. Enum 랜덤뽑기) (0) | 2020.09.03 |
모바일 게임 최적화 - 개발에 있어서 매우 주의해야할 사항 (0) | 2020.08.25 |
C# 객체복사 MemberwiseClone - 잠깐 List 는 안된다고? (3) | 2020.08.21 |