μΈλΌμΈ ν¨μ (Inline Functions)
μΈλΌμΈ ν¨μ (Inline Functions)
ν¨μλ₯Ό μ¬μ©νλ©΄ λ€μκ³Ό κ°μ λ§μ μ΄μ μ μ»μ μ μλ€.
- ν¨μ λ΄λΆμ μ½λλ₯Ό μ¬μ¬μ©ν μ μλ€.
- μΈμ€ν΄νΈ μ½λλ³΄λ€ ν¨μμμ μ½λλ₯Ό λ³κ²½νκ±°λ μ λ°μ΄νΈνκΈ°κ° λ μ½λ€
- ν¨μ μ΄λ¦μ ν΅ν΄ μ½λκ° λ¬΄μμ μλ―Ένλμ§ μ΄ν΄νκΈ° λ μ½λ€.
- ν¨μλ ν¨μ νΈμΆ μΈμκ° ν¨μ λ§€κ° λ³μμ μΌμΉνλμ§ νμΈνκΈ° μν΄ νμ κ²μ¬λ₯Ό νλ€. (λ§€ν¬λ‘λ μ νλ€.)
- ν¨μλ νλ‘κ·Έλ¨μ λλ²κ·Έ νκΈ° μ½κ² λ§λ λ€.
κ·Έλ¬λ ν¨μλ ν¨μκ° νΈμΆλ λλ§λ€ λ°μνλ μΌμ λμ μ±λ₯ μ€λ²ν€λκ° μλ€λ λ¨μ μ΄ μλ€.
μ΄λ CPUκ° λ€λ₯Έ λ μ§μ€ν°μ ν¨κ» μ€ν μ€μΈ νμ¬ λͺ
λ Ήμ΄μ μ£Όμλ₯Ό μ μ₯ν΄μΌ νλ―λ‘(λμ€μ λ°νν μμΉλ₯Ό μ μ μλλ‘)
λͺ¨λ ν¨μ λ§€κ° λ³μλ₯Ό μμ±ν΄μΌ νλ€.
ν λΉλ κ°μ μ¬μ©νλ©΄ νλ‘κ·Έλ¨μ΄ μ μμΉλ‘ λΆκΈ°λλ€.
λ΄λΆμμ μμ±λ μ½λ(μΈμ€ν΄νΈ μ½λ)κ° ν¨μ¬ λ λΉ λ₯΄λ€.
ν¬κ±°λ 볡μ‘ν νμ€ν¬λ₯Ό μννλ ν¨μμ κ²½μ°
ν¨μ νΈμΆμ μ€λ²ν€λλ ν¨μκ° μ€νλλ λ° κ±Έλ¦¬λ μκ°κ³Ό λΉκ΅ν λ μ€μνμ§ μλ€.
κ·Έλ¬λ μΌλ°μ μΌλ‘λ μ¬μ©νλ μμ ν¨μμ κ²½μ°,
ν¨μ νΈμΆμ νμν μκ°μ΄ μ€μ λ‘ ν¨μ μ½λλ₯Ό μ€ννλ λ° νμν μκ°λ³΄λ€ ν¨μ¬ λ§μ κ²½μ°κ° μλ€.
μ΄λ‘ μΈν΄ μλΉν μ±λ₯ μ νκ° λ°μν μ μλ€.
C++μ μΈλΌμΈ ν¨μ(Inline Function)λΌλ λ΄λΆμμ μμ±λ μ½λμ μλμ ν¨μμ μ₯μ μ κ²°ν©νλ λ°©λ²μ μ 곡νλ€.
inline ν€μλλ μ»΄νμΌλ¬μμ ν¨μλ₯Ό μΈλΌμΈ ν¨μλ‘ μ²λ¦¬νλλ‘ μμ²νλ€.
μ»΄νμΌλ¬κ° μ½λλ₯Ό μ»΄νμΌνλ©΄ λͺ¨λ μΈλΌμΈ ν¨μκ° μΈ-νλ μ΄μ€(in-place) νμ₯λλ€.
μ¦, ν¨μ νΈμΆμ΄ ν¨μ μ체μ λ΄μ© 볡μ¬λ³ΈμΌλ‘ λ체λμ΄ ν¨μ μ€λ²ν€λκ° μ κ±°λλ€.
λ¨μ μ μΈλΌμΈ ν¨μκ° λͺ¨λ ν¨μ νΈμΆμ λν΄ μ μ ν μμΉμμ νμ₯λλ―λ‘
μΈλΌμΈ ν¨μκ° κΈΈκ±°λ μΈλΌμΈ ν¨μλ₯Ό μ¬λ¬ λ² νΈμΆνλ κ²½μ° μ»΄νμΌλ μ½λλ₯Ό μ½κ° λ ν¬κ² λ§λ€ μ μλ€λ κ²μ΄λ€.
μμ λ₯Ό ν΅ν΄ μΈλΌμΈ ν¨μμ λν΄ μμ보μ

