Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘2022/12 (8)

KoreanFoodie's Study

[언리얼] inline κ³Ό FORCEINLINE 의 차이

inline κ³Ό FORCEINLINE 의 차이 사싀 이 λ‘˜μ˜ μ°¨μ΄λŠ” 이미 λ‹¨μ–΄μ—μ„œ μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€. 일단 ν•¨μˆ˜μ˜ μΈλΌμΈν™”λΌλŠ” 것은, μ»΄νŒŒμΌλŸ¬κ°€ ν•¨μˆ˜ λ°”λ””λ₯Ό 컴파일 νƒ€μž„μ— λΆ™μ—¬ λ„£μ–΄ ν•¨μˆ˜ 호좜의 μ˜€λ²„ν—€λ“œλ₯Ό μ€„μ΄λŠ” μ΅œμ ν™” 방식이라고 λ³Ό 수 μžˆλ‹€. C++ μ—μ„œ inline 은 μ»΄νŒŒμΌλŸ¬μ—κ²Œ ν•¨μˆ˜λ₯Ό 인라인화할 것을 'μš”μ²­' ν•œλ‹€. μ΄λŠ” 'λͺ…λ Ή' μ΄λ‚˜ 'κ°•μ œ'κ°€ μ•„λ‹ˆλ‹€. λ³΅μž‘ν•œ ν•¨μˆ˜λ‚˜ κ°€μƒν•¨μˆ˜λŠ” μ»΄νŒŒμΌλŸ¬κ°€ 인라인화 해주지 μ•ŠμœΌλ©°, inline ν‚€μ›Œλ“œλ₯Ό 쓰지 μ•Šλ”λΌλ„ μž‘κ³  κ°„λ‹¨ν•œ ν•¨μˆ˜μ˜ 경우 μ»΄νŒŒμΌλŸ¬κ°€ μ•Œμ•„μ„œ 인라인화λ₯Ό ν•΄ 주기도 ν•œλ‹€. 반면 FORCEINLINE 은 말 κ·ΈλŒ€λ‘œ κ°•μ œμ μœΌλ‘œ 인라인화λ₯Ό μ‹œν‚¨λ‹€. μƒμ„±μžμ™€ μ†Œλ©Έμž λ“±, 인라인화 μ‹œν‚€κΈ°μ— μ ν•©ν•˜μ§€ μ•Šμ€ν•¨μˆ˜λ“€μ΄ 생각보닀 많이 μ‘΄μž¬ν•˜λ―€λ‘œ, FORCEINLI..

Game Dev/Unreal C++ : Dev Log 2022. 12. 28. 11:58
C++ DevNote : νƒ€μž… 정보 RTTI(Runtime Type Infomation or Runtime Type Identification) 에 λŒ€ν•˜μ—¬

C++ 에 λŒ€ν•΄ κ³΅λΆ€ν•œ 것과, κ°œλ°œν•˜λ©΄μ„œ μ•Œκ²Œ 된 것듀을 λ‹€λ£Ήλ‹ˆλ‹€ RTTI RTTI λŠ” κ°„λ‹¨νžˆ 말해, μ‹€μ‹œκ°„ νƒ€μž… μ •λ³΄λΌλŠ” λœ»μ΄λ‹€. RTTI λΌλŠ” 단어λ₯Ό ν‰μ†Œμ—λŠ” 잘 λ“€μ–΄λ³Ό 일이 μ—†λ‹€κ°€, dynamic_cast λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ μ˜΅μ…˜μ„ λ’€μ μ΄λ˜ 쀑 ν•΄λ‹Ή ν•­λͺ©μ„ λ°œκ²¬ν–ˆλ‹€. μ•Œλ‹€μ‹œν”Ό, C++ λŠ” λ¦¬ν”Œλ ‰μ…˜ κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. C# μ—μ„œλŠ” λ¦¬ν”Œλ ‰μ…˜μ„ μ œκ³΅ν•˜λŠ”λ°, ν•΄λ‹Ή κΈ°λŠ₯은 λŸ°νƒ€μž„μ—μ„œ 클래슀 νƒ€μž…, λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹° λ“±μ˜ 메타 정보λ₯Ό μ œκ³΅ν•΄ μ€€λ‹€. λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€μ—μ„œλŠ” ν•΄λ‹Ή κΈ°λŠ₯을 끄고 킬 수 있게 λ§Œλ“€μ–΄ λ†“μ•˜λ‹€. κ°„λ‹¨νžˆ 말해, ν•΄λ‹Ή κΈ°λŠ₯을 ν‚€κ²Œ 되면 λŸ°νƒ€μž„μ—μ„œ νƒ€μž…μ— λŒ€ν•œ 정보λ₯Ό 얻을 수 μžˆλ‹€. RTTI λŠ” 가상 ν•¨μˆ˜κ°€ μžˆλŠ” ν΄λž˜μŠ€μ— λŒ€ν•΄μ„œλ§Œ λ™μž‘ν•˜λ©°, μ΄λŠ” 클래슀의 νƒ€μž… κ΄€λ ¨ 정보가 v..

