πŸ–₯️ Study Note/Design Patteren

    ν”„λ‘œν† νƒ€μž…(ProtoType) νŒ¨ν„΄

    ν”„λ‘œν† νƒ€μž…(ProtoType) νŒ¨ν„΄

    { ν”„λ‘œν† νƒ€μž…μ΄λž€? } ν”„λ‘œν† νƒ€μž… νŒ¨ν„΄μ΄λž€ GoF의 생성 νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, 원본 객체(ν”„λ‘œν† νƒ€μž…)λ₯Ό λ³΅μ œν•˜μ—¬ 객체λ₯Ό μƒμ„±ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. { κ²Œμž„ κ°œλ°œμ—μ„œ ν”„λ‘œν† νƒ€μž… ν™œμš©ν•˜κΈ° : λͺ¬μŠ€ν„° λŒ€λŸ‰ μŠ€ν°ν•˜κΈ° } μœ„ κ²Œμž„μ„ 보면 μˆ˜λ§Žμ€ λͺ¬μŠ€ν„°λ“€μ΄ λŒ€λŸ‰ μƒμ„±λ˜μ–΄ μžˆλ‹€. 이런 λͺ¬μŠ€ν„° 생성 μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ ν•˜λ©΄ κ°„λ‹¨ν•˜κ²Œ μž‘μ„±ν•  수 μžˆμ„κΉŒ? λͺ¬μŠ€ν„° μŠ€ν¬λ„ˆμ— ν”„λ‘œν† νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  λͺ¬μŠ€ν„° 객체λ₯Ό 등둝해두고 볡제(Clone)ν•˜μ—¬ κ²Œμž„ μ›”λ“œ 상에 배치 μ‹œν‚€λ©΄ 끝이닀. ν”„λ‘œν† νƒ€μž… νŒ¨ν„΄μ€ 원본 객체λ₯Ό 볡사할 λ•Œ ν”„λ‘œν† νƒ€μž…μ˜ 클래슀 뿐만 μ•„λ‹ˆλΌ μƒνƒœλ„ 같이 λ³΅μ œν•œλ‹€. 이 말은 λͺ‡ 개의 속성을 λ³€κ²½ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ ν•˜λ‚˜μ˜ ν”„λ‘œν† νƒ€μž…μ—μ„œ λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ 객체λ₯Ό 생성할 수 μžˆλ‹€λŠ” 것이닀. 예λ₯Ό λ“€μ–΄ μ• λ‹ˆλ©”μ΄μ…˜ μ •λ³΄λ§Œ λ°”κΏ” λ‹€λ₯Έ μ™Έν˜•μ„ 가진 λͺ¬μŠ€..

    κ΄€μ°°μž(Observer) νŒ¨ν„΄

    κ΄€μ°°μž(Observer) νŒ¨ν„΄

    κ΄€μ°°μž νŒ¨ν„΄μ€ GoF νŒ¨ν„΄ μ€‘μ—μ„œλ„ κ°€μž₯ 널리 μ‚¬μš©λ˜κ³  잘 μ•Œλ €μ‘Œμ§€λ§Œ, 세상을 등지고 μ‚΄μ•„κ°€λŠ” κ²Œμž„ κ°œλ°œμžμ—κ²ŒλŠ” μƒνŒ 처음 λ“£λŠ” 이야기일 μˆ˜λ„ μžˆλ‹€. { κ΄€μ°°μž νŒ¨ν„΄μ΄λž€? } κ΄€μ°°μž νŒ¨ν„΄μ€ GoF의 ν–‰μœ„ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, ν•œ 객체의 μƒνƒœκ°€ λ³€ν™”ν•˜λ©΄ 객체에 κ΄€μ°°μžλ‘œ λ“±λ‘λ˜μ–΄ μžˆλŠ” λ‹€λ₯Έ κ°μ²΄λ“€μ—κ²Œ λ³€ν™”λœ μƒνƒœλ₯Ό μ „λ‹¬ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. 주둜 λΆ„μ‚° μ‹œμŠ€ν…œ 간에 이벀트λ₯Ό 생성•λ°œμƒ(Publish)ν•˜κ³ , 이λ₯Ό μˆ˜μ‹ (Subscribe)ν•΄μ•Ό ν•  λ•Œ μ΄μš©ν•œλ‹€. κ΄€μ°°μž νŒ¨ν„΄μ€ MVC(Model View Controller) ꡬ쑰의 κΈ°λ°˜μ΄λ‹€. μžλ°”μ˜ EventListenerλ‚˜ C#의 delegate와 같이 같은 λͺ¨λ˜ OOP μ–Έμ–΄μ—μ„œλŠ” 자체적으둜 κ΄€μ°°μž νŒ¨ν„΄μ„ μ§€μ›ν•œλ‹€. { κ²Œμž„ κ°œλ°œμ—μ„œ κ΄€μ°°μž νŒ¨ν„΄ ν™œμš©ν•˜κΈ° : 업적 μ‹œμŠ€ν…œ }..

    κ²½λŸ‰(FlyWeight) νŒ¨ν„΄

    κ²½λŸ‰(FlyWeight) νŒ¨ν„΄

    { κ²½λŸ‰ νŒ¨ν„΄μ΄λž€? } κ²½λŸ‰ νŒ¨ν„΄μ€ GoF의 ꡬ쑰 νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, μΈμŠ€ν„΄μŠ€κ°€ ν•„μš”ν•  λ•Œλ§ˆλ‹€ 맀번 μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆκ³  κ°€λŠ₯ν•œ κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. λ‹€μˆ˜μ˜ μœ μ‚¬ 객체λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μ‘°μž‘ν•  λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. 더 μžμ„Ένžˆ μ„€λͺ…ν•˜μžλ©΄ κ²½λŸ‰ νŒ¨ν„΄μ€ ν•œ 개의 고유 μƒνƒœλ₯Ό λ‹€λ₯Έ κ°μ²΄μ—μ„œ κ³΅μœ ν•˜κ²Œ λ§Œλ“€μ–΄ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄인닀. - 고유 μƒνƒœ (intrinsic state): μœ μ‚¬ κ°μ²΄λ“€μ˜ 데이터 값이 κ°™μ•„μ„œ κ³΅μœ ν•  수 μžˆλŠ” 데이터 - μ™ΈλΆ€ μƒνƒœ (extrinsic state): μœ μ‚¬ κ°μ²΄λ“€μ˜ 데이터 값이 μ„œλ‘œ λ‹¬λΌμ„œ κ³΅μœ ν•  수 μ—†λŠ” 데이터 { κ²Œμž„ κ°œλ°œμ—μ„œ κ²½λŸ‰ νŒ¨ν„΄ ν™œμš©ν•˜κΈ° : λ‚˜λ¬΄ 클래슀 μ„€κ³„ν•˜κΈ° } κ²Œμž„ μ›”λ“œ 상에 λ‹€μˆ˜μ˜ λ‚˜λ¬΄κ°€ μžˆλ‹€. 각 λ‚˜λ¬΄λ“€μ„ κ΅¬μ„±ν•˜λŠ” λ°μ΄ν„°λŠ” λ‹€μŒκ³Ό..

    λͺ…λ Ή(Command) νŒ¨ν„΄

    λͺ…λ Ή(Command) νŒ¨ν„΄

    { λͺ…λ Ή νŒ¨ν„΄μ΄λž€? } λͺ…λ Ή νŒ¨ν„΄μ€ GoF의 ν–‰μœ„ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, μš”μ²­(λͺ…λ Ή)을 객체의 ν˜•νƒœλ‘œ μΊ‘μŠν™”ν•˜μ—¬ μž¬μ΄μš©ν•˜κ±°λ‚˜ μ·¨μ†Œν•  수 μžˆλ„λ‘ μš”μ²­μ— ν•„μš”ν•œ 정보λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ λ‘œκ·Έμ— λ‚¨κΈ°λŠ” νŒ¨ν„΄μ΄λ‹€. 더 κ°„λ‹¨ν•˜κ²Œ λ©”μ†Œλ“œ ν˜ΈμΆœμ„ 객체둜 감싼 ν˜•νƒœμ΄λ‹€. μ½œλ°±μ„ 객체 지ν–₯적으둜 μ„€κ³„ν–ˆλ‹€κ³  μƒκ°ν•˜λ©΄ μ’‹λ‹€. μš”μ²­μ— μ‚¬μš©λ˜λŠ” 각쒅 λͺ…령어듀은 좔상 ν΄λž˜μŠ€μ™€ ꡬ체 클래슀둜 λΆ„λ¦¬ν•˜μ—¬ λ‹¨μˆœν™”ν•œλ‹€. { κ²Œμž„ κ°œλ°œμ—μ„œ λͺ…λ Ή νŒ¨ν„΄ ν™œμš©ν•˜κΈ° : 캐릭터 μ‘°μž‘ } κ²Œμž„ 개발의 λ‹€μ–‘ν•œ λΆ€λΆ„μ—μ„œ λͺ…λ Ή νŒ¨ν„΄μ„ ν™œμš©ν•  수 μžˆκ² μ§€λ§Œ, 'λͺ…λ Ή' ν•˜λ©΄ κ°€μž₯ λ¨Όμ € μƒκ°λ‚˜λŠ” 컨트둀러의 μž…λ ₯(λͺ…λ Ή)에 따라 ν”Œλ ˆμ΄μ–΄λ₯Ό μ›€μ§μ΄λŠ” λ‘œμ§μ„ λͺ…λ Ή νŒ¨ν„΄μœΌλ‘œ κ΅¬ν˜„ν•΄λ³΄μž. λͺ…λ Ή νŒ¨ν„΄μ„ μ μš©ν•˜κΈ° μ „ μ½”λ“œ void CInputHandler::HandleInput() { i..

    λ””μžμΈ νŒ¨ν„΄μ΄λž€?

    { λ””μžμΈ νŒ¨ν„΄μ΄λž€? } μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 섀계할 λ•Œ νŠΉμ • λ§₯λ½μ—μ„œ 자주 λ°œμƒν•˜λŠ” 고질적인 λ¬Έμ œλ“€μ— μ‚¬μš©ν•  ν•  수 μžˆλŠ” μ •ν˜•μ  ν•΄κ²° 방식을 λ§ν•œλ‹€. λ””μžμΈ νŒ¨ν„΄μ€ 문제 및 λ°°κ²½, μ‹€μ œ 적용 사둀, μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•œ μƒ˜ν”Œ μ½”λ“œ λ“±μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. “바퀴λ₯Ό λ‹€μ‹œ 발λͺ…ν•˜μ§€ 마라(Don’t reinvent the wheel)” λΌλŠ” 말과 같이, 개발 κ³Όμ • μ€‘μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ μƒˆλ‘œ 해결책을 κ΅¬μƒν•˜λŠ” 것보닀 λ¬Έμ œμ— ν•΄λ‹Ήν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ„ μ°Έκ³ ν•˜μ—¬ μ μš©ν•˜λŠ” 것이 더 νš¨μœ¨μ μ΄λ‹€. GoF의 λ””μžμΈ νŒ¨ν„΄ μœ ν˜•μ— 따라 생성 νŒ¨ν„΄ 5개, ꡬ쑰 νŒ¨ν„΄ 7개, ν–‰μœ„ νŒ¨ν„΄ 11개 총 23개의 νŒ¨ν„΄μœΌλ‘œ κ΅¬μ„±λœλ‹€. { λ””μžμΈ νŒ¨ν„΄ μž₯단점 } μž₯점 λ²”μš©μ μΈ μ½”λ”© μŠ€νƒ€μΌλ‘œ 인해 ꡬ쑰 νŒŒμ•…μ΄ μš©μ΄ν•˜λ‹€. 객체 지ν–₯ 섀계 및 κ΅¬ν˜„μ˜ 생산성을 λ†’..