μ μ xμ y λ κ°λ₯Ό λ°κ³ ,
λ μ€μ μμ κ°μ 리ν΄ν΄μ£Όλ ν¨μμ΄λ€.
μ‘°κ±΄λΆ μ°μ°μ κΈ°μ΅ μ λλ©΄ ↓ μ°Έκ³ νκΈ°
Sizeof, μΌν μ°μ°μ, μ‘°κ±΄λΆ μ°μ°μ
Sizeof Operator μ΄λ ν λ°μ΄ν°νμ ν¬κΈ°λ₯Ό μκ³ μΆμ λ μ¬μ©. sizeof μ°μ°μλ μλ£ν λλ λ³μλ₯Ό κ°μ§κ³ ν¬κΈ°λ₯Ό byte λ¨μλ‘ λ°ννλ μ°μ°μλ€. νΉμ μμ€ν μμ μλ£νμ ν¬κΈ°λ₯Ό κ²°μ νκΈ° μν΄ C++
hyoniidaaa.tistory.com
μ΄ min ν¨μλ₯Ό mainμμ μ¬μ©νλ€κ³ μκ°ν΄λ³΄μ.

νλ‘κ·Έλ¨μ΄ μ€νλλ©΄μ λ¨Όμ min ν¨μκ° νΈμΆλλ€.
μ΄λκ°μ μ μ₯λμ΄μλ€κ° min ν¨μμ μ€νμ½λλ₯Ό κ°μ Έμ€κ³
κ·Έκ±°μ λ°λΌμ μ€ννλΌλ λͺ λ Ήμ΄ λ¨μ΄μ§λ€.
κ·ΈλΌ κ·Έκ±Έ κ°μ Έμ€κ³ λ³μ xμ yλ₯Ό μ μΈνκ³
κ° 5,6μ 볡μ¬λ₯Ό νκ³
κ·Έλ€μ x > y ? y : x; μ΄ λΆλΆμ μ€νμ μν€κ³
κ·Έλ€μμ returnμ ν΄μ£Όκ³
λ°μμ€λ κ³³μμ κ°μ λ°μμ€κ³
κ·Έκ²μ μΆλ ₯μ νλ μ΄λ¬ν μΌλ ¨μ κ³Όμ μ΄ λ²μ΄μ§λ€.
μ΄λ° μμ ν¨μκ° μμ£Ό λ§μ΄ λ°λ³΅λλ κ²½μ°λ μλ€.
κ·Έλμ μ΄λ€ κ²½μ°μλ μ€μ κ³μ°νλ λΆλΆ (x > y ? y : x;) 보λ€
μ§κΈ λ§μλλ¦° μΌλ ¨μ κ³Όμ λ€μ΄ λ μκ°μ΄ λ§μ΄ 걸릴 λλ μλ€.
κ·Έλμ κ·Έ κ³Όμ μ μ€μ΄κΈ° μν΄μ μΈλΌμΈ ν¨μλΌλ κ²μ μ¬μ©μ ν λκ° μλ€,
μ΄λ»κ² μ¬μ©νλλ©΄
κ·Έλ₯ μμλ€κ° inlineμ΄λΌκ³ μ¨μ£Όλ©΄ λλ€.

λ³΄ν΅ ν€λ νμΌμ ν¨μλ₯Ό μ μν λ λ§μ΄ μ¬μ©νλ€.
κ·Έλ€μμ μ€νμμ€ μ½λλ₯Ό 보면 κ΅μ₯ν λ§μ ν¨μλ€μ κ±°μ λ€ inlineμΌλ‘ μΉ ν΄λλ κ²½μ°κ° μλ€.
inlineμΌλ‘ λ°κΎΈκ² λλ©΄ μ¬μ€ μλ ν¨μκ° μλ κ²μ²λΌ μλμ νλ€.


