λͺ©λ‘μ 체 κΈ (1096)
KoreanFoodie's Study
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 1 : C++ λ₯Ό μΈμ΄λ€μ μ°ν©μ²΄λ‘ λ°λΌλ³΄λ μλͺ©μ νμ ν΅μ¬ : 1. C++ λ₯Ό μ¬μ©ν ν¨κ³Όμ μΈ νλ‘κ·Έλλ° κ·μΉμ, C++ μ μ΄λ€ λΆλΆμ μ¬μ©νλλμ λ°λΌ λ¬λΌμ§λ€! C++ μ μ΄λ£¨κ³ μλ νμ μμ (Building Block) μ ν¬κ² 4 κ°μ§μ΄λ€. C (C μλ ν νλ¦Ώλ μκ³ , μμΈλ μκ³ , μ€λ²λ‘λ©λ μλ€) κ°μ²΄ μ§ν₯ κ°λ μ C++ (ν΄λμ€λ₯Ό μ°λ C μ κ΄ν λͺ¨λ κ²λ€. μΊ‘μν, μμ, λ€νμ±, κ°μν¨μ λ±) ν νλ¦Ώ C++ (ν νλ¦Ώ λ©ν νλ‘κ·Έλλ°κΉμ§) STL (container, iterator, algorithm, fu..
μ΄λμ°λμ 'μ΄λμ°μ κ²μμν' μ± μ 보며 μ’μ λ΄μ©μ μ 리νκ³ μμ΅λλ€. λ μμΈν λ΄μ©μ΄ κΆκΈνμλ€λ©΄, μ± μ κ΅¬λ§€ν΄ μ§μ μ½μ΄λ³΄μκΈ°λ₯Ό μΆμ²λ립λλ€! μΌκ°ν¨μλ₯Ό νμ©ν 물체μ νμ μΌκ°ν¨μλ₯Ό ν΅ν΄ 물체λ₯Ό νμ νλ©΄ μ’νκ°μ΄ μ΄λ»κ² λ³ν κΉ? λ¨Όμ , λ€μκ³Ό κ°μ΄ μ’ν (1, 1) μ θ λ§νΌ λ°μκ³ λ°©ν₯μΌλ‘ νμ νλ©΄, λ€μκ³Ό κ°μ΄ κ·Έλ €μ§κ² λλ€. μμμ, λ²‘ν° v λ κΈ°μ λ²‘ν° e1 μ e2 μ ν©μΌλ‘ ννλλ©°, μ΄λ₯Ό κ° θ λ§νΌ νμ μν¨ λ μμ (cosθ - sinθ, sinθ + cosθ) λ‘ ννν μ μμμ μ μ μλ€. λμΌν μ리λ‘, μμμ λ²‘ν° (x, y) λ₯Ό κ° θ λ§νΌ νμ μμΌ (x', y') λ₯Ό ꡬν΄λ³΄μ. μμ λ€μκ³Ό κ°μ΄ μΈ μ μλ€. κΈ°μ 벑ν°λ₯Ό νμ©νλ©΄, μμμ λ²‘ν° u λ₯Ό κ° θ λ§..
λ¨Όμ Message Pump λ, ν λ©μμ§λ₯Ό μ²λ¦¬νλ λμ€ λ©μμ§ νλ‘λΆν° λ€λ₯Έ λ©μμ§λ₯Ό κΊΌλ΄ μ΄λ₯Ό μ²λ¦¬νλ μ½λλ₯Ό μλ―Ένλ€. μλμ° μ΄ν리μΌμ΄μ μ κ²½μ°, UI λ° μ¬μ©μ μ λ ₯ μ²λ¦¬νλ κ³Όμ μμ λ©μμ§ ννλ₯Ό μ κ·Ή νμ©νκ³ μλ€. κΈ°μ΄μ μΈ Message Loop μ½λλ λ€μκ³Ό κ°λ€. MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } κ·Έλ°λ° GetMessage μ κ²½μ° λ°λνμ(λ©μμ§νμ λ©μμ§κ° μμ΄ GetMessage κ° λκ³ μλ μκ°)μ μ λλ‘ νμ©ν μ μμ΄, PeekMessage λ₯Ό λ§μ΄ νμ©νλ€. PeekMessage λ λ©μμ§ νμ λ©μμ§κ° μλ μλ 리ν΄μ νκΈ° λλ¬Έ..
Actor μ ActorComponent μ λν°μμλ κ²μ μ€λΈμ νΈ μλμ κ²μ μ€λΈμ νΈλ₯Ό λ£λ μμΌλ‘ Hierarchy λ₯Ό λ§λ€μ΄λΌ μ μλ€. νμ§λ§ μΈλ¦¬μΌμ κ·Έλ° μμΌλ‘ λμνμ§ μλλ€. μ λν°μμλ νκ³΅κΈ°κ° μλ€κ³ νμ λ, ν리νΉμ κ°μ’ κ²μ μ€λΈμ νΈλ₯Ό νμμ λ£μ΄ μ‘°ν©νλ λ°©μμΌλ‘ ν΄λΉ μ€λΈμ νΈλ₯Ό μ μν μ μλ€. κ·Έλ°λ° μΈλ¦¬μΌμμ Actor λ Bucket κ°μ κ°λ μΌλ‘, λ€μν μ‘ν° μ»΄ν¬λνΈλ₯Ό λ΄κ³ μλ€. μ¦, μΈλ¦¬μΌμ Bucket μμ λ€λ₯Έ Bucket μ λ£λ λ°©μμΌλ‘ μ€λΈμ νΈλ₯Ό μμ±νμ§ μλλ€. μ‘ν° μ»΄ν¬λνΈλ μ¬μ¬μ©κ°λ₯ν κΈ°λ₯μ μ μνλ μ»΄ν¬λνΈμ λν λ² μ΄μ€ ν΄λμ€λ‘ μΆ©λ, λ©μ, μλ μ΄λ, μ리 μ¬μ, λΉκ³Ό λͺ μ λ±μ λ€μν κΈ°λ₯μ μ§μνλ€. μΈλ¦¬μΌμμλ νΈλμ€νΌμ κ°μ§ μ‘ν° μ»΄..
μΈλ¦¬μΌ μ½λ© νμ€ λͺ λͺ κ·μΉ : νμ€μΉΌμΌμ΄μ€, μ λμ¬(U - UObject μμ /A - AActor μμ /S - SWidget μμ / C - μν½μ κ°λ μ΄ μ μ¬ / b - λΆμΈ λ³μ / F - κ·Έ μΈ λλΆλΆ) ν¬ν°λΈ C++ μ½λ : bool(ν¬κΈ° μΆμ κΈμ§, BOOL μ μ»΄νμΌ μλ¨), TCHAR, uint8, int8, uint(16, 32, 64 λ²μ ) , float, double, PTRINT(ν¬μΈν°λ₯Ό κ°μ§ μ μλ μ μ, ν¬κΈ° μΆμ κΈμ§) νμ€ λΌμ΄λΈλ¬λ¦¬ μ¬μ© : νμ€ μ»¨ν μ΄λμ μ€νΈλ§μ interop μ½λλ₯Ό μ μΈνκ³ μ¬μ©νμ§ λ§μμΌ ν¨ μ½λ©νΈ : μ½λλ ꡬνμ μ€λͺ νκ³ , μ½λ©νΈλ κ·Έ μλλ₯Ό μ€λͺ νλ€. μ΅μ C++ μΈμ΄ λ¬Έλ² : static_assert μ¬μ©, override λ° final μ¬..
μΈλ¦¬μΌ κ°λΉμ§ 컬λ ν°(GC) μ¬ν μ 리 μΈλ¦¬μΌ μμ§μ Reference Graph λ₯Ό λ§λ€μ΄ μ€λΈμ νΈλ€μ μ¬μ© μ¬λΆλ₯Ό ꡬλΆνλ€. μ΄ κ·Έλν 루νΈμλ "Root Set" μ΄λΌκ³ μ§μ λ μ€λΈμ νΈ μ μ΄ μμΌλ©°, "Root Set" μ ν¬ν¨λ κ°μ²΄λ€μ GC λμμμ μ μΈλλ€(Mark & Sweep λ°©μμΌλ‘ μΆμ ). μΈ κ°μ§ κ·μΉ : UPROPERTY μ μΈ : ν΄λμ€ λ΄λΆ λ©€λ² λ³μκ° ν΄λμ€μ κ°μ²΄μ μλͺ κ³Ό μ΄λͺ μ ν¨κ»ν κ²½μ° μ μΈ λ©€λ²κ° κ°λ¦¬ν€λ ν¬μΈν° : μμ§μ΄ μΈμνκ±°λ κ΄λ¦¬νμ§ μλ λ©λͺ¨λ¦¬ μμμ κ°λ¦¬ν€λλ‘ λ§λ€λ©΄ μλ¨ TArray λ₯Ό νμ© : UObject λλ μμλ€μ λν ν¬μΈν°λ₯Ό μμ νκ² λ΄μ μ μλ μ μΌν 컨ν μ΄λ κΈ°ν μΈν°νμ΄μ€ μμ : // Object λ₯Ό μ΄μμκ² λ§λλ 3κ°μ§ λ°©λ²; //..
UML (Unified Modeling Language) UML μλ Class, Sequence, Use Case, Component λ± λ€μν μ’ λ₯κ° μμ§λ§, μ¬κΈ°μλ μ£Όλ‘ Class μ Sequence λ€μ΄μ΄κ·Έλ¨μ μ 리νλ€. ν΄λμ€ λ€μ΄μ΄κ·Έλ¨ (Class Diagram) ν΄λμ€λ€ μ¬μ΄μ κ΄κ³λ λ€μκ³Ό κ°μ΄ ννλ μ μλ€(μ°Έκ³ λ§ν¬). κ° κ΄κ³λ₯Ό μ‘°κΈ λ μμΈν κΈ°μ νλ©΄ λ€μκ³Ό κ°λ€. κ΄κ³ νμ μ€λͺ μ°κ΄ κ΄κ³ (association) μ€μ μ΄λ νμ΄ν μ°κ΄ κ΄κ³λ μ€λ μκ° λμ κ°μ΄ν κ°μ²΄μμ κ΄κ³λ₯Ό λνλΈλ€(e.g. μλμ°¨μ μμ μμ κ΄κ³) λ³΄ν΅ ν΄λμ€μ μμ±(λ©€λ² λ³μ)μμ μ°Έμ‘°ν λ μ°κ΄ κ΄κ³λ₯Ό κ°μ§λ€. λ¨λ°©ν₯ μ°κ΄ κ΄κ³μ κ²½μ°, νμ΄νλ₯Ό μ¬μ©νμ¬ ν΄λμ€λ₯Ό μ°Έμ‘°νλ€. μλ°©ν₯ μ°κ΄ κ΄κ³μ κ²½μ°..
MVC ν¨ν΄ κ°μ MVC ν¨ν΄μ μ±μ Model, View, Controller λ‘ λλμ΄ λ°μ΄ν°μ λ‘μ§μ λΆλ¦¬νλ λμμΈ ν¨ν΄μ΄λ€. Modelμ λ°μ΄ν°λ₯Ό κ°μ§ κ°μ²΄λ₯Ό, Viewλ μ¬μ©μκ° λ³Ό κ²°κ³Όλ¬Όμ μμ±νλ 컨ν μ΄λλ₯Ό, Controllerλ μ¬μ©μκ° Model κ³Ό View λ₯Ό νΈμΆνλ λ‘μ§μ΄λ€. μ΄λ, Model κ³Ό View λ Controller μ μ‘΄μ¬λ₯Ό λͺ°λΌμΌ κ²°ν©λλ₯Ό μ€μΌ μ μλ€. Model μ λ³κ²½ μ¬νμ΄ μκΈ°λ©΄ View λ Controller λ₯Ό ν΅ν΄ μ΄λ²€νΈκ° μ€νλμ΄ νλ©΄μ΄ μ λ°μ΄νΈ λλ€. MVC ν¨ν΄μ λΉμ¦λμ€ λ‘μ§κ³Ό UI λ‘μ§μ λΆλ¦¬νμ¬ μ μ§ λ³΄μλ₯Ό λ 립μ μΌλ‘ μνν μ μκ³ , νμ₯μ±κ³Ό μ μ°μ±μ΄ λ°μ΄λλ€λ μ₯μ μ΄ μλ€. νμ§λ§ νλμ 컨νΈλ‘€λ¬μ λ€μμ View μ Model μ΄ λ³΅μ‘..
λκ°λκ°. λ±λ±ν ꡬλ μλ¦¬κ° μ λ§ν νμμ€μ μΈλ¦°λ€. β λλ λ μ¬μλ€μ΄ μ ꡬλλ₯Ό μ’μνλμ§ κΆκΈνμλ€. κΈ°κ»ν΄μΌ λ μκ°μ 'λΆνΈνμ§ μμκΉ?' μ λμ μμ μ¨λ€μ΄ λ°μ λΏμ΄μλ€. β κ·Έλμ λλμ ꡬλλ₯Ό λͺ°λ μ κ³ λ°© νλ°ν΄λ₯Ό λμλ€. μλ, μ¬μ€ νλ°ν΄κ° μλλΌ μΈ λ°μκ΅ μ λλ₯Ό κ±Έμλ€. β λ무 λΆνΈνλ€. 'λλ체 μ¬μλ€μ μ΄κ±Έ μ΄λ»κ² μ κ³ λ€λλκ±°μ§?' κ·Έλ° μκ°κ³Ό ν¨κ», λ΄ λ§μ κΉμ κ³³μμ 무νν μ‘΄κ²½μ¬μ΄ μλΌλλ κ²μ λκΌλ€. β ν¨μ μ 무μ§ν λμ‘°μ°¨λ, μΌμ£½μ½λΌλ λ§μ κ·μ λ±μ§κ° μνλλ‘ λ€μ΄μλ€. 'μΌμ΄ μ£½μ΄λ μ½νΈ'. κ·Έλ§νΌ μ½νΈκ° λ©μμΌμλ¨ κ±°μ§. β κ·Έλ°λ° μ μ¬λλ€μ μ½νΈκ° λ©μλ€κ³ νλκ±ΈκΉ. λ°λ»νμ§λ μμ λΆμ§ν¬λ₯Ό μ 그리λ μ’μν κΉ? β ꡬλλ μ΄λ»κ² 보면 λΉμ·ν μ‘΄μ¬..
λ΄ μκ°μ λλ§μ μκ°μΌκΉ. λλ κ·Έμ λ€λ₯Έ μ¬λλ€μ μκ°μ κΉλκΈ°μ νλ² κ±Έλ¬ κΈ°λ‘νλ νμμΈμ΄ μλκΉ. μ§κΈμ λ΄ μκ°μ λꡬμ μκ°μΈκ°. β μ μ μ΄ μμ΄μΌ μ μΆμ΄ μλ€. κ·Έλ κΈ°μ λ§μ μκ°λ€μ μλ‘μ΄ μκ·Ήμ μ°Ύμ λ λλ€. μ무λ μλ 골방μμ λμ€λ μνμ μΈλ‘μ μμΈ μΈκ° λ΄λ©΄μ λν κ³ μ°°λ§μ΄ λ΄κ²¨ μμκ±°μΌ, μλ§. κ·Έλ¬λ κΈμ΄ μ¨μ§μ§ μμ λμλ μ¬λμ λ§λμΌ νλ κ²μ΄λ€. λ² κ»΄μμΌ νλκΉ. νμ³μΌλ§ νλκΉ. β μ€λλ νμΈμ μκ°μ λμ μλν μ¬κ³ μΈκ²μ²λΌ ν¬μ₯νλ μΌμμ μμν μΎλ½μ λλλ€. λμ λλ²½. λμ νμ . μμλ₯Ό νκΈ° μν΄ μκ°λ½μ λΆμ§λ°ν λλ¦°λ€. μ¬νκ²λ λ΄ κΈμ λμ λ²μ£κΈ°λ‘μ λΆκ³Όν κ²μΌκΉ. κ·Έλ λ€λ©΄ λꡬλ₯Ό μν΄ λμ μΉλΆλ₯Ό λλ¬λ΄μΌ νλ κ±ΈκΉ. λλ₯Ό μν΄μκ² μ§. λΆλͺ λ..