π£ λμμΈ ν¨ν΄μ΄λ?
νλ‘κ·Έλ¨μ μ€κ³ν λ μμ£Ό λ°μνλ λ¬Έμ μ λ€μ νΌνκΈ° μν΄ νλμ 'κ·μ½' ννλ‘ λ§λ€μ΄ λμ μ€κ³ ν¨ν΄.
π£ μ¬μ© μ΄μ
λμμΈ ν¨ν΄μ μ°Έκ³ νμ¬ κ°λ°ν κ²½μ° κ°λ°μ ν¨μ¨μ±κ³Ό μ μ§λ³΄μμ±, μ΄μ©μ±μ΄ λμμ§λ©° νλ‘κ·Έλ¨μ μ΅μ νμ λμμ΄ λλ€.
π£ λμμΈ ν¨ν΄ μ ν
λͺ©μ μ λ°λΌ μμ±, ꡬ쑰, νμ ν¨ν΄μΌλ‘ λλ μ μλ€.
μμ± ν¨ν΄μ κ°μ²΄ μΈμ€ν΄μ€ μμ±μ κ΄μ¬νλ©° ν΄λμ€ μ μμ κ°μ²΄ μμ± λ°©μμ ꡬ쑰ν, μΊ‘μν νλ ν¨ν΄μ΄λ€.
ꡬ쑰 ν¨ν΄μ λ ν° κ΅¬μ‘° νμ± λͺ©μ μΌλ‘ ν΄λμ€λ κ°μ²΄μ μ‘°ν©μ λ€λ£¨λ©°
νμ ν¨ν΄μ ν΄λμ€λ κ°μ²΄λ€μ΄ μνΈμμ©νλ λ°©λ²κ³Ό μν λΆλ΄μ λ€λ£¨λ ν¨ν΄μ μλ―Ένλ€.
[ μμ± ν¨ν΄ : 5κ° ]
π κ°λ
μ±κΈν€ ν¨ν΄(Singleton pattern)μ μ μ λ³μλ₯Ό μ¬μ©νμ§ μκ³ κ°μ²΄λ₯Ό νλλ§ μμ±νλλ‘ νλ©°, μμ±λ κ°μ²΄λ₯Ό μ΄λμμλ μ§ μ°Έμ‘°ν μ μλλ‘ νλ λμμΈ ν¨ν΄μ΄λ€. (1 ν΄λμ€ 1 κ°μ²΄)
π μ₯μ
π λ¨μ
# 보ν΅, μ±κΈν€ κ°μ²΄μ .get_instance() λ‘ μΈμ€ν΄μ€λ₯Ό λ°μμ¨λ€.
singleton_1 = Singleton.get_instance()
singleton_2 = Singleton.get_instance()
# μ΄λ κ² λ°μμ¨ λ μΈμ€ν΄μ€λ λμΌν μΈμ€ν΄μ€λ€.
singleton_1 == singleton_2 # True
π κ°λ
κΈ°μ‘΄μ μΈμ€ν΄μ€λ₯Ό κ·Έλλ‘ λ³΅μ (clone) νμ¬ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ΄λ€. (μ±κΈν€κ³Ό λ°λκ°λ
)
π μ₯μ
π λ¨μ
π νμ© μν©
μλ°μμ Stack Memory & Heap Memory
https://jiwondev.tistory.com/86
# 보ν΅, νλ‘ν νμ
κ°μ²΄μ .clone() μΌλ‘ μΈμ€ν΄μ€λ₯Ό 볡μ¬νλ€.
original = Prototype()
prototype = original.clone()
# μ΄λ κ² λ°μμ¨ λ μΈμ€ν΄μ€λ λμΌν κ°μ²΄λ μλμ§λ§, λ΄λΆ λ°μ΄ν°λ κ°λ€.
original == prototype # False
original.data == prototype.data # True
π κ°λ
μμ κ΄κ³μ μλ λ ν΄λμ€μμ μμ ν΄λμ€κ° μ€μν λΌλ(μΈν°νμ΄μ€)λ₯Ό κ²°μ νκ³ , νμ ν΄λμ€κ° κ°μ²΄ μμ±μ κ΄ν ꡬ체μ μΈ λ΄μ©(μΈμ€ν΄μ€ μμ±)μ κ²°μ νλ ν¨ν΄μ΄λ€.
π μ₯μ
π λ¨μ
# 보ν΅, Factory κ°μ²΄μ `get` λ©μλμ νλΌλ―Έν°λ‘ μμ±ν κ°μ²΄μ νμ
μ λ겨μ€λ€.
samsung_keyboard = KeyboardFactory.get_keyboard("samsung")
lg_keyboard = KeyboardFactory.get_keyboard("lg")
# μμ±λ κ°μ²΄λ λ€μκ³Ό κ°μ΄ ꡬ체μ μΈ ν΄λμ€ μΈμ€ν΄μ€λ€.
samsung_keyboard # SamsungKeyboard
lg_keyboard # LgKeyboard
π κ°λ
ꡬ체μ μΈ ν΄λμ€λ₯Ό μ§μ νμ§ μκ³ κ΄λ ¨μ±μ΄ μκ±°λ, λ
립μ μΈ κ°μ²΄λ€μ μμ±νκΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡νλ ν¨ν΄μ΄λ€.
π μ₯μ
π λ¨μ
π ν©ν 리 λ©μλμ μΆμν©ν 리μ μ°¨μ΄μ μ΄ λλ°μ₯?
κ°μ₯ ν° μ°¨μ΄μ μ ν©ν 리 λ©μλ ν¨ν΄μ μ΄λ€ κ°μ²΄λ₯Ό μμ±ν μ§μ μ§μ€νκ³ μΆμ ν©ν 리 ν¨ν΄μ μ°κ΄λ κ°μ²΄(ν©ν 리)λ€μ λͺ¨μλλ€λ κ²μ μ§μ€ν©λλ€.
# ν€λ³΄λ ν©ν 리μ ν©ν 리(μΆμ ν©ν 리)λ₯Ό ν΅ν΄ ν€λ³΄λ ν©ν 리λ₯Ό μ»λλ€.
CommonKeyboardFactory = AbstarctKeyboardFactory.get_keyboard_factory("common")
# μ΄νλ ν©ν 리 ν¨ν΄κ³Ό λμΌνλ€.
samsung_common_keyboard = CommonKeyboardFactory.get_keyboard("samsung")
lg_common_keyboard = CommonKeyboardFactory.get_keyboard("lg")
samsung_keyboard # SamsungCommonKeyboard
lg_keyboard # LgCommonKeyboard
π κ°λ
볡μ‘ν μΈμ€ν΄μ€λ₯Ό 쑰립νμ¬ λ§λλ ꡬ쑰λ‘, λ³΅ν© κ°μ²΄λ₯Ό μμ±ν λ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²(κ³Όμ )κ³Ό κ°μ²΄λ₯Ό ꡬν(νν)νλ λ°©λ²μ λΆλ¦¬ν¨μΌλ‘μ¨ λμΌν μμ± μ μ°¨μμ μλ‘ λ€λ₯Έ νν κ²°κ³Όλ₯Ό λ§λ€ μ μλ λμμΈ ν¨ν΄
** get, set, λ©μλ λΆλ¦¬ν΄μ λ§λλκ² λΉλν¨ν΄!
π μ₯μ
π λ¨μ
Student kangworld = new Student
.StudentBuilder(32140033)
.setName("kangworld")
.setPhoneNumber("010-1234-5678")
.setGrade("sophomore")
.getStudent();