λͺ©λ‘μ 체 κΈ (1096)
KoreanFoodie's Study
C++ μ λν΄ κ³΅λΆν κ²κ³Ό, κ°λ°νλ©΄μ μκ² λ κ²λ€μ λ€λ£Ήλλ€ νμ ν΄λμ€μμμ κΈ°λ° ν΄λμ€ μμ±μ νΈμΆ μ¬μ€ νμ ν΄λμ€κ° μμ±λ λ, κΈ°λ° ν΄λμ€ μμ±μκ° νΈμΆλλ€λ 건, C++ μ μ‘°κΈμ΄λΌλ ν΄ λ³Έ μ¬λμ λꡬλ μκ³ μλ μ¬μ€μ΄λ€. λν ν¨μμ μμ±μ/μλ©Έμμ νΈμΆ μμκ° λ€μκ³Ό κ°λ€λ κ²λ, μ΅ν μλ €μ§ μ¬μ€μ΄λ€. μ¦, A ν΄λμ€κ° κΈ°λ° ν΄λμ€μ΄κ³ , B ν΄λμ€κ° νμ ν΄λμ€λΌκ³ κ°μ νμ λ B ν΄λμ€ λ³μλ₯Ό μ μΈνλ©΄ νΈμΆ μμκ° λ€μκ³Ό κ°μ΄ λμ¬ κ²μ΄λ€ : A ν΄λμ€ μμ±μ B ν΄λμ€ μμ±μ B ν΄λμ€ μλ©Έμ A ν΄λμ€ μλ©Έμ νμ§λ§ ν κ°μ§ κΈ°μ΅ν΄μΌ ν κ²μ, νμ ν΄λμ€λ₯Ό λ§λ€ λ νΈμΆλλ κΈ°λ° ν΄λμ€ μμ±μλ 'μΈμκ° μλ κΈ°λ° ν΄λμ€μ μμ±μ' μ΄λ€. μ¦, μΈμλ₯Ό λ°λ νμμ κΈ°λ° ν΄..
C++ μ λν΄ κ³΅λΆν κ²κ³Ό, κ°λ°νλ©΄μ μκ² λ κ²λ€μ λ€λ£Ήλλ€ μ°μΈ‘κ°κ³Ό μ’μΈ‘κ° μ°λ¦¬λ C++03 κΉμ§, μ°λ¦¬λ μ°μΈ‘κ°κ³Ό μ’μΈ‘κ° λ κ°μ§μ κ°λ μ μ¬μ©νμ¬ μ½λ©μ νμλ€. κ°λ¨ν λ§νμλ©΄, μ’μΈ‘κ°μ 'μμ μ’μΈ‘μ μλ λ³μ'λ₯Ό, μ°μΈ‘κ°μ 'μμ μ°μΈ‘μ μλ κ°'μ μλ―Ένλ€. // a λ μ’μΈ‘κ°, 5 λ μ°μΈ‘κ°μ΄λ€ int a = 5; ννλ€ μ’μΈ‘κ°μ 'μ΄λ¦μ΄ μλ λ μ'μΌλ‘ μΈμνκΈ°λ νλ€. μλ°ν λ§νλ©΄ νλ¦° λ§μ μλλ€. κ·Έλ°λ° move semantics κ° λμ λκΈ° μμνλ©΄μ, C++11 λΆν° λ격λ³μ΄ μμλλλ°... μ¬κΈ°μ λ§μ μ¬λλ€μ΄ μ’μΈ‘κ°κ³Ό μ°μΈ‘κ°μ λν κ°λ μ ν·κ°λ €νκΈ° μμνλ€(νμ ν¬ν¨). move semantics κ° λμ§ μ λͺ¨λ₯΄κ² λ€λ©΄, μ΄μ κΈ(κΈ°μ΄, μμ©, μ¬ν)μ κΌ μ½κ³ μ€μ..
C++ μ λν΄ κ³΅λΆν κ²κ³Ό, κ°λ°νλ©΄μ μκ² λ κ²λ€μ λ€λ£Ήλλ€ const_cast λ§μ μ¬λλ€μ΄ μκ³ μλ―μ΄, C++ μμ μ 곡νλ casting μ μ’ λ₯λ ν¬κ² 4 κ°μ§μ΄λ€. κ° μ©λλ₯Ό κ°λ¨ν μ μ΄λ³΄λ©΄ λ€μκ³Ό κ°λ€ : static_cast : 'μΌλ°μ μΈ' C μ€νμΌμ μΊμ€ν . λ³΄ν΅ μ μΊμ€ν (νμ ν΄λμ€μ ν¬μΈν°λ₯Ό κΈ°λ° ν΄λμ€μ ν¬μΈν°λ‘ κ°λ¦¬ν΄) μ μ¬μ©νλ€. dynamic_cast : μμ κ΄κ³μ μλ ν΄λμ€λ€ μ¬μ΄μ μΊμ€ν . λ³΄ν΅ λ€μ΄ μΊμ€ν (κΈ°λ° ν΄λμ€μ ν¬μΈν°λ₯Ό νμ ν΄λμ€μ ν¬μΈν°λ‘ κ°λ¦¬ν΄) μ μ¬μ©νλ€. λ§μ½ μ€ν¨νλ©΄ nullptr λ₯Ό 리ν΄νλ€. μ°Έκ³ λ‘, dynamic_cast λ polymorphic ν ν΄λμ€λ§ κ°λ₯νλ°, κ°λ¨ν λ§νλ©΄ virtual ν¨μκ° ν¬ν¨λ ν΄λμ€μ΄μ΄μΌ dynam..
μ¬λ μ΄νΈ ꡬ쑰 (μν€ν μ²) μ¬μ€ μΈλ¦¬μΌμλ μ΄λ―Έ UMG λΌλ, λ§€μ° νΈλ¦¬ν μμ ― κ΄λ ¨ ν΄μ΄ μ‘΄μ¬νλ€. νμ§λ§ μ½λλ‘ UI λ₯Ό 컨νΈλ‘€ν μ μλ€λ μ₯μ λλ¬Έμ, μ€μ λ‘ λ§μ κ³³μμ μ¬λ μ΄νΈ(Slate) λ₯Ό νμ©νκ³ μλ€. μ¬λ μ΄νΈλ μ΄λ€ λ μμ΄κ³ , μ΄λ»κ² λμμΈλμ΄ μλμ§, 곡μ λ¬Έμ(λ²μλ³Έ)λ₯Ό ν΅ν΄ λ¨Όμ κ°λ¨νκ² μ§κ³ λμ΄κ°λλ‘ νμ! μ΄λ² κΈμμλ μ¬λ μ΄νΈκ° μΆκ΅¬νλ λ°©ν₯κ³Ό μ² νμ λν΄ λ€λ£¬λ€. μΌλ¨, μλν° μΈν°νμ΄μ€μ λλΆλΆμ μ¬λ μ΄νΈλ‘ μ μλμ΄ μλ€. Contents Browser λΏλ§ μλλΌ λΈλ£¨νλ¦°νΈ μλν°, μ λλ©μ΄μ μλν° λ± μμ§ μΈν°νμ΄μ€μ λλΆλΆμ μ°¨μ§νκ³ μλ€. μ¬λ μ΄νΈλ λ€μκ³Ό κ°μ μ κ·Όλ²μ μ¬μ©νλ€ : (λΆν¬λͺ μΊμμ μ€λ³΅ μ€ν μ΄νΈλ₯Ό νΌνκΈ° μν΄. μ ν΅μ μΌλ‘ UI λ μ€ν μ΄νΈλ₯Ό ..
UUserWidget μ Native ν¨μ //native SObjectWidget methods (see the corresponding BlueprintImplementableEvent declarations above for more info on each) friend class SObjectWidget; virtual void NativeOnInitialized(); virtual void NativePreConstruct(); virtual void NativeConstruct(); virtual void NativeDestruct(); virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime); UserWidget μλ μ..
λν° νλκ·Έ ν¨ν΄μ΄λ? λν° νλκ·Έ ν¨ν΄μ λν΄μλ, μ΄μ λΈλ‘κ·Έ κΈμμ κ°λ¨νκ² μΈκΈν λ° μλ€. λν° νλκ·Έ ν¨ν΄μ μΌλ°μ μΌλ‘ λ λλ§ κ³Όμ μμ, κ³μΈ΅ κ΅¬μ‘°κ° μ‘΄μ¬ν κ²½μ°, νμν λ / νμν νμ΄λ°μ νλ©΄μ κ°±μ νλ λΆλΆμμ μμ£Ό μ°μΈλ€. λν λν° νλκ·Έλ₯Ό 체ν¬ν΄ UI λ₯Ό κ°±μ νκ² λλ©΄, Tick λ§λ€ UI μ λ°μ΄νΈκ° μ€λ³΅ν΄μ μΌμ΄λλ κ²μ λ§μ μ μλ€. κ·Έλ λ€λ©΄ μ΄ ν¨ν΄μ μΈλ¦¬μΌμμλ μ΄λ€ λ°©μμΌλ‘ μ μ©ν΄ λ³Ό μ μμκΉ? μλ₯Ό λ€μ΄, μ°λ¦¬κ° μ΄λ€ UI λ₯Ό κ°±μ νλλ°,Dirty Flag λ₯Ό λμ΄ ν΄λΉ λν° νλκ·Έκ° μΌμ Έ μμ λλ§ UI λ₯Ό κ°±μ νλ€κ³ κ°μ ν΄ λ³΄μ. μΌλ¨, μ€μ λ‘ UI ν΄λμ€λ₯Ό λ§λ€κΈ° μ μ, λν° νλκ·Έ ν¨ν΄μ μ¬μ©ν μμ ―λ€μ΄ 곡ν΅μ μΌλ‘ μ¬μ©ν μΈν°νμ΄μ€λ₯Ό λ€μκ³Ό κ°μ΄ μ μν μ..
μμ ― 리νλ ν° μΈλ¦¬μΌμ μμ ― 리νλ ν° κΈ°λ₯μ μ΄μ©νλ©΄, νμ¬ νλ μ΄νκ³ μλ μ°½μμ μ΄λ€ μμ ―μ΄ μ΄λ€ λΈλ£¨νλ¦°νΈλ₯Ό μ¬μ©νκ³ μλμ§, visibility μνλ μ΄λ νμ§ λ±μ νλμ νμ ν μ μλ€(μμ ― 리νλ ν° : μ°½ > κ°λ°μ ν΄ > μμ ― 리νλ ν°). λ μμΈν μ¬νμ μ΄λμ°λ λΈλ‘κ·Έμ μλν° νμ₯ κΈ°μ΄ κΈμ μ°Έκ³ νμ. μμ ννΈ ν μ€νΈ κ°λ₯ μμ ―μ λλ₯΄λ©΄, λ€μκ³Ό κ°μ΄ νλ μ΄ νλ©΄κ³Ό μμ ― 리νλ ν° μ°½μ΄ λ°λλ κ²μ νμΈν μ μλ€(μ΄λ―Έμ§λ 곡μ λ¬Έμμμ κ°μ Έμ΄) ν΄λΉ μμ ―μ κ³μΈ΅ ꡬ쑰λ₯Ό νμ ν μ μμΌλ©°, μ€μκ°μΌλ‘ μμ ―μ λκ³ ν¬ μλ μμ΄ μμ ― κ΄λ ¨ λλ²κΉ μ λ§€μ° μ μ©ν κΈ°λ₯μ΄λ€!
Asio λ Asynchronous IO μ μ½μμ΄λ€. Asio λ₯Ό μ΄ν΄νκΈ° μν΄μλ, λ€μκ³Ό κ°μ μ©μ΄λ€μ μκ³ μμ΄μΌ νλ€. IO Service ν΄λμ€ : 컀λμμ λ°μν μ μΆλ ₯ μ΄λ²€νΈλ₯Ό λμ€ν¨μΉ ν΄μ£Όλ κΈ°λ₯μ μν. λμ€ν¨μΉλ, μ°μ μμκ° λμ μμ μ΄ μ°μ μ μΌλ‘ μνλ μ μλλ‘ μμ€ν μμμ ν λΉνλ κ²μ μλ―Ένλ€. IO Service ν΄λμ€λ 컀λμμ λ°μν λ€νΈμν¬μμ μ μ λ° λ°μ΄ν° μ²λ¦¬ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ€. μ’ λ¨μ (Endpoint) : λ€νΈμν¬ μμ νΉμ μ»΄ν¨ν°μμ μ€νλκ³ μλ νλμ νλ‘κ·Έλ¨. ꡬ체μ μΌλ‘ IP μ£Όμμ ν¬νΈ λ²νΈμ ν μμ μ’ λ¨μ μ΄λΌκ³ ν¨. DNS(Domain Name Server) : Boost Asio μμλ λλ©μΈ μ£Όμλ₯Ό μ΄μ©, IP μ£Όμλ₯Ό μμλ΄μ΄ μ’ λ¨μ μ ꡬνλ€. ..
IOCPλ CPU κ°μλ§νΌλ§ μ°λ λλ₯Ό μ°λ μλ²μ΄λ€. IOCP λ₯Ό μ¬μ©ν λͺ¨λ Send/Recv λ Overlapped I/O λ‘ λμνλ€. λ©ν°μ°λ λμμ λμνλ©°, μ½λ°±ν¨μλ€μ λμμ λμν΄μ μ±λ₯μ λμΈλ€. IOCPκ° μ¬μ©νλ IOCP κ°μ²΄λ 컀λ μμμ κ΄λ¦¬λλ€. 컀λ λ΄μλ DEVICE LIST λΌλ μλ£κ΅¬μ‘°κ° μ‘΄μ¬νλλ°, μμΌμ IOCP μ λ±λ‘νλ©΄ IOCP κ°μ²΄λ DEVICE_LIST μ μμΌλ€μ λ±λ‘ν΄μ μ²λ¦¬νλ€. νλ‘κ·Έλλ¨Έλ DEVICE_LIST λ₯Ό μ§μ 보거λ μ μ΄ν μ μλ€. νλ¦μ λ€μκ³Ό κ°μ΄ μμ½ν΄ λ³Ό μ μμ κ² κ°λ€ : I/O λλ°μ΄μ€(μμΌ, FD) IOCP μ λ±λ‘ : CreateIoCompletionPrt ν¨μλ₯Ό ν΅ν΄ λλ°μ΄μ€μ CompletionPort(μ΄ν CP) λ₯Ό λ°μΈ..
μ΄λμ°λμ 'μ΄λμ°μ κ²μμν' μ± μ 보며 μ’μ λ΄μ©μ μ 리νκ³ μμ΅λλ€. λ μμΈν λ΄μ©μ΄ κΆκΈνμλ€λ©΄, μ± μ κ΅¬λ§€ν΄ μ§μ μ½μ΄λ³΄μκΈ°λ₯Ό μΆμ²λ립λλ€! λ³ν νλ ¬μ μνλ ¬ λ€μν λ³ν νλ ¬λ€μ μνλ ¬μ μμ보μ. ν¬κΈ° λ³ννλ ¬ κ° κΈ°μ 벑ν°μ ν¬κΈ°λ₯Ό κ°κ° a, b λ§νΌ ν€μ°λ ν¬κΈ° λ³ννλ ¬μ μνλ ¬μ λ€μκ³Ό κ°λ€. μ λ¨ λ³ννλ ¬ ννμ¬λ³ν μ²λΌ λ―Έλλ¬μ§κ² μκΈ΄ μ λ¨ λ³ννλ ¬μ μνλ ¬μ λ€μκ³Ό κ°λ€. νμ λ³ννλ ¬ νμ λ³ννλ ¬μ μνλ ¬μ λ€μκ³Ό κ°λ€. ΞΈ λ§νΌ λ°μκ³ λ°©ν₯μΌλ‘ νμ μν€λ νλ ¬μ μνλ ¬μ ꡬνκΈ° μν΄μλ, -ΞΈ λ§νΌ λ°μκ³ λ°©ν₯μΌλ‘ νμ μν€λ νλ ¬μ μκ°ν΄λ³΄λ©΄ λλ€! μΌκ°ν¨μμ μ±μ§μ μ΄μ©νλ©΄ κ°λ¨ν ꡬν μ μλ€.