OOPλ₯Ό μ¬μ©νλ€λ³΄λ©΄,
ν νλ‘μ νΈ λ΄μμ λ€μμ ν€λ νμΌκ³Ό cppνμΌμ λ§λ€κ² λ©λλ€.
μ΄ λ μ°λ¦¬λ cpp νμΌ λ΄λΆμμ,
include "header_name.h" μ ννλ‘ μ°λ¦¬λ ν€λ νμΌμ μ¬μ©νκ² λ©λλ€.
νμ§λ§ cpp νμΌμ΄ λ€μκ° λλ©΄μ,
νκ°μ§ ν€λλ₯Ό λ€μμ cpp νμΌμμ μ€λ³΅ ν¬ν¨νκ² λ κ²½μ°κ° λ°μν μ μμ΅λλ€.
μ΄λ₯Ό μ°λ¦¬λ μ€λ³΅ μ μ λ¬Έμ λΌκ³ λ λΆλ¦ λλ€.
μ΄λ° ννλ μ»΄νμΌ μ€λ₯λ₯Ό μ λ°ν©λλ€.
(νλ C++ μ»΄νμΌλ¬λ€μ μ΄λ₯Ό λ°©μ§νκΈ° μν λ΄λΆ λ©μ»€λμ¦μ΄ μ‘΄μ¬ν©λλ€λ§,
λΉμ°ν μ μ΄μ μ΄λ¬ν μ€λ₯λ€μ λ°©μ§νλ κ²μ΄ μ°μ μ λλ€.)
κ·Έλ κ² νκΈ° μν΄μ, λκ°μ§ μ μ²λ¦¬λ¬Έμ μ¬μ©νλ λ°©λ²μ΄ μ‘΄μ¬ν©λλ€.
1. #ifndef, #define, #endif
#ifndef, #define, #endif μ λλ€.
ν€λ κ°λ(Header Guard) λΌλ λ©μ»€λμ¦μΌλ‘ λΆλ¦½λλ€.
μ¬μ© λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
#ifndef EXAMPLE_H
#define EXAMLE_H
// ν€λ νμΌμ λ΄μ©
#endif //EXAMPLE_H
μ¬κΈ°μ EXAMPLE_H λ ν€λ νμΌμ ꡬλΆνλ 맀ν¬λ‘μ λλ€.
맀ν¬λ‘μ μ΄λ¦μ μμ¨μ μΌλ‘ μ§μ΄λ λλ, ν λ¬Άμ λ΄λΆμμλ ν΅μΌν΄μΌ νκ³ ,
κ΄λ‘μ μΌλ‘ ν€λ νμΌμ μ΄λ¦μ λ°λΌκ°λλ€.
μμ μμμ μ μ©ν΄λ³΄μλ©΄,
μμ μμ ν€λ νμΌλͺ μ example.h μμ κ²λλ€.
λ€μ λμκ°μ,
#ifndef λ if not defined λ₯Ό λ»ν©λλ€.
'μ μ λμ§ μμλ€λ©΄' λ€μμ ννλΌλ λ»μ λλ€.
κ·ΈλΌ #defineμ μ μνλΌλ λ»μ΄κ² μ£ ?
ν€λ νμΌμ λͺ¨λ λ΄μ©μ μ΄ μλμ μμΉν©λλ€.
κ·Έλ¦¬κ³ λ§μ§λ§μΌλ‘ #endifλ 쑰건문μ λ«λ μν μ λλ€.
if not defined 쑰건 νμ defineμ μ€ννκ³ , μ΄ definitionμ μ’ λ£νλΌλ λ»μ λλ€.
μ΄ #endifλ ν€λ νμΌ μ΅ νλ¨μ μμΉν΄μΌ ν©λλ€.
2. #pragma once
λ λ€λ₯Έ μ μ²λ¦¬λ¬Έμ #pragma once μ λλ€.
λμΌν μν μ νλ, μ»΄νμΌλ¬μμ μ§μνμ§ μμ κ²½μ°κ° μ‘΄μ¬ν μλ μμ΅λλ€.
#pragma onceλ λ§€μ° κ°λ¨ν©λλ€.
1λ² λ°©λ²μ λͺ¨λ ννμ ν€λ νμΌ μ΅μλ¨μ #pragma onceλ‘ νμΉ©λλ€.
#pragma once
// ν€λ νμΌ λ΄μ©
λ§€μ° κ°λ¨νλ€λ μ₯μ μ΄ μμ§λ§, νμ€ C++μλ ν¬ν¨λμ§ μμ μλ ννμ λλ€.
λλΆλΆμ μ»΄νμΌλ¬μμλ μ§μνμ§λ§, μ§μνμ§ μλ μ»΄νμΌλ¬λ€λ μ‘΄μ¬ν μ μμ΅λλ€.
λͺ¨λ νμΌμλ ν€λκ°λ νΉμ #pragma onceκ° νμν©λλ€.
pragma onceκ° νΈλ¦¬μ± λ©΄μμ μ 리νμ§λ§,
νΈνμ± λ©΄μμ ν€λ κ°λλ₯Ό μ¬μ©νλ κ²μ΄ ν¨μ¬ μμ ν©λλ€.