관리 메뉴

도드넷

C# 객체 new 생성시 기본값 - string 기본값이 NULL? 본문

창고/게임 개발 [Hidden]

C# 객체 new 생성시 기본값 - string 기본값이 NULL?

도드! 2020. 9. 3. 11:30




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 : 유니티 에디터상 객체가 시리얼라이즈되서 이미 존재할시 기본값은 "" 임.





반응형
Comments