Tutorials/C++ : Expert 2022. 12. 27. 21:47
C++ DevNote : νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ 기반 클래슀 μƒμ„±μž μ œλŒ€λ‘œ ν˜ΈμΆœν•˜κΈ°

C++ 에 λŒ€ν•΄ κ³΅λΆ€ν•œ 것과, κ°œλ°œν•˜λ©΄μ„œ μ•Œκ²Œ 된 것듀을 λ‹€λ£Ήλ‹ˆλ‹€ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œμ˜ 기반 클래슀 μƒμ„±μž 호좜 사싀 νŒŒμƒ ν΄λž˜μŠ€κ°€ 생성될 λ•Œ, 기반 클래슀 μƒμ„±μžκ°€ ν˜ΈμΆœλœλ‹€λŠ” 건, C++ 을 μ‘°κΈˆμ΄λΌλ„ ν•΄ λ³Έ μ‚¬λžŒμ€ λˆ„κ΅¬λ‚˜ μ•Œκ³  μžˆλŠ” 사싀이닀. λ˜ν•œ ν•¨μˆ˜μ˜ μƒμ„±μž/μ†Œλ©Έμžμ˜ 호좜 μˆœμ„œκ°€ λ‹€μŒκ³Ό κ°™λ‹€λŠ” 것도, 읡히 μ•Œλ €μ§„ 사싀이닀. 즉, A ν΄λž˜μŠ€κ°€ 기반 클래슀이고, B ν΄λž˜μŠ€κ°€ νŒŒμƒ 클래슀라고 κ°€μ •ν–ˆμ„ λ•Œ B 클래슀 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ 호좜 μˆœμ„œκ°€ λ‹€μŒκ³Ό 같이 λ‚˜μ˜¬ 것이닀 : A 클래슀 μƒμ„±μž B 클래슀 μƒμ„±μž B 클래슀 μ†Œλ©Έμž A 클래슀 μ†Œλ©Έμž ν•˜μ§€λ§Œ ν•œ 가지 κΈ°μ–΅ν•΄μ•Ό ν•  것은, νŒŒμƒ 클래슀λ₯Ό λ§Œλ“€ λ•Œ ν˜ΈμΆœλ˜λŠ” 기반 클래슀 μƒμ„±μžλŠ” 'μΈμžκ°€ μ—†λŠ” 기반 클래슀의 μƒμ„±μž' 이닀. 즉, 인자λ₯Ό λ°›λŠ” ν˜•μ‹μ˜ 기반 클..

Tutorials/C++ : Expert 2022. 12. 27. 16:52
C++ DevNote : μš°μΈ‘κ°’κ³Ό μ’ŒμΈ‘κ°’ μ™„λ²½ 정리 (glvalue, rvalue, lvalue, xrvalue, prvalue)

C++ 에 λŒ€ν•΄ κ³΅λΆ€ν•œ 것과, κ°œλ°œν•˜λ©΄μ„œ μ•Œκ²Œ 된 것듀을 λ‹€λ£Ήλ‹ˆλ‹€ μš°μΈ‘κ°’κ³Ό μ’ŒμΈ‘κ°’ μš°λ¦¬λŠ” C++03 κΉŒμ§€, μš°λ¦¬λŠ” μš°μΈ‘κ°’κ³Ό μ’ŒμΈ‘κ°’ 두 κ°€μ§€μ˜ κ°œλ…μ„ μ‚¬μš©ν•˜μ—¬ 코딩을 ν–ˆμ—ˆλ‹€. κ°„λ‹¨νžˆ λ§ν•˜μžλ©΄, μ’ŒμΈ‘κ°’μ€ 'μ‹μ˜ μ’ŒμΈ‘μ— μžˆλŠ” λ³€μˆ˜'λ₯Ό, μš°μΈ‘κ°’μ€ 'μ‹μ˜ μš°μΈ‘μ— μžˆλŠ” κ°’'을 μ˜λ―Έν–ˆλ‹€. // a λŠ” μ’ŒμΈ‘κ°’, 5 λŠ” μš°μΈ‘κ°’μ΄λ‹€ int a = 5; ν”νžˆλ“€ μ’ŒμΈ‘κ°’μ„ '이름이 μžˆλŠ” 녀석'으둜 μΈμ‹ν•˜κΈ°λ„ ν–ˆλ‹€. μ—„λ°€νžˆ λ§ν•˜λ©΄ ν‹€λ¦° 말은 μ•„λ‹ˆλ‹€. 그런데 move semantics κ°€ λ„μž…λ˜κΈ° μ‹œμž‘ν•˜λ©΄μ„œ, C++11 λΆ€ν„° λŒ€κ²©λ³€μ΄ μ‹œμž‘λ˜λŠ”λ°... μ—¬κΈ°μ„œ λ§Žμ€ μ‚¬λžŒλ“€μ΄ μ’ŒμΈ‘κ°’κ³Ό μš°μΈ‘κ°’μ— λŒ€ν•œ κ°œλ…μ„ ν—·κ°ˆλ €ν•˜κΈ° μ‹œμž‘ν•œλ‹€(ν•„μž 포함). move semantics κ°€ 뭔지 잘 λͺ¨λ₯΄κ² λ‹€λ©΄, 이전 κΈ€(기초, μ‘μš©, 심화)을 κΌ­ 읽고 였자..

