03 νμ κ³Ό μΆμν (2) νμ
00. νμ
νμ μ κ°λ μ΄λ€.
νμ μ 곡ν΅μ μ κΈ°λ°μΌλ‘ κ°μ²΄λ€μ λ¬ΆκΈ° μν νμ΄λ€.
νμ μ κ°λ κ³Ό λ§μ°¬κ°μ§λ‘ μ¬λ³Ό, λ΄μ°, μΈμ°μ μ΄μ©ν΄ μμ ν μ μμΌλ©° νμ μ μνλ κ°μ²΄ μμ νμ μ μΈμ€ν΄μ€λΌκ³ νλ€.
νμ μ κ°λ κ³Ό λμΌνλ€.
λ°λΌμ νμ μ΄λ μ°λ¦¬κ° μΈμνκ³ μλ λ€μν μ¬λ¬Όμ΄λ κ°μ²΄μ μ μ©ν μ μλ μμ΄λμ΄λ κ΄λ μ μλ―Ένλ€.
μ΄λ€ κ°μ²΄μ νμ μ μ μ©ν μ μμ λ κ·Έ κ°μ²΄λ₯Ό νμ μ μΈμ€ν΄μ€λΌκ³ νλ€.
νμ μ μΈμ€ν΄μ€λ νμ μ ꡬμ±νλ μΈμ°μΈ κ°μ²΄ μ§ν©μ μΌμμ΄ λλ€.
νμ μ΄ κ·Όλ³Έμ μΌλ‘ κ°λ κ³Ό λμΌνλ€κ³ νλλΌλ μΌλ¨ μ»΄ν¨ν° λ΄λΆλ‘ λ€μ΄μ€λ μκ° μ’ λ κΈ°κ³μ μΈ μλ―Έλ‘ μ€μλ μ λ°μ μλ€.
κΈ°κ³μ μΈ μλ―Έλ μ’ μ’ κ°λ°μλ€μ 머리λ₯Ό νΌλμ€λ½κ² λ§λ λ€.
μ»΄ν¨ν° μμ μ΄μκ°λ λ°μ΄ν°λ₯Ό λͺ©μ μ λ°λΌ λΆλ₯(μ«μν, λ¬Έμμ΄ν, λ Όλ¦¬ν,,)νκΈ° μμνλ©΄μ νλ‘κ·Έλλ° μΈμ΄ μμλ μμν νμ μμ€ν (type system)μ΄ μλΌλκΈ° μμνλ€.
νμ μμ€ν μ λ©λͺ¨λ¦¬ μμ μ μ₯λ 0κ³Ό 1μ λν΄ μν κ°λ₯ν μμ κ³Ό λΆκ°λ₯ν μμ μ ꡬλΆν¨μΌλ‘μ¨ λ°μ΄ν°κ° μλͺ» μ¬μ©λλ κ²μ λ°©μ§νλ€.
κ²°κ³Όμ μΌλ‘ νμ μμ€ν μ λͺ©μ μ λ°μ΄ν°κ° μλͺ» μ¬μ©λμ§ μλλ‘ μ μ½μ¬νμ λΆκ³Όνλ κ²μ΄λ€.
β νμ μ λ°μ΄ν°κ° μ΄λ»κ² μ¬μ©λλλμ κ΄ν κ²μ΄λ€.
- μ«μν λ°μ΄ν° : λ°μ΄ν°λ₯Ό λνκ±°λ λΉΌκ±°λ κ³±νκ±°λ λλ μ μλ€.
- λ¬Έμμ΄ν λ°μ΄ν° : λ λ°μ΄ν°λ₯Ό μ°κ²°ν΄ μλ‘μ΄ λ¬Έμμ΄λ‘ λ§λ€ μ μκ³ , λ°μ΄ν°μ ν¬ν¨λ λ¬Έμμ κΈΈμ΄λ₯Ό μ μ μλ€.
: λ°μ΄ν°κ° μ΄λ€ νμ μ μνλμ§λ₯Ό κ²°μ νλ κ² = λ°μ΄ν°μ μ μ©ν μ μλ μμ
μ°μ°μ(operate) : λ°μ΄ν°λ₯Ό μ΄μ©ν΄ μνν μ μλ μμ (ex: +, -, *, / -> μ°μ μ°μ°μμ μΌμ’ )
μ¬κΈ°μ !! μ°μ°μμ μ’ λ₯κ° μλλΌ μ΄λ€ λ°μ΄ν°μ μ΄λ€ μ°μ°μλ₯Ό μ μ©ν μ μλλκ° κ·Έ λ°μ΄ν°μ νμ μ κ²°μ νλ€.
β νμ μ μν λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ΄λ»κ² νννλμ§λ μΈλΆλ‘λΆν° μ² μ νκ² κ°μΆ°μ§λ€.
λ°μ΄ν° νμ μ ννμ μ°μ° μμ μ μννκΈ°μ κ°μ₯ ν¨κ³Όμ μΈ ννκ° μ νλλ©°,
κ°λ°μλ ν΄λΉ λ°μ΄ν° νμ μ νν λ°©μμ λͺ°λΌλ λ°μ΄ν°λ₯Ό μ¬μ©νλ λ° μ§μ₯μ΄ μλ€.
λ°μ΄ν° νμ μ λ©λͺ¨λ¦¬ μμ μ μ₯λ λ°μ΄ν°μ μ’ λ₯λ₯Ό λΆλ₯νλ λ° μ¬μ©νλ λ©λͺ¨λ¦¬ μ§ν©μ κ΄ν λ©νλ°μ΄ν°λ€.
λ°μ΄ν°μ λν λΆλ₯λ μμμ μΌλ‘ μ΄λ€ μ’ λ₯μ μ°μ°μ΄ ν΄λΉ λ°μ΄ν°μ λν΄ μνλ μ μλμ§λ₯Ό κ²°μ νλ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλ¨μ μμ±ν λ μ°λ¦¬λ κ°μ²΄λ₯Ό μΌμ’ μ λ°μ΄ν°μ²λΌ μ¬μ©νλ€.
λ°λΌμ κ°μ²΄λ₯Ό νμ μ λ°λΌ λΆλ₯νκ³ κ·Έ νμ μ μ΄λ¦μ λΆμ΄λ κ²μ κ²°κ΅ νλ‘κ·Έλ¨μμ μ¬μ©ν μλ‘μ΄ λ°μ΄ν° νμ μ μ μΈνλ κ²κ³Ό κ°λ€.
λμΌν μ± μμ μννλ μΌλ ¨μ κ°μ²΄λ λμΌν νμ μ μνλ€κ³ λ§ν μ μλ€.
-> κ°μ νμ μ μν κ°μ²΄λ νλλ§ λμΌνλ€λ©΄ μλ‘ λ€λ₯Έ λ°μ΄ν°λ₯Ό κ°μ§ μ μλ€.
μ¬κΈ°μ, λμΌν νλ = λμΌν μ± μ = λμΌν λ©μΈμ§
-> λμΌν νμ μ μν κ°μ²΄λ λ΄λΆμ λ°μ΄ν° νν λ°©μμ΄ λ€λ₯΄λλΌλ λμΌν λ©μμ§λ₯Ό μμ νκ³ μ΄λ₯Ό μ²λ¦¬ν μ μλ€.
λ€λ§ λ΄λΆμ νν λ°©μμ΄ λ€λ₯΄κΈ° λλ¬Έμ λμΌν λ©μμ§λ₯Ό μ²λ¦¬νλ λ°©μμ μλ‘ λ€λ₯Ό μλ°μ μλ€.
-> μ΄κ²μ λ€νμ±μ μλ―Έλ₯Ό λΆμ¬νλ€.
(λ€νμ± : λμΌν μμ²μ λν΄ μλ‘ λ€λ₯Έ λ°©μμΌλ‘ μλ΅ν μ μλ λ₯λ ₯) -> λ€νμ μΈ κ°μ²΄λ€μ λμΌν νμ (λλ νμ κ³μΈ΅)μ μνλ€.
νλ₯ν κ°μ²΄μ§ν₯ μ€κ³λ μΈλΆμ νλλ§μ μ 곡νκ³ λ°μ΄ν°λ νλ λ€λ‘ κ°μΆ°μΌ νλ€. -> μΊ‘μν
-> κ³΅μ© μΈν°νμ΄μ€ λ€λ‘ λ°μ΄ν°λ₯Ό μΊ‘μννλ μ€λλ 격μΈμ κ°μ²΄λ₯Ό νλμ λ°λΌ λΆλ₯νκΈ° μν΄ μ§μΌμΌνλ κΈ°λ³Έμ μΈ μμΉμ΄λ€.
νλμ λ°λΌ κ°μ²΄λ₯Ό λΆλ₯νκΈ° μν΄μλ κ°μ²΄κ° λ΄λΆμ μΌλ‘ κ΄λ¦¬ν΄μΌ νλ λ°μ΄ν°κ° μλλΌ κ°μ²΄κ° μΈλΆμ μ 곡ν΄μΌ νλ νλμ λ¨Όμ μκ°ν΄μΌ νλ€. μ΄λ₯Ό μν΄μλ κ°μ²΄κ° μΈλΆμ μ 곡ν΄μΌ νλ μ± μμ λ¨Όμ κ²°μ νκ³ κ·Έ μ± μμ μννλ λ° μ ν©ν λ°μ΄ν°λ₯Ό λμ€μ κ²°μ ν ν, λ°μ΄ν°λ₯Ό μ± μμ μννλ λ° νμν μΈλΆ μΈν°νμ΄μ€ λ€λ‘ μΊ‘μνν΄μΌ νλ€.
μ± μ-μ£Όλ μ€κ³(Responsibility-Driven Design)λΌκ³ λΆλ₯΄λ κ°μ²΄μ§ν₯ μ€κ³ λ°©λ²μ λ°μ΄ν°λ₯Ό λ¨Όμ μκ°νλ λ°μ΄ν°-μ£Όλ μ€κ³(Data-Driven Design) λ°©λ²μ λ¨μ μ κ°μ νκΈ° μν΄ κ³ μλλ€.
κ°μ²΄λ₯Ό κ²°μ νλ κ²μ νλμ΄λ€.
λ°μ΄ν°λ λ¨μ§ νλμ λ°λ₯Ό λΏμ΄λ€.
μ΄κ²μ΄ κ°μ²΄λ₯Ό κ°μ²΄λ΅κ² λ§λλ κ°μ₯ ν΅μ¬μ μΈ μμΉμ΄λ€.
01. νμ μ κ³μΈ΅
μΌλ°ν/νΉμν
μΌλ°μ μΈ νμ μ΄λ νΉμν νμ μ΄ κ°μ§ λͺ¨λ νλλ€ μ€μμ μΌλΆ νλλ§μ κ°μ§λ νμ μ κ°λ¦¬ν¨λ€.
νΉμν νμ μ΄μ΄λ μΌλ°μ μΈ νμ μ΄ κ°μ§ λͺ¨λ νμ μ ν¬ν¨νμ§λ§ κ±°κΈ°μ λν΄ μμ λ§μ νλμ μΆκ°νλ νμ μ κ°λ¦¬ν¨λ€.
μνΌνμ /μλΈνμ
μΌλ°ν/νΉμν κ΄κ³λ μ’ λ μΌλ°μ μΈ ν νμ κ³Ό μ’ λ νΉμν ν νμ κ°μ κ΄κ³λ€.
μ΄ λ μ’ λ μΌλ°μ μΈ νμ μ μνΌνμ (Supertype)μ΄λΌκ³ νκ³ μ’ λ νΉμν νμ μ μλΈνμ (Subtype)μ΄λΌκ³ νλ€.
μνΌνμ κ³Ό μλΈνμ μμ μ€μν κ²μ λ νμ κ°μ κ΄κ³κ° νλμ μν΄ κ²°μ λλ€.
-> μ΄λ€ νμ μ΄ λ€λ₯Έ νμ μ μλΈνμ μ΄ λκΈ° μν΄μλ νμμ νΈνμ±μ λ§μ‘±μμΌμΌ νλ€.
-> μΌλ°μ μΌλ‘ μλΈνμ μ μνΌνμ μ νμμ νΈνλκΈ° λλ¬Έμ μλΈνμ μ μνΌνμ μ λ체ν μ μμ΄μΌ νλ€.
02. μ μ λͺ¨λΈ
μ νμ μ μ¬μ©ν΄μΌ νλκ°? κ°μ²΄μ§ν₯μ κ°μ²΄λ₯Ό μ§ν₯νλ κ²μ΄λ―λ‘ κ°μ²΄λ§ λ€λ£¨λ©΄ λμ§ μλκ°?
: νμ μ μ¬μ©νλ μ΄μ λ μΈκ°μ μΈμ§ λ₯λ ₯μΌλ‘λ μκ°μ λ°λΌ λμ μΌλ‘ λ³νλ κ°μ²΄λ¦ 볡μ‘μ±μ 극볡νκΈ°κ° λ무 μ΄λ ΅κΈ° λλ¬Έμ΄λ€.
νμ μ μ¬μ©νλ©΄ λμ μΌλ‘ λ³νλ κ°μ²΄μ μνλ₯Ό μ μ μΈ κ΄μ μμ ννν μ μλ€.
β νμ μ μΆμνλ€.
νμ μ μ΄μ©νλ©΄ κ°μ²΄μ λμ μΈ νΉμ±μ μΆμνν μ μλ€.
κ²°κ΅ νμ μ μκ°μ λ°λ₯Έ κ°μ²΄μ μν λ³κ²½μ΄λΌλ 볡μ‘μ±μ λ¨μνν μ μλ ν¨κ³Όμ μΈ λ°©λ²μ΄λ€.
β κ°μ²΄λ₯Ό μκ°ν λ, μ°λ¦¬λ λ κ°μ§ λͺ¨λΈμ λμμ κ³ λ €νκ³ μλ€.
1. κ°μ²΄κ° νΉμ μμ μ ꡬ체μ μΌλ‘ μ΄λ€ μνλ₯Ό κ°μ§λλ?
→ μ΄λ₯Ό κ°μ²΄μ μ€λ μ·(snapshot)μ΄λΌκ³ νλ€.
→ κ°μ²΄μ§ν₯ λͺ¨λΈλ§μ μν νμ€ μΈμ΄(UML)μμ μ€λ μ·μ κ°μ²΄ λ€μ΄μ΄κ·Έλ¨(object diagram)μ΄λΌκ³ λ λΆλ¦°λ€.
μ€λ μ·μ²λΌ μ€μ λ‘ κ°μ²΄κ° μ΄μ μμ§μ΄λ λμ μνκ° μ΄λ»κ² λ³νκ³ μ΄λ»κ² νλνλμ§λ₯Ό ν¬μ°©νλ κ²μ λμ λͺ¨λΈ(dynamic model)λΌκ³ νλ€.
2. κ°μ²΄κ° κ°μ§ μ μλ λͺ¨λ μνμ λͺ¨λ νλμ μκ°μ λ 립μ μΌλ‘ νννλ κ²
→ μΌλ°μ μΌλ‘ μ΄λ° λͺ¨λΈμ νμ λͺ¨λΈ(type diagram)μ΄λΌκ³ νλ€.
μ΄ λͺ¨λΈμ λμ μΌλ‘ λ³νλ κ°μ²΄μ μνκ° μλλΌ κ°μ²΄κ° μν νμ μ μ μ μΈ λͺ¨μ΅μ νννκΈ° λλ¬Έμ μ μ λͺ¨λΈ(static model)μ΄λΌκ³ νλ€.
* κ°μ²΄μ§ν₯ μ΄ν리μΌμ΄μ μ μ€κ³νκ³ κ΅¬ννκΈ° μν΄μλ κ°μ²΄ κ΄μ μ λμ λͺ¨λΈκ³Ό κ°μ²΄λ₯Ό μΆμνν νμ κ΄μ μ μ μ λͺ¨λΈμ μ μ ν νΌμ©ν΄μΌ νλ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ΄μ©ν΄ ν΄λμ€λ₯Ό μμ±νλ μμ μλ μμ€ν μ μ μ μΈ κ΄μ μμ μ κ·Όνλ κ²μ΄λ€.
κ·Έλ¬λ μ€μ λ‘ μ ν리μΌμ΄μ μ μ€νν΄ κ°μ²΄μ μν λ³κ²½μ μΆμ νκ³ λλ²κΉ νλ λμμλ κ°μ²΄μ λμ μΈ λͺ¨λΈμ νννκ³ μλ κ²μ΄λ€.
β κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄μμ μ μ μΈ λͺ¨λΈμ ν΄λμ€λ₯Ό μ΄μ©ν΄ ꡬνλλ€.
λ°λΌμ νμ μ ꡬννλ κ°μ₯ 보νΈμ μΈ λ°©λ²μ ν΄λμ€λ₯Ό μ΄μ©νλ κ²μ΄λ€.
- νμ : κ°μ²΄λ₯Ό λΆλ₯νκΈ° μν΄ μ¬μ©νλ κ°λ
- ν΄λμ€ : λ¨μ§ νμ μ ꡬνν μ μλ μ¬λ¬ ꡬν λ©μ»€λμ¦ μ€ νλμΌ λΏ
(μ€μ λ‘ μλ°μ€νΈλ¦½νΈμ κ°μ νλ‘ν νμ κΈ°λ°μ μΈμ΄μλ ν΄λμ€κ° μ‘΄μ¬νμ§ μλλ€.)
β κ²°κ΅ κ°μ²΄μ§ν₯μμ μ€μν κ²μ λμ μΌλ‘ λ³νλ κ°μ²΄μ 'μν'μ μνλ₯Ό λ³κ²½νλ 'νμ'μ΄λ€. β
β ν΄λμ€λ νμ μ ꡬννκΈ° μν΄ νλ‘κ·Έλλ° μΈμ΄μμ μ 곡νλ ꡬν λ©μ»€λμ¦μ΄λΌλ μ¬μ€μ κΈ°μ΅νμ. β