const bool bFoliageDiscardOnLoad = !!CVarFoliageDiscardDataOnLoad.GetValueOnGameThread();
위 코드에서 !! 연산자가 있다는 걸 알 수 있죠.
이걸 리펙토링 하면.
const bool bShouldDiscardFoliageDataOnLoad = CVarFoliageDiscardDataOnLoad.GetValueOnGameThread() != 0;
이것과 같습니다.
- 변수 이름 변경 (Renaming): bFoliageDiscardOnLoad를 bShouldDiscardFoliageDataOnLoad로 변경하여 변수의 역할을 더 잘 표현.
- 문법 단순화: !! 연산자를 제거하고 GetValueOnGameThread() 메서드가 반환하는 값을 명시적으로 논리형으로 변환해 코드의 의도를 분명히 함.
- 사용성 개선: 기존보다 가독성과 코드의 맥락 이해도가 높아졌으며, 추가적인 연산이나 오해를 줄임.
아무튼 그건 그렇고...
언리얼 엔진 코드에서 !! 연산자는 주로 정수 또는 기타 값들을 명시적으로 논리(boolean) 값으로 변환할 때 사용됩니다. 이는 코드의 가독성을 높이고, "명시적 변환"임을 강조하려는 의도를 가질 때 사용하는 패턴으로, Unreal Engine의 코딩 스타일에서는 비교적 흔히 볼 수 있는 방법입니다.
const bool bFlag = !!SomeIntegerValue;
위 코드는 SomeIntegerValue가 0이 아닌 경우 true, 0이면 false가 되도록 변환합니다.
!! 연산은 두 번의 논리 부정을 수행하여 정수 값을 명시적인 bool 타입으로 변환합니다.
언리얼 엔진에서 사용 시 고려 사항
- 장점:
- 의도를 명확히 표현: "이 값을 논리값으로 사용하려고 변환한다."는 점을 명시적으로 보임.
- 코드 일관성: 엔진 내부에서 유사한 패턴으로 일관성 제공.
- 단점:
- 일부 개발자는 !! 표기법이 과도하게 직관적이지 않다고 느낄 수 있음.
- 대안으로 명시적인 비교문 또는 캐스팅(예: (bool)) 연산 사용을 선호할 수도 있음.
엔진 내부에서 !!의 대안
경우에 따라서는 다음과 같이 대체하여 사용할 수도 있습니다:
- 명시적 비교: CVarValue != 0를 사용.
- 정적 캐스팅: const bool bFlag = static_cast<bool>(Value);
언리얼 엔진 스타일 관례 활용
언리얼 엔진 사용자라면 !! 연산자를 사용하는 것이 익숙할 수 있습니다. 그러나 프로젝트에 따라 코드 스타일 가이드를 준수하여 적절히 선택하면 됩니다.
결론적으로, 두 가지 스타일 모두 사용 가능하지만, !! 연산자는 언리얼 코드에서 간결함과 의도 전달의 목적으로 자주 사용됩니다.
'UNREAL ENGINE' 카테고리의 다른 글
TAutoConsoleVariable 와 FAutoConsoleVariableRef (0) | 2025.02.26 |
---|---|
VIEW_UNIFORM_BUFFER_MEMBER 와 VIEW_UNIFORM_BUFFER_MEMBER_PER_VIEW (0) | 2025.02.26 |
World Partition-> Runtime Partition (0) | 2025.02.17 |
모바일 셰이더 구조 분석 및 정리.1 (0) | 2025.02.05 |
Actor Cluster Created 에 대하여... (0) | 2025.01.21 |