Tutorials/C++ : Expert 2022. 12. 26. 17:28
C++ DevNote : const_cast 의 κ°œλ…κ³Ό 주의점

C++ 에 λŒ€ν•΄ κ³΅λΆ€ν•œ 것과, κ°œλ°œν•˜λ©΄μ„œ μ•Œκ²Œ 된 것듀을 λ‹€λ£Ήλ‹ˆλ‹€ const_cast λ§Žμ€ μ‚¬λžŒλ“€μ΄ μ•Œκ³  μžˆλ“―μ΄, C++ μ—μ„œ μ œκ³΅ν•˜λŠ” casting 의 μ’…λ₯˜λŠ” 크게 4 가지이닀. 각 μš©λ„λ₯Ό κ°„λ‹¨νžˆ 적어보면 λ‹€μŒκ³Ό κ°™λ‹€ : static_cast : '일반적인' C μŠ€νƒ€μΌμ˜ μΊμŠ€νŒ…. 보톡 μ—…μΊμŠ€νŒ…(νŒŒμƒ 클래슀의 포인터λ₯Ό 기반 클래슀의 ν¬μΈν„°λ‘œ 가리킴) μ‹œ μ‚¬μš©ν•œλ‹€. dynamic_cast : 상속 관계에 μžˆλŠ” ν΄λž˜μŠ€λ“€ μ‚¬μ΄μ˜ μΊμŠ€νŒ…. 보톡 λ‹€μš΄ μΊμŠ€νŒ…(기반 클래슀의 포인터λ₯Ό νŒŒμƒ 클래슀의 ν¬μΈν„°λ‘œ 가리킴) μ‹œ μ‚¬μš©ν•œλ‹€. λ§Œμ•½ μ‹€νŒ¨ν•˜λ©΄ nullptr λ₯Ό λ¦¬ν„΄ν•œλ‹€. 참고둜, dynamic_cast λŠ” polymorphic ν•œ 클래슀만 κ°€λŠ₯ν•œλ°, κ°„λ‹¨νžˆ λ§ν•˜λ©΄ virtual ν•¨μˆ˜κ°€ ν¬ν•¨λœ ν΄λž˜μŠ€μ΄μ–΄μ•Ό dynam..

Tutorials/C++ : Expert 2022. 12. 26. 14:11
[언리얼] Slate(슬레이트)의 ꡬ쑰와 μ² ν•™ (곡식 λ¬Έμ„œ ν•΄μ„€ 및 정리)

