ν΄λμ€(Class)μ μ’ λ₯
1. ꡬ체 ν΄λμ€(concrete classes) ex) std::vector, std::string λ±
λ§μΉ λ΄μ₯ νμ (int)μ²λΌ μλν¨. ꡬ체 νμ μ μμ μΌλΆλ‘ λ©λͺ¨λ¦¬ ννμ΄ μ‘΄μ¬ν¨.
μ€νμ΄λ λ€λ₯Έ κ°μ²΄ μμ μμΉν μ μμ. ν¬μΈν°λ μ°Έμ‘°λ₯Ό κ±°μΉμ§ μκ³ κ°μ²΄λ₯Ό μ§μ μ°Έμ‘°ν μ μμ.
κ°μ²΄λ₯Ό μ¦μ, κ·Έλ¦¬κ³ μλ²½ν μ΄κΈ°νν μ μμ. κ°μ²΄λ₯Ό 볡μ¬νκ±°λ μ΄λν μ μμ
2. μΆμ ν΄λμ€(abstract classes) <- μμμ ν΅ν΄ λ§λ€μ΄μ§λ€
μ¬μ©μμκ² μμΈ κ΅¬νμ μμ ν κ°μΆ€. μΈν°νμ΄μ€μ λ©λͺ¨λ¦¬ ννμ λΆλ¦¬ν¨.
μΆμνμ μ μ§μλ³μλ‘ μ¬μ©ν μ μμ. ν μμμ κ°μ²΄λ₯Ό ν λΉνκ³ μ°Έμ‘°λ ν¬μΈν°λ‘ μ κ·Όν¨.
3. ν΄λμ€ κ³μΈ΅κ΅¬μ‘° μ ν΄λμ€(Classes in class hierarchies) <- μμμ ν΅ν΄ λ§λ€μ΄μ§λ€
ν΄λμ€ κ³μΈ΅μ νμμ μν΄ μμ±λ 격μ(lattice)λ‘ μ λ ¬λ ν΄λμ€ μ§ν©.
"μλ°©μ°¨λ μΌμ’ μ νΈλμΈ μ°¨λμ μΌμ’ μ λλ€"μ κ°μ΄ κ³μΈ΅μ κ΄κ³κ° μλ κ°λ μ λνλ΄κΈ° μν΄ ν΄λμ€ κ³μΈ΅μ μ¬μ©ν¨
μ£Όλ‘ newλ₯Ό μ΄μ©ν΄ ν μμμ ν λΉνκ³ ν¬μΈν°μ μ°Έμ‘°λ‘ μ κ·Ό.
κ°μ²΄ μμ±μμλ μμ±μλ₯Ό μ΄μ©ν΄ κΈ°λ° ν΄λμ€μμ νμ
ν΄λμ€ μμλ‘ μμ±νκ³ , μλ©Έλ λλ κ·Έ λ°λμμλ‘ μλ©Έν¨
νΉμ νμ ν΄λμ€μ λ©€λ² ν¨μλ₯Ό μ¬μ©νκΈ° μν΄ dynamic_cast μ°μ°μλ₯Ό μ¬μ©ν μ μμ.
μμ λμλ₯Ό νΌνκΈ° μν΄ μ€λ§νΈ ν¬μΈνΈλ₯Ό μ¬μ©ν¨
<ν΄λμ€ κ³μΈ΅κ΅¬μ‘° μ ν΄λμ€μ λκ°μ§ μ΄μ >
- μΈν°νμ΄μ€ μμ : κΈ°λ° ν΄λμ€μ κ°μ²΄λ₯Ό μ¬μ©νλ κ³³ μ΄λμλ νμ ν΄λμ€μ κ°μ²΄λ₯Ό λμ μ¬μ©ν μ μμ
- ꡬν μμ : κΈ°λ° ν΄λμ€κ° μ 곡νλ ν¨μμ λ°μ΄ν° λλΆμ νμ ν΄λμ€μ ꡬνμ΄ λ¨μν΄μ§
μΆμ ν΄λμ€(abstract classes)
C++ μ μΊμ€ν , λ€νμ±, λ€μ€ μμκ³Ό κ°μ μμ
C++ Inheritance(μμ), μμκ³Ό μ€λ²λ‘λ© (using ν€μλ)Inheritance(μμ) - C++μμ μμμ μ©μ΄ base class (superclass : λΆλͺ¨ ν΄λμ€)derived class (subclass : μμ ν΄λμ€) ex) Personμ΄ base class μ΄κ³ , studentκ° deriv
codebunny99.tistory.com
μΆμ ν΄λμ€λ κ°μ²΄λ₯Ό μ§μ μμ±ν μ μλ ν΄λμ€μ΄λ€. μ¦, μΆμ ν΄λμ€λ μΈμ€ν΄μ€ν(instantiation)κ° λΆκ°λ₯νλ€. μΆμ ν΄λμ€λ λ³΄ν΅ κ³΅ν΅μ μΈ μΈν°νμ΄μ€λ₯Ό μ μνλ λ° μ¬μ©λλ€. μ΄λ₯Ό ν΅ν΄ μ¬λ¬ νμ ν΄λμ€λ€μ΄ λμΌν μΈν°νμ΄μ€λ₯Ό κ°μ§λλ‘ ν μ μλ€. <μλ°μ μΈν°νμ΄μ€μ λΉμ·ν κ°λ μ΄λ€.>
- μΆμ ν΄λμ€λ νλ μ΄μμ μμ κ°μ ν¨μ(Pure Virtual Function)λ₯Ό ν¬ν¨. μμ κ°μ ν¨μλ = 0μΌλ‘ μ΄κΈ°νλ κ°μ ν¨μμ΄λ€. ex) virtual void draw() = 0;
- μμ κ°μ ν¨μλ ν΄λΉ ν΄λμ€μμ ꡬνλμ§ μμΌλ©°, νμ ν΄λμ€μμ λ°λμ ꡬνν΄μΌ νλ€.
- μμ κ°μ ν¨μμ λͺ©μ μ νΉμ ν¨μκ° νμ ν΄λμ€μμ λ°λμ ꡬνλμ΄μΌ νλ€λ κ²μ κ°μ νλ κ²μ΄λ€. μ΄λ₯Ό ν΅ν΄ μμ κ³μΈ΅μμ μΌκ΄μ±μ μ μ§ν μ μλ€.
μΆμ ν΄λμ€μ μμ κ°μ ν¨μλ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ λ§€μ° μ€μν κ°λ . μΆμ ν΄λμ€λ₯Ό μ¬μ©νλ©΄ μμ κ³μΈ΅ ꡬ쑰μμ κ³΅ν΅ μΈν°νμ΄μ€λ₯Ό μ μν μ μμΌλ©°, μμ κ°μ ν¨μλ₯Ό ν΅ν΄ νμ ν΄λμ€μμ λ°λμ ꡬνν΄μΌ νλ κΈ°λ₯μ λͺ νν ν μ μλ€. μΆμ ν΄λμ€λ μ§μ μΈμ€ν΄μ€νν μ μμΌλ©°, ν¬μΈν°(*)λ μ°Έμ‘°(&)λ₯Ό ν΅ν΄μλ§ μ¬μ©μ΄ κ°λ₯νλ€λ μ λ μ€μνλ€
μΆμ ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό μ§μ μμ±ν μ μκΈ° λλ¬Έμ, λ€μκ³Ό κ°μ΄ μΆμ ν΄λμ€ νμ μ κ°μ²΄λ₯Ό μ§μ μμ±νλ €κ³ νλ©΄ μλ¬κ° λ°μνλ€
Shape shape{}; //Error
ClosedShape* pClosedShape = new ClosedShape{} ; //Error
κ·Έλ¬λ, μΆμ ν΄λμ€μ ν¬μΈν°(*)λ μ°Έμ‘°(&)λ₯Ό ν΅ν΄ νμ ν΄λμ€μ κ°μ²΄λ₯Ό κ°λ¦¬ν€κ±°λ μ°Έμ‘°ν μ μλ€.
μΆμν΄λμ€μ κ°λ°© νμ μμΉ(Open-Closed Principle)
: ν΄λμ€λ νμ₯μλ μ΄λ €μκ³ λ³κ²½μλ λ«ν μμ΄μΌ νλ€!
κ°λ°©-νμ μμΉμ μ€μνλ©΄μ μΆμ ν΄λμ€μ μμ κ°μ ν¨μ, κ°μ μλ©Έμ λ±μ μ μ ν νμ©νλ©΄, μ μ°νκ³ νμ₯ κ°λ₯νλ©° μ μ§λ³΄μκ° μ¬μ΄ μμ€ν μ μ€κ³ν μ μλ€. μ΄λ¬ν μ€κ³λ νλ‘κ·Έλ¨μ κ²½μ§μ±μ μ€μ΄κ³ , μ½λμ μ¬μ¬μ©μ±μ λμ΄λ©°, μμ€ν μ μΌκ΄μ±κ³Ό μμ μ±μ κ°ννλ λ° κΈ°μ¬νλ€.
κ°λ°© νμ μμΉμ μ£Όλ‘ μμκ³Ό μΈν°νμ΄μ€λ₯Ό ν΅ν΄ ꡬνλλ€. μμ ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κΈ°λ₯μ μ μνκ³ , μ΄ ν΄λμ€λ₯Ό νμ₯νκ±°λ μΈν°νμ΄μ€λ₯Ό ꡬννμ¬ μλ‘μ΄ κΈ°λ₯μ μΆκ°νλ€.
- μΆμ ν΄λμ€λ μΈν°νμ΄μ€ μν μ νλ©°, μΆμ ν΄λμ€λ₯Ό ν΅ν΄ κ°λ°©-νμ μμΉμ ꡬνν μ μλ€.
- μμ κ°μ ν¨μλ₯Ό μ¬μ©νμ¬, νμ ν΄λμ€μμ λ°λμ μ¬μ μνλλ‘ κ°μ νλ€. μ΄λ₯Ό ν΅ν΄ κΈ°μ‘΄ ν΄λμ€λ₯Ό μμ νμ§ μκ³ λ μλ‘μ΄ νμ ν΄λμ€λ₯Ό μΆκ°νμ¬ κΈ°λ₯μ νμ₯ν μ μλ€.
μΆμ ν΄λμ€μ μμ μ±κ³Ό μΈν°νμ΄μ€ μ€κ³
λ°μ΄ν° λ©€λ²λ₯Ό κ°μ§μ§ μλ μΆμ ν΄λμ€
: μΆμ ν΄λμ€λ λ°μ΄ν° λ©€λ²(λ©€λ²λ³μ)λ₯Ό κ°μ§μ§ μλ κ²μ΄ λ°λμ§νλ€. μ΄λ ν΄λμ€λ₯Ό λ μμ μ μ΄κ³ μ μ°νκ² λ§λ€λ©°, μμμ ν΅ν΄ μ¬λ¬ ν΄λμ€μμ μΌκ΄λ μΈν°νμ΄μ€λ₯Ό μ 곡ν μ μκ² νλ€
μΆμ ν΄λμ€μ μμ±μ
: μΌλ°μ μΌλ‘ μΆμ ν΄λμ€μλ μμ±μκ° νμνμ§ μλ€. μΆμ ν΄λμ€λ μΈν°νμ΄μ€ μ 곡μ μ€μ μ λκΈ° λλ¬Έμ, λ°μ΄ν°λ₯Ό κ°μ§μ§ μμΌλ©°, λ°μ΄ν° μ΄κΈ°νκ° νμνμ§ μκΈ° λλ¬Έμ΄λ€.
'C Programming Language > C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C++ μ μΊμ€ν , λ€νμ±, λ€μ€ μμκ³Ό κ°μ μμ, κ°μ ν¨μ (2) | 2024.09.04 |
---|---|
C++ Inheritance(μμ), μμκ³Ό μ€λ²λ‘λ©, ν νλ¦Ώκ³Ό μμμ κ΄κ³ (0) | 2024.09.01 |
C++ Generic Programming : ν νλ¦Ώ(Templates) (0) | 2024.08.31 |
C++ μ°μ°μ μ€λ²λ‘λ©(Operator Overloading) (0) | 2024.08.31 |
C++ Shallow Copy(μμ 볡μ¬)μ Deep Copy(κΉμ 볡μ¬) (0) | 2024.08.29 |