μ»΄νμΌλ¬κ° λ΄€μ λ μ μκ° μΈλΌμΈμ΄λκΉ μ΄λ κ² λ£μ΄μ£Όμλ μμΌλ‘ μλνλ€.
(5 > 6 ? 6 : 5) μ΄λ κ² λμ΄μμΌλ©΄ ν¨μκ° νΈμΆλ μΌλ μκ³
local variableμΈ x, yκ° μ μΈλ μΌλ μκ³ μμ λ μΌλ μμ΄μ λΉ λ₯΄λ€.
κ·Έλμ λ§μ νλ‘κ·Έλλ¨Έλ€μ΄ μΈλΌμΈ ν¨μλ₯Ό λ§μ΄ μ¬μ©μ νλ κ²½μ°κ° μλ€.
κ·Έλ°λ° μΈλΌμΈ ν¨μλ₯Ό μ€μ μ¬μ©νκΈ°μ μμ μμμΌ νλ μ¬μ€μ΄ μλ€.
μ΄ inline ν€μλλ κ°μ λ‘ μ΄ ν¨μλ₯Ό 무쑰건 inlineμΌλ‘ ν΄λΌλΌκ³ ν΄μ λ§λ κ² μλκ³
μ΄λ κ² ν μ μμΌλ©΄ ν΄ μ£ΌμΈμ~λΌκ³ κΆμ νλ λμμ€λ€.
inline ν€μλλ κΆμ₯ μ¬νμΌ λΏμ΄λ€.
μ»΄νμΌλ¬λ μΈλΌμΈμ λν μμ²μ μμ λ‘κ² λ¬΄μν μ μλ€.( κΈ΄ ν¨μλ₯Ό μΈλΌμΈν νλ €κ³ νλ©΄ 무μν κ°λ₯μ±μ΄ μλ€.)
κ·Έλμ μ»΄νμΌλ¬κ° λ± λ΄€μ λ μ μλ μΈλΌμΈμ μ°λ©΄ μ’μ κ² κ°λ€? μκ°ν΄ 보λ μ λκ° λλ κ±°λ€.
κ·Έλμ λͺ¨λ ν¨μλ₯Ό inlineμΌλ‘ λ°κΎΌλ€κ³ ν΄μ λΉ¨λΌμ§λ κ²μ μ λ μλλ€.
κ·Έλ¦¬κ³ μ΅κ·Όμλ μ»΄νμΌλ¬κ° μμ£Ό μ’μμ Έμ
inlineμ΄ μμ΄λ μκΈ°κ° μκ°ν λ λ Όλ¦¬μ μΌλ‘ λ°μ Έλ΄€μ λ
μ μ¬κΈ°μ inline λ£μΌλ©΄ μμ£Ό λΉ¨λΌμ§κ² λ€? μΆμΌλ©΄ μκΈ°κ° μμμ μΈλΌμΈ ννλ€.
inlineμ μ΄λ€κ³ ν΄μ λΉ¨λΌμ§λ 보μ₯λ μκ³ μ μ΄λ€κ³ μ λΉ¨λΌμ§λ 보μ₯λ μλ€λ μμΌλ‘ μκΈ°κ° λμ€κ³ μλ€.
μλ¬΄νΌ μ½λ©ν λ inlineμ μμ‘΄ν΄μ μ΅μ νλ₯Ό νκΈ° μμνλ©΄ μ’ νλ€μ΄μ§λ€.
μΈλΌμΈμ μ¬μ©λ²μ΄ κ°λ¨νμ§λ§
λ μ€μν κ²μ μ»΄νμΌλ¬κ° μ§μ§ ν΄μ€μ§ μ ν΄μ€μ§λ μκΈ° μ΄λ ΅λ€λ κ²μ΄λ€.
λ ν κ°μ§ λ¨μ μ λ§μ½ min κ°μ inlineμΌλ‘ λ ν¨μκ° μμ² λ§κ³
μ»΄νμΌλ¬κ° μ λ§ inlineμΌλ‘ ꡬνμ νλ€λ©΄ μ»΄νμΌλ νλ‘κ·Έλ¨μ΄ λ§μ΄ 컀μ§λ€.
νλ‘κ·Έλ¨μ΄ 컀μ§λ©΄ μ΄μ¨λ κ·Έ μμμ λ°μ΄ν°κ° μλ€ κ°λ€ νλλ° λ λ§μ μκ°μ΄ 걸리기 λλ¬Έμ
μ½λκ° λ무 μ»€μ Έμ μΈλΌμΈμ μ¬μ©ν ν¨κ³Όλ₯Ό λͺ» λ³΄κ² λ μλ μλ€.
μ½λλ₯Ό λΆν릴 κ°λ₯μ±μ΄ μμΌλ―λ‘ ν¨μλ₯Ό μΈλΌμΈν νλ κ²μ λ΄λΆ 루νκ° μλ μ§§μ ν¨μμ κ°μ₯ μ ν©νλ€.
μΈλΌμΈ λ¬Έλ²μ λν΄μλ λ§μλλ ΈμΌλ μ¬μ©νλ κ² νμ€ν μ’λ€ κΆμ₯νλ€ μ΄λ κ²λ λ§μλ리기 μ΄λ ΅λ€.