슬레이트 ꡬ쑰 (μ•„ν‚€ν…μ²˜) 사싀 μ–Έλ¦¬μ–Όμ—λŠ” 이미 UMG λΌλŠ”, 맀우 νŽΈλ¦¬ν•œ μœ„μ ― κ΄€λ ¨ 툴이 μ‘΄μž¬ν•œλ‹€. ν•˜μ§€λ§Œ μ½”λ“œλ‘œ UI λ₯Ό μ»¨νŠΈλ‘€ν•  수 μžˆλ‹€λŠ” μž₯점 λ•Œλ¬Έμ—, μ‹€μ œλ‘œ λ§Žμ€ κ³³μ—μ„œ 슬레이트(Slate) λ₯Ό ν™œμš©ν•˜κ³  μžˆλ‹€. μŠ¬λ ˆμ΄νŠΈλŠ” μ–΄λ–€ 녀석이고, μ–΄λ–»κ²Œ λ””μžμΈλ˜μ–΄ μžˆλŠ”μ§€, 곡식 λ¬Έμ„œ(λ²ˆμ—­λ³Έ)λ₯Ό 톡해 λ¨Όμ € κ°„λ‹¨ν•˜κ²Œ 짚고 λ„˜μ–΄κ°€λ„λ‘ ν•˜μž! 이번 κΈ€μ—μ„œλŠ” μŠ¬λ ˆμ΄νŠΈκ°€ μΆ”κ΅¬ν•˜λŠ” λ°©ν–₯κ³Ό 철학에 λŒ€ν•΄ 닀룬닀. 일단, 에디터 μΈν„°νŽ˜μ΄μŠ€μ˜ λŒ€λΆ€λΆ„μ€ 슬레이트둜 μ œμž‘λ˜μ–΄ μžˆλ‹€. Contents Browser 뿐만 μ•„λ‹ˆλΌ λΈ”λ£¨ν”„λ¦°νŠΈ 에디터, μ• λ‹ˆλ©”μ΄μ…˜ 에디터 λ“± 엔진 μΈν„°νŽ˜μ΄μŠ€μ˜ λŒ€λΆ€λΆ„μ„ μ°¨μ§€ν•˜κ³  μžˆλ‹€. μŠ¬λ ˆμ΄νŠΈλŠ” λ‹€μŒκ³Ό 같은 접근법을 μ‚¬μš©ν•œλ‹€ : (뢈투λͺ… μΊμ‹œμ™€ 쀑볡 μŠ€ν…Œμ΄νŠΈλ₯Ό ν”Όν•˜κΈ° μœ„ν•΄. μ „ν†΅μ μœΌλ‘œ UI λŠ” μŠ€ν…Œμ΄νŠΈλ₯Ό ..

Game Dev/Unreal C++ : Dev Log 2022. 12. 7. 16:29
[언리얼] μ–Έλ¦¬μ–Όμ—μ„œ 더티 ν”Œλž˜κ·Έ(Dirty Flag) νŒ¨ν„΄ μ‚¬μš©ν•˜κΈ°

더티 ν”Œλž˜κ·Έ νŒ¨ν„΄μ΄λž€? 더티 ν”Œλž˜κ·Έ νŒ¨ν„΄μ— λŒ€ν•΄μ„œλŠ”, 이전 λΈ”λ‘œκ·Έ κΈ€μ—μ„œ κ°„λ‹¨ν•˜κ²Œ μ–ΈκΈ‰ν•œ λ°” μžˆλ‹€. 더티 ν”Œλž˜κ·Έ νŒ¨ν„΄μ€ 일반적으둜 λ Œλ”λ§ κ³Όμ •μ—μ„œ, 계측 ꡬ쑰가 μ‘΄μž¬ν•  경우, ν•„μš”ν•  λ•Œ / ν•„μš”ν•œ 타이밍에 화면을 κ°±μ‹ ν•˜λŠ” λΆ€λΆ„μ—μ„œ 자주 쓰인닀. λ˜ν•œ 더티 ν”Œλž˜κ·Έλ₯Ό 체크해 UI λ₯Ό κ°±μ‹ ν•˜κ²Œ 되면, Tick λ§ˆλ‹€ UI μ—…λ°μ΄νŠΈκ°€ μ€‘λ³΅ν•΄μ„œ μΌμ–΄λ‚˜λŠ” 것을 막을 수 μžˆλ‹€. κ·Έλ ‡λ‹€λ©΄ 이 νŒ¨ν„΄μ„ μ–Έλ¦¬μ–Όμ—μ„œλŠ” μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ μš©ν•΄ λ³Ό 수 μžˆμ„κΉŒ? 예λ₯Ό λ“€μ–΄, μš°λ¦¬κ°€ μ–΄λ–€ UI λ₯Ό κ°±μ‹  ν•˜λŠ”λ°,Dirty Flag λ₯Ό 두어 ν•΄λ‹Ή 더티 ν”Œλž˜κ·Έκ°€ 켜져 μžˆμ„ λ•Œλ§Œ UI λ₯Ό κ°±μ‹ ν•œλ‹€κ³  κ°€μ •ν•΄ 보자. 일단, μ‹€μ œλ‘œ UI 클래슀λ₯Ό λ§Œλ“€κΈ° 전에, 더티 ν”Œλž˜κ·Έ νŒ¨ν„΄μ„ μ‚¬μš©ν•  μœ„μ ―λ“€μ΄ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•  μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν•  수..

Game Dev/Unreal C++ : Dev Log 2022. 12. 1. 18:09