π 2023λ
μλ°κΈ° νλ‘κ·Έλλ° μ±
μΆμ² 3κΆ
λͺ λ¬ λ€μ λλ₯Ό μν μ½λλ₯Ό μμ±νμ
- μμ λ€μ΄μ€λ ν¨μν μ½λ© (Grokking Simplicity: Taming complex software with functional thinking)
- νμ΄λΈ λΌμΈμ€ μ€λΈ μ½λ (Five Lines of Code: How and when to refactor)
- μ λ¬Έκ°λ₯Ό μν C++ 5ν (Professional C++, 5th Edition)
κ°μ
- νμ¬μμ νλ¬μ 30λ§μμ© κ°μΈμ
무μ§μλΉλ₯Ό μ£Όλλ° λλΆμ μ’μ μ±
λ€μ μ μ½κ³ μλ€.
- 2023λ
μλ°κΈ° μ λ§ κ°λͺ
κΉκ² μ½μ μ±
3κΆμ μ 리ν΄λ³Έλ€.
- λͺ©νλ λ λμ μ½λλ₯Ό μμ±νλ κ².
λ λμ μ½λλ?
- λ€μν κ΄μ μ΄ μκ² μ§λ§, μ°μ
κ³μ μλ μ¬λμΌλ‘μ¨, 무μμ΄λ λμ μκ»΄μ£Όλ μ½λκ° μ’μ μ½λλΌλ μκ°μ΄ λ λ€.
- κ°λ°νμ¬μ μμ΄ λμ΄λ, κ²°κ΅ κ°λ°μμ μΈκ±΄λΉκ° λλΆλΆμΌ κ²μ΄λ€. μ¦, λμ μλΌκΈ° μν΄μλ κ°λ°μμ μΈκ±΄λΉλ₯Ό μκ»΄μΌ νλ€. μ¬κΈ°μ μΈκ±΄λΉλ₯Ό μλλ€λ λ§μ, λμ μ‘°κΈλ§ λ€μΈλ€λ λ»λ³΄λ€λ, λμ μκΈμ λ°μκ°λ κ°λ°μμ μμ°μ±μ λμΈλ€λ μΈ‘λ©΄μ΄λ€.
- κ°λ°μ μ½λλ₯Ό μμ±νλ μκ°κ³Ό μ½λλ₯Ό μ½λ μκ°μΌλ‘ ꡬμ±λλ€. κ·Έλ¦¬κ³ ν΅μμ μΌλ‘ νμκ° λ λ§μ λΉμ¨μ΄λΌκ³ μλ €μ Έμλ€.
- μ¦, κ°λ°μκ° μ½λλ₯Ό μ½λ λ° λ€μ΄κ°λ μκ°μ μλ μ μμΌλ©΄ κ°λ°μμ μΈκ±΄λΉλ₯Ό μλ μ μλ€κ³ μκ°νλ€.
- μ¬μ€μ΄ κΈΈμλ€. κ²°κ΅, κΈ°κ³κ° μ½κΈ° μ¬μ΄ κ² μλλΌ μ¬λμ΄ μ½κΈ° μ¬μ΄ μ½λκ° μ’μ μ½λλΌκ³ μκ°νλ€.
- λ§κ·Έλλ‘, κ·Ήλ¨μ μΌλ‘, μμ°μ΄μ²λΌ μ μ μ½νμΌ νλ€κ³ μκ°νλ€. κ·ΈλμΌλ§ μ½κ³ μ΄ν΄νλ λ° λ€μ΄κ°λ μκ°μ μ€μΌ μ μκΈ° λλ¬Έμ΄λ€.
- ps. νΉν C++ project μ κ²½μ° O3 μμ€μμλ μ»΄νμΌλ¬κ° κ²°κ΅ λ‘μ§μ λ€ λ§μ§κΈ° λλ¬Έμ, μΈλΆμ μΈ νλ‘κ·Έλλ¨Έμ μμλ°λ¦¬ μ°¨λ ₯μΌλ μ§μλμ΄μΌ νλ€κ³ μκ°νλ€ (e.g., λ μ€μν 건 κ·Όλ³Έμ μΌλ‘ O(1)μΈλ° O(n)μ μ±ννκ³ μμ§λ μμμ§. O(n)μ΄λλΌλ, accuracyμ μν₯μ μ£Όμ§ μλ μ μμ nμ체λ₯Ό μ€μΌ μ μλμ§ λ±. κ°μ₯ μ’μ λΆνμ βμλβ λΆν.)
- κ·Όλ° κ·Έκ²μΌλ‘ μΆ©λΆν κΉ? κ°λ°μκ° μ½λλ₯Ό μ½λ μκ°μ΄ μ μκΎΈ λ§μ΄ μμλ κΉ? μ¬μ§μ΄ λ¨μμ½λλ μλκ³ λΆκ³Ό λͺ λ¬μ λ΄κ° μμ±νλ μ½λμΈλ°?
- λμ±μ΄ μ΄ λ¬Έμ λ μ½λλ₯Ό λ¨μν λͺ λ¬ λ€ λ€μ λλ €λ³΄λ λ° κ·ΈμΉλκ² μλλΌ, κΈ°λ₯μ νμ₯ν΄μΌλ§ νλ μ¬νκ° λ²μ΄μ§ λ λ μ€λν΄μ§λ€. μ¬κΈ°λ₯Ό κ³ μ³€λλ μ κΈ°κ° μλλ μΌλ€μ΄ λ°μνκ³ β¦, λ€μ μ½λλ² μ΄μ€ μ 체λ₯Ό λ―μ΄λ΄μΌ νλ μΌ, μ΄ νμ€μμ λ²μ΄μ§λ€.
- μ μ λμ λκΈ°λ₯μ΄ ν΄νλμμΌκΉ? κ·Έκ² μλλΌλ©΄ κ·Όμμ μΌλ‘ λ΄κ°, μ€λ¦¬μ μΈ λ°©μμΌλ‘ μ½λλ₯Ό μμ±ν΄μ€μ§ μμλ€λ λ§μ΄ λλ€. κ·Έλ¦¬κ³ κ·Έκ² μ’ λ νμ€μ μ΄κ³ , 극볡κ°λ₯ν λͺ
μ μΌ κ²μ΄λ€.
- <μ¬κΈ°λ₯Ό κ³ μ³€λλ μ κΈ°κ° μλλ μΌλ€μ΄ λ°μνκ³ β¦, λ€μ μ½λλ² μ΄μ€ μ 체λ₯Ό λ―μ΄λ΄μΌ νλ μΌ> λ°μμ μ¬νλ₯Ό μμ€ν
μ μΌλ‘ λ§μ μ μλ ꡬνμ΅κ΄μ΄ λ§μ½ μλ€λ©΄?
- κ·Έλ° νμμ μ§λ¬Έμ λ΅ν΄μ€ μ±
λ€ 3κΆμ΄λ€.
1. μμ λ€μ΄μ€λ ν¨μν μ½λ© (Grokking Simplicity: Taming complex software with functional thinking)
- μμ κ° λ λ§μμ λ λ€: Grokking Simplicity: Taming complex software with functional thinking
- λ¨μ° μ¬ν΄ λ΄ λ§μμ μλ°κΈ° 1λ± μ±
μ΄λ€.
- μ½λ€λ³΄λ©΄ functional coding(λ λΉμ°ν λ€λ£¨μ§λ§)μ΄ μλ functional thinking μ λν νμμ±λΆν° λΉλμ
μ ν΄λκ°λ κ²μ΄ μΌνμ΄μλ€.
- ν΅μ¬μ, ν¨μλ side-effect κ° μμ΄μΌ νλ€λ κ²μ΄λ€.
- κ΅³μ΄ μ΄λ¦μ λΆμ΄μλ©΄ βpure functionβ μ΄λΌκ³ λ νλ€.
- μ±
μ΄λ°λΆμ μ΄κ²μ κ°μνλ€κΈ° λ³΄λ€ (λͺ¨λ μν©μ νμ μ΄λ κ² νμ λΌκΈ°λ³΄λ€), μ΄λ° λ§μΈλ λ₯Ό μ₯μ°©νμκ³ κΆμ ν΄λκ°λ λΉλμ
μ΄ μΉμ νκ³ κ°λ ₯νλ€. κ·Έλμ μλΆλΆμ μ΄μΌκΈ°κ° κΈΈκ³ , μ€μ ν¨μνAPI ν
ν¬λμ κ½€λ μ§λμ μ€λ°μ―€λΆν° λμ¨λ€.
- 맡리λμ€λ 컀λ§μ΄λ νλ κ²λ€μ μ΄λ»κ² 보면 κΈ°μ μ μΈ μ°¨λ ₯μΌμ μ§λμ§ μλ λλμ΄ λ€μλ€. μ΄λ° μΈνμ μΌλ‘ λλ¬λλ νμμ μΈ κ²μ ν¨μννλ‘κ·Έλλ°μ΄λΌλ κ³ μ κ΄λ
μ λ±μ§λ₯Ό λΆμ¬λκ³ , μ§κΈκΉμ§ ν¨μνμ μ΄λμ OOPμ λΉν΄μ μλΌ, λ³λ‘μΌ, λ¨μ μ΄ λΆλͺ
ν μμκ±°μΌ λΌλ©° κ΄μ¬μ λ§μ΄ κ°μ§μ§ μμμ¨ κ±΄ μλκ° λ°μ±μ νλ κΈ°νμλ€.
- λ μ’μλ κ²μ λ§μΈλμ κ·ΈμΉμ§ μκ³ μ€μ©μ μ΄κΈ°κΉμ§ νλ€λ μ μ΄λ€. μλ₯Ό λ€μ΄ conventional ν for loopλ₯Ό μ΄λ»κ² ν¨μνμΌλ‘ λ³ννλμ§ κ³Όμ μ μ°¨κ·Όμ°¨κ·Ό λ°μλκ°λ€. κ·Έλ¦¬κ³ μ±
λ·λΆλΆμμλ μ¬λ¬ μ΄λ €μ΄ μ©μ΄λ€μ΄ κ³λ€μ¬μ§λ ν¨μννλ‘κ·Έλλ° ν
ν¬λλ€λ κ²°κ΅ μκ°λλλ°, μ΄μ―€λλ©΄ μ΄λ―Έ λ³Έμ§μ μκ³ (μ€μν κ²μ ν¨μνAPIκ° μλ ν¨μνμ¬κ³ ) μμμλΆν° λ무 μΉμ ν κ°μ΄λλ₯Ό λ°μκΈ° λλ¬Έμ λ§μμ΄ μλλμ§ μκ³ ν¨μννλ‘κ·Έλλ°μ μ΅μν΄μ§ μ μμλ€.
- κ²°λ‘ μ ν μ€μΈλ°, μ΄λ κ² μΉμ νκ² κ°μ΄λ νμ§ μμΌλ©΄ μ¬μ€ μ κ²°λ‘ μ λ§μμ μ¬μ μ μμμ κ²μ΄λ€.
- ps. μ΄ μ±
μ μ½μ λμ λλμ λ°λ μ μ΄ μμ£Ό μμ§λ μλ€. κ·Έλλ§ μ΅κ·Όμλ λ°λ°λ₯λΆν° μμνλ λ₯λ¬λ 3κΆ μ΄ κ·Έλ¬μλ€ (μ¬κΈ°μλ μμ ν΅μ¬μ βκ³μ°κ·Έλνλ‘ μννλ auto diff κ° λ₯λ¬λμ λͺ¨λ κ²μ΄λ€β μΈλ° κ·Έκ±Έ μ§μ ꡬμΆν΄λκ°λ κ³Όμ μ΄ μΌνμ΄μλ€).
- λ°μ±νμ
- SLAM open source λ€μ 보λ€λ³΄λ©΄ νλμ λ§λ₯ν΄λμ€λ₯Ό ꡬμ±νκ³ , μ΄ ν΄λμ€κ° λ³μλ₯Ό μμκ° κ°μ§λ μμ ꡬνμ μμ£Ό λ³΄κ² λλ€. μ΄λ₯Έλ° λ
Έλλ¨μ μ±κΈνμΌ μΈλ°β¦ μ¬λ¬λͺ¨λ‘ μ μ§λ³΄μ κ΄μ μμ μ’μ§ μλ€λ μκ°μ΄ λ λ€. μ½λλ₯Ό μ½λ λ° μκ°μ΄ μ μ λ§μ΄ μμλ κ²μ΄λ€. λ§λ₯ν΄λμ€ λ©μλλ ν΄λμ€μ λͺ¨λ λ³μμ μ κ·Όκ°λ₯νκ² λλ―λ‘ μ€μ μΈμλ‘ λ°μ§ μμ λ³μλ€κΉμ§ λ§λλ‘ μ κ·Όνκ³ κ³ μΉλ λ§νλ€μ΄ λ©μλ μ¬κΈ°μ κΈ°μμ λ²μ΄μ§ κ²μ΄λ€. κ·Έλ¬λ©΄ μΈμ κ° νλμ λ©μλ μμ μ λ€λ₯Έ λ©μλλ€μ΄ μν₯μ λ°λ μκ°μ΄ μ€κ³ .. μ½λ μ 체 (λͺμ²μ€) λ₯Ό λ€μ λ€ λ―μ΄λ΄μΌνλ μκ°μ΄ μ¬ κ²μ΄λ€. ROSλ
Έλλ¨μλ‘ μ±κΈνμΌμ μμ±νλ€λ³΄λ μ μλ³μλ λ§κ΅¬ μ¬μ©νκ³ μλλ° μ΄ μμ λͺ¨λ ν¨μμμ μ κ·Όκ°λ₯νλ€λ μ μμ λ§λ₯ν΄λμ€μ λ³μλ€κ³Ό κ°μ μ²μ§μ΄λ€.
- μ μλ³μκ° λμλ€λ 건 μ½κ² μκ°ν μ μμμ§λ§, μ΄ μ±
μ κ΄μ μμ, 무μΈμ(zero-argument) ν¨μ μμ (맀μ°!) λμ κ²μ΄μλ€. getterλ§μ΄ μ μ±ν 무μΈμ ν¨μκ° λμ΄μΌνμ§ μμκΉ? 무μΈμμ νμ μ°κ³ μ€μ λ‘ ν¨μ λ΄λΆμμ ν¨μμΈλΆμ λ³μλ€μ λ§κ΅¬ μ κ·Όνλ λ§λ₯λ©μλλ€μ΄ μκΈ°κ² λλλ°. λ ν° λ¬Έμ λ ꡬνμ(νλ‘κ·Έλλ¨Έ) κ° μ΄λ° νμμ μλͺ» μ§μ§ (ν¨μ μΈν°νμ΄μ€ μ€κ³ μ μΈμ κ°μκ° μ μμλ‘ λ¬΄μ‘°κ±΄ μ’μ!) νκ³ μ€λ¨μ©νλμ§λ λͺ¨λ₯΄κ² ν΄λμ€κ° λΉλν΄μ§λ μν©μ΄ μλκΉ. κ°μ₯ ν° νΌν΄μλ λͺ λ¬ λ€ λ΄κ° λ κ²μ΄λ€. μ΄λ°κ±Έ(μ€μ€λ‘λ μμνμ§ λͺ»ν νμλ€μ) κ³ μΉλ€κ³ μκ°μ λ€ μκ³ μλ
ΈλΌλ©΄, λ²κ·Έλ₯Ό μ λ§λ€κ³ , κ·Έκ±Έ 빨리 λͺ»κ³ μΉλ νλ‘κ·Έλλ¨ΈλΌλ ννμ λ£κ² λμ§ μμκΉ. μ±μ₯μ κ°μ₯ ν° λλ ₯μμ λλ €μμ΄λ€.
- ps. μ΅κ·Ό λ³Έ μμ SLAM code λ kiss-icp μλ€. λ£κΈ°λ‘ μ μκ° μμ² μμμ μΌλ‘ μ½λλ₯Ό μ μ§λ €λ μ΅κ΄μ΄ μμΌμ
μβ¦ λνλμ λ§μ λ μ΅μν νλ €κ³ νμ λ€λλ°. κ·Έλμ ICPλ μ§μ Jꡬν΄μ μννλ λΆλΆμ΄ μΌνμ΄λ€.
2. νμ΄λΈ λΌμΈμ€ μ€λΈ μ½λ (Five Lines of Code: How and when to refactor)
- μμ μ±
λ³΄λ€ μ’ λ κΈμ§μ μΈ μ견μ μ μνλ€. νλμ ν¨μλ 5κ°μ μ€ν μ΄νλ‘ κ΅¬μ±λμ΄μΌ νλ€κ³ μ£Όμ₯νλ€.
- μ΄λ₯Ό λ·λ°μΉ¨νκΈ° μν΄ μ€μ λ‘ λͺ¨λ μ½λκΈ°λ°μΌλ‘ μ /ν λ₯Ό 보μ¬μ£Όλ©° μ€λͺ
νλ€. λ΄, ν μ μμ§?
- μ΄μ¨κ±°λ κ·Έλ° μ½λλ€λ κ·Έμ νλμ μμμ΄κΈ° λλ¬Έμ, μ΄ μ±
μμλ μμ λ΄ κ³ μ κ΄λ
μ κΉ¨κ³ μ νλ μΈλ¦Όμ λλ₯Ό μ»μ΄κ°λ κΈ°νλ‘ μΌλ λ° μ§μ€νμλ€.
- κ·Έλ°λ° μκ°ν΄λ³΄λ©΄ μμ μ±
κ³Ό μ΄μ΄μ§λ λ§₯λ½μ΄ μλ€. μ¬μ΄λ μ΄ννΈλ₯Ό μμ λ €κ³ λ
Έλ ₯νλ€ λ³΄λ©΄, κ°λ³ ν¨μλ€μ΄ μμμΌνλ μ¬μ μ§μ (μΈμ κ°μ) μ μλμ μΌλ‘ μ μ€κ³ν΄μ μ νν΄μΌλ§ νλ€. κ·Έλ κ² μ νλ€λ³΄λ©΄ ν¨μλ§λ€ 5κ° μ΄νμ μ€νμΌλ‘ ꡬμ±ν μλ μμμλ μμ§ μμκΉ? λΌλ©° λ§μμ΄ μ΄λ¦¬λ λ―(μ μμ μ견μ λμνλ) νμλ€.
- μμ μμ μ±
μμ μ»μ κ°μ₯ ν° μνμΈ λ§μΈλνμ¬, μ²λΌ, μ΄ μ±
μμλ κ·Έλ¬ν λ§μΈλλ₯Ό νμ¬νλ κ²μ λ
Έλ ₯νλ€. μν©μ λΉμ°ν λͺ¨λ ν¨μλ₯Ό λ€ 5μ€ μ΄νλ‘ κ΅¬μ±νλ κ²μ λλλ‘ λ μΈλ°μλ μκ°μ΄ μμλλ μΌμΌμλ μκ² λ€. μ΄μ¨κ±°λ ν΅μ¬μ λͺ¨λ κ²½μ°μ κ·Έλ κ² λ¬΄μ‘°κ±΄ νμκ° μλλΌ, μ΅λν κ·Έλ κ² ν μ μλ μν©μ΄λΌλ©΄ κ·Έλ κ² νλ €κ³ νλ² λ μκ°ν΄λ³΄μ, λΌλ λ§μΈλλΌκ³ μκ°νλ€.
- κ·Έλ¦¬κ³ ν΄λ¦°μ½λκ° μ΄μ©λ€ μ μ©λ€ μ¬μ€ νΌκ³€ν λΆλΆλ€μ΄ λ§μλ°, 5μ€μ΄νλ‘ νλ €κ³ λ
Έλ ₯ν΄λΌ! λΌλ μ§μΉ¨μ λ¨μν΄μ μ΄μ¨κ±°λ μ€μ©μ μ΄λΌκ³ μκ°νλ€. νλ² μ½μ΄λ³Όλ§ν μ±
.
3. μ λ¬Έκ°λ₯Ό μν C++ 5ν (Professional C++, 5th Edition)
- μ¬μ€ 5ν λ²μμ κΈ°λ€λ¦¬κ³ μμλλ° μ΄μ λμμ μ° μ±
μ΄λ€. 4νμΌλ‘ C++ κΈ°μ΄λ¬Έλ²μ 곡λΆνλ λ° λμμ λ°μμ΄μ, μλ¦¬λ‘ μ° μ±
.
- β¦ μ΄λΌκΈ°μ C++20 feature λ€μ λ€λ£¨κ³ μλ νμ¬ λ²μμ μ€ κ°μ₯ μΆ©μ€ν μ±
μ΄λΌ, C++20 μ 미리 곡λΆν κ²Έ ꡬ맀ν μ±
, μ΄λ©° κ·Έ λΆλΆμ λν΄μ λ§μ‘±νλ©° μ½κ³ μλ€. κ·Έ μΈμλ 4νκ³Ό κ±°μ μ μ¬νλ€.
- λ§μΉ C++κΈ°μ΄νλ¬μ€β¦ κ°μ λκΊΌμ΄ μ±
μΈλ° κ·Έ μ±
보λ€λ μ’ λ μ κ°λ μ€λͺ
μ΄ μ¬μ΄ κ² κ°μμ μ΄ μ±
μ μ’μν¨. λκ»κΈ° λλ¬Έμ νλλ¬λ§μ νλ²μ½κ³ λλΌ μ±
μ μλκΈ΄ νλ€. 짬λ λλ§λ€ νμ±ν°μ© λ΄€λ μ±ν°λ νλ²μ© λ λ³΄κ³ νλ μ±
.
- ps. 4νμ΄λ 5νμ΄λ μ΄μ λ λ¬Έλ²μ νλλ² μ λ λ³Έ λ€μμλ cppconμ talkλ€μ 보λ κ²μ΄ μ€λ¬΄κ΄μ μμλ μ’ λ λμμ΄ λκ³ μλ€.
κ²°λ‘
- κ·Όλ° μ΅κ³ λ‘ μ€μν (κ·Έλ¦¬κ³ μ μΌ μ΄λ €μ΄) 건 μ΄λ¦μ§κΈ° κ° μλκΉβ¦