μ§λ μκ° μ°λ¦¬λ μ λ΅ ν¨ν΄μ λν΄ μμ보μμ΅λλ€.
μ΄λ² μκ°μ μ΅μ λ² ν¨ν΄μ λν΄ μμλ³Ό μκ°μ
λλ€.
πΒ μν€λ°±κ³Ό
βπΌΒ μ΅μ λ² ν¨ν΄μ κ°μ²΄μ μν λ³νλ₯Ό κ΄μ°°νλ κ΄μ°°μλ€,
Β Β Β Β Β μ¦ μ΅μ λ²λ€μ λͺ©λ‘μ κ°μ²΄μ λ±λ‘νμ¬ μν λ³νκ° μμ λλ§λ€ λ©μλ λ±μ ν΅ν΄
Β Β Β Β Β κ°μ²΄κ° μ§μ λͺ©λ‘μ κ° μ΅μ λ²λ€μκ² ν΅μ§νλλ‘ νλ λμμΈ ν¨ν΄μ λλ€.
Β Β Β Β Β μ£Όλ‘ λΆμ° μ΄λ²€νΈ νΈλ€λ§ μμ€ν μ ꡬννλλ° μ¬μ©λ©λλ€.
πΒ λκ° μ€μν μΌμ΄ μΌμ΄λ¬μ λ, κ°μ²΄λ€νν μμμ μλ € μ€ μ μλ ν¨ν΄μ λλ€.
Β Β Β Β Β κ°μ²΄ μͺ½μμλ κ³μν΄μ μ 보λ₯Ό λ°μμ§ μ¬λΆλ₯Ό μ€νμ€μ κ²°μ‘ν μ μμ΅λλ€.
Β Β Β Β Β μ΅μ λ² ν¨ν΄μ JDKμμ κ°μ₯ λ§μ΄ μ°μ΄λ ν¨ν΄ κ°μ΄λ° νλμ΄κΈ°λ ν©λλ€.
μ΄ μμ€ν
μ κΈ°μμ²κ³Ό WeatherData(κΈ°μμ²μΌλ‘λΆν° μ€λ λ°μ΄ν°λ₯Ό μΆμ νλ κ°μ²΄),
κ·Έλ¦¬κ³ μ¬μ©μμκ² νμ¬ κΈ°μ 쑰건μ 보μ¬μ£Όλ λμ€νλ μ΄, μ΄λ κ² μΈ μμλ‘ μ΄λ£¨μ΄μ§λλ€.
WeatherData ν΄λμ€μλ μΈ κ°μ§ μΈ‘μ κ°(μ¨λ, μ΅λ, κΈ°μ)μ μμλ΄κΈ° μν λ©μλκ° μμ΅λλ€.
μλ‘μ΄ κΈ°μ μΈ‘μ λ°μ΄ν°κ° λμ¬ λλ§λ€ WeatherData ν΄λμ€μ
measurementsChanged( ) λ©μλκ° νΈμΆλ©λλ€.
κΈ°μ λ°μ΄ν°λ₯Ό μ¬μ©νλ μ¬λ¬κ°μ§ λμ€νλ μ΄ νλͺ©μ ꡬνν΄μΌ ν©λλ€.
λν, WeatherDataμμ μλ‘μ΄ μΈ‘μ κ°μ΄ λ€μ΄μ¬ λλ§λ€ λμ€νλ μ΄λ₯Ό κ°±μ ν΄μΌ ν©λλ€.
μΆκ°λ‘ μμ€ν
μ΄ νμ₯ κ°λ₯ν΄μΌ ν©λλ€.
λ€λ₯Έ κ°λ°μλ€μ΄ λ³λμ λμ€νλ μ΄ νλͺ©μ λ§λ€ μ μλλ‘ ν΄μΌ νκ³ ,
μ¬μ©μλ€μ΄ μ ν리μΌμ΄μ
μμ λ§μλλ‘ λμ€νλ μ΄ νλͺ©μ μΆκ°/μ κ±° ν μ μλλ‘ ν΄μΌν©λλ€.
πΒ μ΅μ λ² ν¨ν΄μμλ ν κ°μ²΄μ μνκ° λ°λλ©΄
Β Β Β Β Β κ·Έ κ°μ²΄μ μμ‘΄νλ λ€λ₯Έ κ°μ²΄λ€νν μ°λ½μ΄ κ°κ³ ,
Β Β Β Β Β μλμΌλ‘ λ΄μ©μ΄ κ°±μ λλ λ°©μμΌλ‘
Β Β Β Β Β μΌλλ€ (one-to-many) μμ‘΄μ±μ μ μν©λλ€.
μΌλλ€ κ΄κ³λ μ£Όμ μ μ΅μ λ²μ μν΄ μ μλ©λλ€. μ΅μ λ²λ μ£Όμ μ μμ‘΄νκ³ ,
μ£Όμ μ μνκ° λ°λλ©΄ μ΅μ λ²νν
μ°λ½μ ν©λλ€.
μ°λ½ λ°©λ²μ λ°λΌ μ΅μ λ²μ μλ κ°μ΄ μλ‘μ΄ κ°μΌλ‘ κ°±μ λ μ λ μμ΅λλ€.
μ΅μ λ² ν¨ν΄μ ꡬννλ λ°©λ²μλ μ¬λ¬κ°μ§κ° μμ§λ§,
λλΆλΆ μ£Όμ (Subject) μΈν°νμ΄μ€ μ μ΅μ λ²(Observer) μΈν°νμ΄μ€κ°
λ€μ΄μλ ν΄λμ€ λμμΈμ λ°νμΌλ‘ ν©λλ€.
μ£Όμ λ₯Ό λνλ΄λ Subject μΈν°νμ΄μ€ μ
λλ€.
κ°μ²΄μμ μ΅μ λ²λ‘ λ±λ‘νκ±°λ μ΅μ λ² λͺ©λ‘μμ νν΄νκ³ μΆμ λλ
μ΄ μΈν°νμ΄μ€μ μλ λ©μλλ₯Ό μ¬μ©ν©λλ€.
κ° μ£Όμ λ§λ€ μ¬λ¬κ°μ μ΅μ λ²κ° μμ μ μμ΅λλ€.
μ΅μ λ²κ° λ κ°λ₯μ±μ΄ μλ κ°μ²΄μμλ λ°λμ Observer μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ ν©λλ€.
μ΄ μΈν°νμ΄μ€μλ μ£Όμ μ μνκ° λ°λμμ λ νΈμΆλλ update( ) λ©μλ λ°μ μμ΅λλ€.
Observer μΈν°νμ΄μ€λ§ ꡬννλ€λ©΄ 무μμ΄λ μ΅μ λ² ν΄λμ€κ° λ μ μμ΅λλ€.
κ° μ΅μ λ²λ νΉμ μ£Όμ κ°μ²΄μ λ±λ‘μ ν΄μ μ°λ½μ λ°μ μ μμ΅λλ€.
μ£Όμ μν μ νλ ꡬμ ν΄λμ€μμλ νμ Subject μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ ν©λλ€.
μ£Όμ ν΄λμ€μμλ λ±λ‘ λ° ν΄μ§λ₯Ό μν λ©μλ μΈμ μνκ° λ°λλλ§λ€
λͺ¨λ μ΅μ λ²λ€μκ² μ°λ½μ νκΈ° μν notifyObservers( ) λ©μλλ ꡬνν΄μΌ ν©λλ€.
μ£Όμ ν΄λμ€μλ μνλ₯Ό μ€μ νκ³ μμλ΄κΈ° μν
Gettet/Setter λ©μλκ° λ€μ΄μμ μ λ μμ΅λλ€.
- π€Β μ΄κ±°λ μΌλλ€ κ΄κ³λ λ¬΄μ¨ κ΄κ³κ° μλκ±°μ£ ?
πΒ μ΅μ λ² ν¨ν΄μμ μνλ₯Ό μ μ₯νκ³ μ§λ°°νλ κ²μ μ£Όμ κ°μ²΄ μ λλ€.
Β Β Β Β Β λ°λΌμ μνκ° λ€μ΄μλ κ°μ²΄λ νλλ§ μμ μ μμ΅λλ€.
Β Β Β Β Β μ΅μ λ²λ₯Ό μ¬μ©νκΈ΄ νμ§λ§ λ°λμ μνλ₯Ό κ°μ§κ³ μμ΄μΌ νλ κ²μ μλλλ€.
Β Β Β Β Β λ°λΌμ, μ΅μ λ²λ μ¬λ¬ κ°κ° μμ μ μμΌλ©°,
Β Β Β Β Β μ£Όμ κ°μ²΄μμ μνκ° λ°λμλ€λ κ²μ μλ €μ£ΌκΈ°λ₯Ό κΈ°λ€λ¦¬λ,
Β Β Β Β Β μ£Όμ μ μμ‘΄μ μΈ μ±μ§μ κ°μ§κ² λμ£ .
Β Β Β Β Β κ·Έλ¬λ―λ‘ νλμ μ£Όμ μ μ¬λ¬ κ°μ μ΅μ λ²κ° μ°κ΄λ,
Β Β Β Β Β μΌλλ€ (One-To-Many) κ΄κ³κ° μ±λ¦½λ©λλ€.- π€Β μμ‘΄μ±μ΄ μ΄ λ΄μ©μ΄λ λ¬΄μ¨ μκ΄μ΄ μμ΄μ?
πΒ λ°μ΄ν°μ μ£ΌμΈμ μ£Όμ μ λλ€.
Β Β Β Β Β μ΅μ λ²λ λ°μ΄ν°κ° λ³κ²½λμμ λ μ£Όμ μμ κ°±μ ν΄μ£ΌκΈ°λ₯Ό
Β Β Β Β Β κΈ°λ€λ¦¬λ μ μ₯μ΄κΈ° λλ¬Έμ μμ‘΄μ±μ κ°μ§λ€κ³ ν μ μμ΅λλ€.
Β Β Β Β Β μ΄λ° λ°©λ²μ μ¬μ©νλ©΄ μ¬λ¬ κ°μ²΄μμ λμΌν λ°μ΄ν°λ₯Ό μ μ΄νλλ‘
Β Β Β Β Β νλ κ²μ λΉν΄ λ κΉλν κ°μ²΄μ§ν₯ λμμΈμ λ§λ€ μ μμ΅λλ€.
μμ λ€μ΄μ΄κ·Έλ¨κ³Ό μ€μ μμ λ₯Ό ꡬνν ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ λΉκ΅ν΄λ΄
μλ€.
ꡬνν μ½λλ Code Example κΉνλΈ μ μ₯μμμ λ³΄μ€ μ μμ΅λλ€.
λ κ°μ²΄κ° λμ¨νκ² κ²°ν©λμ΄ μλ€λ κ²μ, κ·Έ λμ΄ μνΈμμ©μ νκΈ΄ νμ§λ§
μλ‘μ λν΄ μ λͺ¨λ₯Έλ€λ κ²μ μλ―Έν©λλ€.
μ΅μ λ² ν¨ν΄μμλ μ£Όμ μ μ΅μ λ²κ° λμ¨νκ² κ²°ν©λμ΄ μλ κ°μ²΄ λμμΈμ μ 곡ν©λλ€.
κ·Έ μ΄μ μ λν΄ μμλ΄ μλ€.
Subject(μ£Όμ )κ° Observer(μ΅μ λ²)μ λν΄μ μλ κ²μ
Observerκ° νΉμ μΈν°νμ΄μ€(Observer μΈν°νμ΄μ€)λ₯Ό ꡬννλ€λ κ² λΏμ
λλ€.
Observerμ ꡬμ ν΄λμ€κ° 무μμΈμ§,
Observerκ° λ¬΄μμ νλμ§ λ±μ λν΄μλ μ νμκ° μμ΅λλ€.
Observerλ μΈμ λ μ§ μλ‘ μΆκ°ν μ μμ΅λλ€.
Subjectλ Observer μΈν°νμ΄μ€λ₯Ό ꡬννλ κ°μ²΄μ λͺ©λ‘μλ§ μμ‘΄νκΈ° λλ¬Έμ
μΈμ λ μ§ μλ‘μ΄ Observerλ₯Ό μΆκ°ν μ μμ΅λλ€. μ¬μ€ μ€νμ€μ ν Observerλ₯Ό λ°κΏλ λκ³ ,
κ·Έλ κ² ν΄λ Subject κ°μ²΄λ κ³μν΄μ λ°μ΄ν°λ₯Ό λ³΄λΌ μ μμ΅λλ€.
λ§μ°¬κ°μ§λ‘ Observerλ₯Ό μ무λλ μ κ±°ν΄λ λ©λλ€.
μλ‘μ΄ νμμ Observerλ₯Ό μΆκ°νλ €κ³ ν λλ Subjectλ₯Ό μ ν λ³κ²½ν νμκ° μμ΅λλ€.
Observerκ° λμ΄μΌ νλ μλ‘μ΄ κ΅¬μ ν΄λμ€κ° μκ²Όλ€κ³ κ°μ ν΄ λ΄
μλ€.
μ΄ λλ μλ‘μ΄ ν΄λμ€ νμμ λ°μλ€μΌ μ μλλ‘ Subjectλ₯Ό λ°κΏμΌ ν νμλ μμ΅λλ€.
μλ‘μ΄ ν΄λμ€μμ Observer μΈν°νμ΄μ€λ₯Ό ꡬννκ³ , Observerλ‘ λ±λ‘νκΈ°λ§ νλ©΄ λ©λλ€.
Subject κ°μ²΄λ μ ν μ κ²½λ μ°μ§ μμλ λ©λλ€.
Subjectμ Observerλ μλ‘ λ
립μ μΌλ‘ μ¬μ¬μ©ν μ μμ΅λλ€.
Subjectλ Observerλ₯Ό λ€λ₯Έ μ©λλ‘ νμ© ν μΌμ΄ μλ€κ³ ν΄λ μμ½κ² μ¬μ¬μ©ν μ μμ΅λλ€.
κ·Έ λμ΄ μλ‘ λ¨λ¨νκ² κ²°ν©λμ΄ μμ§ μκΈ° λλ¬Έμ
λλ€.
Subjectλ Observerκ° λ°λλλΌλ μλ‘νν
μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
λμ΄ μλ‘ λμ¨νκ² κ²°ν©λμ΄ μκΈ° λλ¬Έμ Subject νΉμ Observer μΈν°νμ΄μ€λ₯Ό ꡬννλ€λ
μ‘°κ±΄λ§ λ§μ‘±λλ€λ©΄ μ΄λ»κ² λ°κΏλ λ¬Έμ κ° μκΈ°λ μΌμ μμ΅λλ€.
βπΌΒ λμμΈ ν¨ν΄μ μλ‘μ΄ μμΉμ μμλ΄ μλ€.
Β Β Β Β Β μλ‘ μνΈμμ©μ νλ κ°μ²΄ μ¬μ΄μμλ κ°λ₯νλ©΄
Β Β Β Β Β λμ¨νκ² κ²°ν©νλ λμμΈμ μ¬μ©ν΄μΌ νλ€.
λμ¨νκ² κ²°ν©νλ λμμΈμ μ¬μ©νλ©΄ λ³κ²½ μ¬νμ΄ μ겨λ
무λν μ²λ¦¬ν μ μλ μ μ°ν κ°μ²΄μ§ν₯ μμ€ν
μ ꡬμΆν μ μμ΅λλ€.
κ°μ²΄ μ¬μ΄μ μνΈμμ‘΄μ±μ μ΅μν ν μ μκΈ° λλ¬Έμ
λλ€.
μ΄λ κ² μ΅μ λ² ν¨ν΄μ 1λΆ ν¬μ€ν μ΄ λλ¬μ΅λλ€.
2λΆμμλ μλ°μ java.util.Observableκ³Ό
JDKμμμ Observer Patternμ λν΄μ μμλ³΄κ² μ΅λλ€.