κ°μ²΄μ§ν₯μΈμ΄ - μλ°μ C++
β
μλ νμΈμ. μμνμ λλ€.
κ°μ²΄μ§ν₯μΈμ΄λ?
κ°μ²΄μ§ν₯μΈμ΄λ νμ€ μΈκ³μ νμμ μ»΄ν¨ν°μμ κ°μ²΄(Object)λ‘ λͺ¨λΈνν¨μΌλ‘μ¨, μ»΄ν¨ν°λ₯Ό μμ°μ€λ¬μ΄ ννλ₯Ό μ¬μ©νμ¬ μ¬λ¬κ°μ§ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ νλ‘κ·Έλλ° μΈμ΄μ λλ€.
β
μλ°(JAVA), C++ λ±μ΄ κ°μ²΄μ§ν₯μΈμ΄μ λνμ μΈ νλ‘κ·Έλλ° μΈμ΄μ λλ€.
β
μ°λ¦¬κ° μ€μνμμ μ°λ λͺ¨λ κ²μ κ°μ²΄λΌκ³ νλ©°, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨ κ΅¬νμ νμν κ°μ²΄λ₯Ό νμ νκ³ κ°κ°μ κ°μ²΄λ€μ μν μ΄ λ¬΄μμΈμ§λ₯Ό μ μνμ¬ κ°μ²΄λ€ κ°μ μνΈμμ©μ ν΅ν΄ νλ‘κ·Έλ¨μ λ§λλ κ²μ λ§ν©λλ€.
β
κ°μ²΄λ κ°μ²΄ κ°μ μ°κ²°λ‘ λμ΄μμΌλ©° κ°κ°μ κ°μ²΄ μμ μλ£κ΅¬μ‘°μ μκ³ λ¦¬μ¦μ΄ λ€μ΄μλ κ²μ λλ€.
β
κ°μ²΄μ§ν₯ λͺ¨λΈλ§μ κΈ°λ₯μ΄ μλ κ°μ²΄κ° μ€μ¬μ΄ λλ©° "λκ° μ΄λ€ μΌμ ν κ²μΈκ°?"κ° ν΅μ¬μ΄ λλ, μ¦, κ°μ²΄λ₯Ό λμΆνκ³ κ°κ°μ μ½ν μ μ μν΄ λκ°λ κ²μ μ΄μ²¨μ λ§μΆ₯λλ€.
κ°μ²΄μ§ν₯μΈμ΄μ νΉμ§
1. μΆμν(abstraction)
- κ°μ²΄λ€μ 곡ν΅μ μΈ νΉμ§(κΈ°λ₯, μμ±)μ λμΆνλ κ²
- κ°μ²΄μ§ν₯μ κ΄μ μμλ ν΄λμ€λ₯Ό μ μνλ κ²μ μΆμνλΌκ³ ν μ μλ€.(ν΄λμ€κ° μλ κ°μ²΄μ§ν₯μΈμ΄λ μ‘΄μ¬ ex.JavaScript)
β
2. μΊ‘μν(encapsulation)
- μ€μ λ‘ κ΅¬νλλ λΆλΆμ μΈλΆμ λλ¬λμ§ μλλ‘ νμ¬ μ 보λ₯Ό μλν μ μλ€.
- κ°μ²΄κ° λ 립μ μΌλ‘ μν μ ν μ μλλ‘ λ°μ΄ν°μ κΈ°λ₯μ νλλ‘ λ¬Άμ΄ κ΄λ¦¬νλ κ²
- μ½λκ° λ¬Άμ¬μμ΄μ μ€λ₯κ° μμ΄ νΈλ¦¬νλ€.
- λ°μ΄ν°λ₯Ό 보μ΄μ§μκ³ μΈλΆμ μνΈμμ©μ ν λλ λ©μλλ₯Ό μ΄μ©νμ¬ ν΅μ μ νλ€. λ³΄ν΅ λΌμ΄λΈλ¬λ¦¬λ‘ λ§λ€μ΄μ μ κ·Έλ μ΄λν΄ μ¬μ©ν μ μλ€.
β
3. μμμ±(inheritance)
- νλμ ν΄λμ€κ° κ°μ§ νΉμ§(ν¨μ, λ°μ΄ν°)μ ν΄λμ€κ° κ·Έλλ‘ λ¬Όλ €λ°λ κ²
- μ΄λ―Έ μμ±λ ν΄λμ€λ₯Ό λ°μμ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²
- κΈ°μ‘΄ μ½λλ₯Ό μ¬νμ©ν΄μ μ¬μ©ν¨μΌλ‘μ¨ κ°μ²΄μ§ν₯ λ°©λ²μ μ€μν κΈ°λ₯ μ€ νλμ μνλ€.
β
4. λ€νμ±(polymorphism)
- μ½κ° λ€λ₯Έ λ°©λ²μΌλ‘ λμνλ ν¨μλ₯Ό λμΌν μ΄λ¦μΌλ‘ νΈμΆνλ κ²
- λμΌν λͺ λ Ήμ ν΄μμ μ°κ²°λ κ°μ²΄μ μμ‘΄νλ κ²
- μ€λ²λΌμ΄λ©(Overriding), μ€λ²λ‘λ©(Overloading)
β μ€λ²λΌμ΄λ©(Overriding) - λΆλͺ¨ν΄λμ€μ λ©μλμ κ°μ μ΄λ¦μ μ¬μ©νλ©° 맀κ°λ³μλ κ°λ λ΄λΆμμ€λ₯Ό μ¬μ μνλ κ²
β μ€λ²λ‘λ©(Overloading) - κ°μ μ΄λ¦μ ν¨μλ₯Ό μ¬λ¬ κ° μ μν ν 맀κ°λ³μλ₯Ό λ€λ₯΄κ² νμ¬ κ°μ μ΄λ¦μ κ²½μ°μ λ°λΌ νΈμΆνμ¬ μ¬μ©νλ κ²
β
5. λμ λ°μΈλ©(Dynamic Binding)
- κ°μ ν¨μλ₯Ό νΈμΆνλ μ½λλ₯Ό μ»΄νμΌν λ, λ°μΈλ©μ μ€νμκ°μ κ²°μ νλ κ²
- νμ ν΄λμ€μ κ°μ²΄μ λν΄, κΈ°λ³Έ ν΄λμ€μ ν¬μΈν°λ‘ κ°μ ν¨μκ° νΈμΆλ λ μΌμ΄λλ€.
- ν¨μλ₯Ό νΈμΆνλ©΄ λμ λ°μΈλ©μ ν΅ν΄ νμ ν΄λμ€μ μ€λ²λΌμ΄λ© λ ν¨μκ° μ€ν
- νλ‘κ·Έλλ°μ μ μ°μ±μ λμ¬μ£Όλ©° νμ ν΄λμ€μμ μ¬μ μν ν¨μμ νΈμΆμ 보μ₯(λ€ν κ°λ μ€ν)
κ°μ²΄μ§ν₯μΈμ΄μ μ₯μ
1. μννΈμ¨μ΄μ μμ°μ± ν₯μ
- μ λ’°μ± μλ μννΈμ¨μ΄λ₯Ό μμ½κ² μμ±ν μ μλ€.(κ°λ°μκ° λ§λ λ°μ΄ν°λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ λ’°ν μ μλ€.)
- μ½λλ₯Ό μ¬μ¬μ©νκΈ° μ½λ€.(μμ, μΊ‘μν, λ€νμ±μΌλ‘ μΈν΄ μ¬μ¬μ©ν μ μλ€.)
- μ κ·Έλ μ΄λκ° μ½λ€.
- λλ²κΉ μ΄ μ½λ€.
β
2. μ€μΈκ³μ λν μ¬μ΄ λͺ¨λΈλ§
- μ€μΈκ³μ λν λͺ¨λΈλ§μ μ’ λ μ½κ²ν΄μ€λ€.(λͺ¨λ κ²μ κ°μ²΄λ€μ μνΈμμ©μΌλ‘ μκ°)
β
3. 보μμ± ν₯μ
- 보μμ±μ΄ λλ€.(μΊ‘μν, λ°μ΄ν° μλ, λ€νμ±μΌλ‘ μΈν΄ νμν μ 보λ₯Ό μ¬μ μνκ±°λ getter, setterλ₯Ό μ΄μ©νκΈ° λλ¬Έμ 보μμ±μ΄ λλ€.)
κ°μ²΄μ§ν₯μΈμ΄μ λ¨μ
1. λλ¦°μ€νμλ
κ°μ²΄μ§ν₯μΈμ΄λ μΊ‘μνμ 격리ꡬ쑰μ λλ¬Έμ μ μ°¨μ§ν₯ νλ‘κ·Έλλ°κ³Ό λΉκ΅νλ©΄ μ€νμλκ° λ립λλ€. λν, κ°μ²΄μ§ν₯μΈμ΄μμλ λͺ¨λ κ²μ κ°μ²΄λ‘ μκ°νκΈ° λλ¬Έμ μΆκ°μ μΈ ν¬μΈν° ν¬κΈ°μ λ©λͺ¨λ¦¬μ μ°μ°μ λν λΉμ©μ΄ λ€μ΄κ°κ² λ©λλ€.
β
- μ μ°¨μ§ν₯ νλ‘κ·Έλλ°μ λΉν΄ λλ¦° μ€ν μλ
- νμν λ©λͺ¨λ¦¬μμ μ¦κ°
κ°μ²΄μ§ν₯μΈμ΄μ κΈ°λ³Έ κ΅¬μ± μμ
- ν΄λμ€(Class) - κ°μ μ’ λ₯(λλ λ¬Έμ ν΄κ²°μ μν)μ μ§λ¨μ μνλ μμ±(attribute)κ³Ό νμ(behavior)λ₯Ό μ μ ν κ²μΌλ‘ κ°μ²΄μ§ν₯μΈμ΄μ κΈ°λ³Έμ μΈ μ¬μ©μ μ μ λ°μ΄ν°ν(user define data type)μ΄λΌκ³ ν μ μμ΅λλ€. ν΄λμ€λ νλ‘κ·Έλλ¨Έκ° μλμ§λ§ ν΄κ²°ν΄μΌ ν λ¬Έμ κ° μνλ μμμ μ’ μ¬νλ μ¬λμ΄λΌλ©΄ μ¬μ©ν μ μκ³ , λ€λ₯Έ ν΄λμ€ λλ μΈλΆ μμμ λ 립μ μΌλ‘ λμμΈ ν΄μΌν©λλ€.
β
- κ°μ²΄(Object) - ν΄λμ€μ μΈμ€ν΄μ€(μ€μ λ‘ λ©λͺ¨λ¦¬μμ ν λΉλ κ²)μ λλ€. κ°μ²΄λ μμ κ³ μ μ μμ±(attribute)λ₯Ό κ°μ§λ©° ν΄λμ€μμ μ μν νμ(behavior)λ₯Ό μνν μ μμ΅λλ€. κ°μ²΄μ νμλ ν΄λμ€μ μ μλ νμμ λν μ μλ₯Ό 곡μ ν¨μΌλ‘μ¨ λ©λͺ¨λ¦¬λ₯Ό κ²½μ μ μΌλ‘ μ¬μ©ν©λλ€.
β
- λ©μλ(Method), λ©μμ§(Message) - ν΄λμ€λ‘λΆν° μμ±λ κ°μ²΄λ₯Ό μ¬μ©νλ λ°©λ²μΌλ‘μ κ°μ²΄μ λͺ λ Ήμ λ΄λ¦¬λ λ©μμ§λΌ ν μ μμ΅λλ€. λ©μλλ ν κ°μ²΄μ μλΈλ£¨ν΄(subroutine) ννλ‘ κ°μ²΄μ μμ±μ μ‘°μνλ λ° μ¬μ©λ©λλ€. λ, κ°μ²΄ κ°μ ν΅μ μ λ©μμ§λ₯Ό ν΅ν΄ μ΄λ£¨μ΄μ§λλ€.
κ°μ²΄μ§ν₯μΈμ΄ - μλ°
μλ°(Java)λ CμΈμ΄μ κ°μ²΄μ§ν₯μΈμ΄μ κΈ°λ₯μ μΆκ°νμ¬ λ§λ C++κ³Όλ λ¬λ¦¬ μ²μλΆν° κ°μ²΄μ§ν₯μΈμ΄λ‘ κ°λ°λ νλ‘κ·Έλλ° μΈμ΄μ λλ€. μλ°λ μλ° κ°μ λ¨Έμ (JVM, Java Virtual Machine)μ μ¬μ©νμ¬, μ΄μ체μ μλ λ 립μ μΌλ‘ λμν μ μμ΅λλ€.
β
λ°λΌμ μλ°λ μ΄λ μ΄μ체μ μμλ κ°μ ννλ‘ μ€νλ μ μμ΅λλ€.
β
λ°λ‘ μ΄λ¬ν μ μ΄ μλ§μ κ°λ°μλ‘ νμ¬κΈ μλ°λ₯Ό μ¬μ©νκ² νλ μλλ ₯μ΄ λκ³ μμ΅λλ€. νμ¬ μλ°λ μ μΈκ³μμ κ°μ₯ λ§μ΄ μ¬μ©νλ νλ‘κ·Έλλ° μΈμ΄ μ€ νλμ λλ€.
β
μλ°μ μ₯μ
- μλ°λ μ΄μ체μ μλ λ 립μ μΌλ‘ μ€νν μ μμ΅λλ€.
- μλ°λ λΆνμν κΈ°λ₯μ κ³Όκ°ν μ κ±°νμ¬ λ€λ₯Έ μΈμ΄μ λΉν΄ λ°°μ°κΈ°κ° μ½μ΅λλ€.
- μλ°λ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ±μ μ§μνμ¬ λ€λ₯Έ μΈμ΄μ λΉλ μμ μ±μ΄ λμ΅λλ€.
- μλ°λ μ°μ°μ μ€λ²λ‘λ©μ κΈμ§νκ³ μ λ€λ¦μ λμ ν¨μΌλ‘μ¨ μ½λμ κ°λ μ±μ λμμ΅λλ€.
- μλ°μ κ΄ν μλ§μ μ°Έκ³ μλ£λ₯Ό μ°Ύμ μ μμ΅λλ€.
β
μλ°μ λ¨μ
- μλ°λ μ€νμ μν΄ μλ° κ°μ λ¨Έμ μ κ±°μ³μΌνλ―λ‘, λ€λ₯Έ μΈμ΄μ λΉν΄ μ€νμλκ° λ립λλ€.
- μλ°λ μμΈ μ²λ¦¬κ° μ λμ΄ μμ§λ§, κ°λ°μκ° μΌμΌμ΄ μ²λ¦¬λ₯Ό μ§μ ν΄ μ€μΌ νλ€λ λΆνΈν¨μ΄ μμ΅λλ€.
- μλ°λ λ€λ₯Έ μΈμ΄μ λΉν΄ μμ±ν΄μΌνλ μ½λμ κΈΈμ΄κ° κΈ΄ νΈμ λλ€.
κ°μ²΄μ§ν₯μΈμ΄ - C++
C++μ κΈ°μ‘΄μ CμΈμ΄μ μ¬λ¬κ°μ§ κΈ°λ₯μ μΆκ°νμ¬ λ§λ νλ‘κ·Έλλ° μΈμ΄μ λλ€. C++μ CμΈμ΄μμ μ μ°¨μ§ν₯μΈμ΄μ νΉμ§μ κ°μ Έμμ΅λλ€. λν, Simulaμμ ν΄λμ€λ₯Ό μ¬μ©νλ κ°μ²΄μ§ν₯μΈμ΄μ νΉμ§μ κ°μ Έμμ΅λλ€. κ·Έμ λμμ ν νλ¦ΏμΌλ‘ λλ³λλ μΌλ°ν νλ‘κ·Έλλ° λ°©μμ μΈμ΄μ΄κΈ°λ ν©λλ€.
β
C++μ CμΈμ΄λ₯Ό κΈ°μ΄λ‘ μΌμ λ§λ μΈμ΄μ΄λ―λ‘, κΈ°μ‘΄μ C νμ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ·Έλλ‘ μ¬μ©ν μ μμ΅λλ€.
β
μ΄λ¬ν C++μ νμ , μ°μ°μ, μ μ΄λ¬Έ, ν¬μΈν° λ±μ μ£Όμ λ¬Έλ²μ CμΈμ΄μμ κ°μ ΈμκΈ° λλ¬Έμ CμΈμ΄μ λν κΈ°μ΄λ₯Ό μκ³ κ³μλ©΄ μ’μ΅λλ€. νμ§λ§, C++μ λ°°μ°κΈ° μν΄μλ κΈ°μ‘΄μ CμΈμ΄λ§μ μ μ°¨ μ§ν₯μ νλ‘κ·Έλλ° μ΅κ΄μμ λ²μ΄λ νμκ° μμ΅λλ€.
β
λ°λΌμ, λ°λμ CμΈμ΄λΆν° λ°°μ°μ€ νμλ μμΌλ©°, C++μμ λ§μΌλ‘λ μΆ©λΆν νμ΅ν μ μμ΅λλ€.
β
C++μ νΉμ§
β
- C++μ μ μ°¨ μ§ν₯μ μ΄λ©° ꡬ쑰μ νλ‘κ·Έλλ° μΈμ΄μ λλ€.
- C++μ κ°μ²΄μ§ν₯μΈμ΄μ λλ€.
- C++μ μΌλ°ν νλ‘κ·Έλλ° μΈμ΄μ λλ€.
β
μ΄μ²λΌ C++μ μΈκ°μ§ νλ‘κ·Έλλ° λ°©μμ λͺ¨λ μ§μνλ μΈμ΄μ λλ€. λ°λΌμ, λ€μν λ°©μμΌλ‘ νλ‘κ·Έλ¨μ μμ±ν μ μμ΅λλ€. λν, λ€μν μμ€ν μμμ νλ‘κ·Έλλ°μ μ§μνλ μ μ©νκ³ λ κ°λ ₯ν ν΄λμ€ λΌμ΄λΈλ¬λ¦¬λ€μ΄ μμ£Ό λ§μ΄ μ 곡λ©λλ€.
β
νμ§λ§, C++μ μ΄λ κ² μΈμ΄λ‘μ λ€μν λ°©μμ μ§μνλ©° κ°λ ₯νκ² κ±°λλ¬μ§λ§, νλ‘κ·Έλλ¨Έμ μΈ‘λ©΄μμ 보면 μ΄λ¬ν λ€μν κΈ°λ₯μ λͺ¨λ λ°°μμΌνλ λΆλ΄μΌλ‘ μμ©νκΈ°λ ν©λλ€.
μ΄λ² ν¬μ€ν μμλ κ°μ²΄μ§ν₯μΈμ΄μ κ°λ κ³Ό νΉμ§, μ₯μ , λ¨μ μ μμλ³΄κ³ κ·Έμ λ°λ₯Έ κ°μ²΄μ§ν₯μΈμ΄μ λνμ μΈ νλ‘κ·Έλλ° μΈμ΄(μλ°, C++)μ κ°λ , μ₯μ , λ¨μ μ μμ보μμ΅λλ€. μλ°μ C++μ νμ΅μ΄ λͺ©μ μ΄μκ±°λ, λ λμκ° κ°λ°μμ κΏμ κ°μ§κ³ κ³μ λΆμ΄λΌλ©΄ μλμ λ€μ΄λ²νΌμ ν΅ν΄ κΆκΈνμ μ μ΄λ κΈ°νμ¬νμ κ°λ¨νκ²λΌλ λ¨κ²¨μ£Όμλ©΄ μ κ° μ§μ λΉ λ₯΄κ³ μ ννκ² ν΄κ²°ν΄λλ¦¬κ² μ΅λλ€.
β
κ°μ¬ν©λλ€ :)
β
βΌ κ°μ²΄μ§ν₯μΈμ΄, μλ°μ C++μ κΆκΈμ ν΄κ²°μ² βΌ