πŸ“ Computer Science/✏ Design Pattern

    μ»΄ν¬μ§€νŠΈ νŒ¨ν„΄(Composite Pattern)

    μ»΄ν¬μ§€νŠΈ νŒ¨ν„΄(Composite Pattern)

    μ»΄ν¬μ§€νŠΈ νŒ¨ν„΄(Composite Pattern) μ»΄ν¬μ§€νŠΈ OOPμ—μ„œ μ»΄ν¬μ§€νŠΈλŠ” ν•˜λ‚˜ μ΄μƒμ˜ μœ μ‚¬ν•œ 객체둜 κ΅¬μ„±λœ 집합 객체둜 λͺ¨λ‘ μœ μ‚¬ν•œ κΈ°λŠ₯을 λ‚˜νƒ€λ‚Έλ‹€. 이λ₯Ό 톡해 객체 그룹을 μ‘°μž‘ν•˜λŠ” κ²ƒμ²˜λŸΌ 단일 객체λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€. μ»΄ν¬μ§€νŠΈ νŒ¨ν„΄ μ»΄ν¬μ§€νŠΈ νŒ¨ν„΄μ€ 볡합 κ°μ²΄λ‚˜ 단일 객체λ₯Ό λ™μΌν•˜κ²Œ μ·¨κΈ‰ν•˜λŠ” 것을 λͺ©μ μœΌλ‘œ ν•œλ‹€. 트리 ꡬ쑰둜 μž‘μ„±ν•˜μ—¬ 전체-λΆ€λΆ„(whole-part) 관계λ₯Ό ν‘œν˜„ν•œλ‹€. 1. κ΅¬ν˜„ μ‚¬μš©μžλŠ” Leaf와 Composite 클래슀λ₯Ό 직접 μ°Έμ‘°ν•˜μ§€ μ•Šκ³ , 곡톡 μΈν„°νŽ˜μ΄μŠ€ Componentλ₯Ό μ°Έμ‘°ν•œλ‹€. 1) Component λͺ¨λ“  Component듀을 μœ„ν•œ μΆ”μƒν™”λœ κ°œλ…μ΄λ‹€. Leaf와 Composite 클래슀의 μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€. interface Graphic { public void print..

    μŠ€νŠΈλž˜ν‹°μ§€ νŒ¨ν„΄(Strategy Pattern)

    μŠ€νŠΈλž˜ν‹°μ§€ νŒ¨ν„΄(Strategy Pattern)

    μŠ€νŠΈλž˜ν‹°μ§€ νŒ¨ν„΄(Strategy Pattern) μ „λž΅ νŒ¨ν„΄μ΄λž€ λΉ„μŠ·ν•œ λ™μž‘μ„ ν•˜μ§€λ§Œ λ‹€λ₯΄κ²Œ κ΅¬ν˜„λ˜μ–΄ μžˆλŠ” ν–‰μœ„(μ „λž΅)듀을 κ³΅ν†΅μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›λŠ” 각각의 클래슀둜 κ΅¬ν˜„ν•˜κ³  λ™μ μœΌλ‘œ λ°”κΏ€ 수 μžˆλ„λ‘ ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. μ „λž΅ νŒ¨ν„΄μœΌλ‘œ κ΅¬ν˜„λœ μ½”λ“œλŠ” 직접 ν–‰μœ„μ— λŒ€ν•œ μ½”λ“œλ₯Ό μˆ˜μ •ν•  ν•„μš” 없이 μ „λž΅λ§Œ λ³€κ²½ν•˜μ—¬ μœ μ—°ν•˜κ²Œ ν™•μž₯ν•  수 있게 λœλ‹€. 1. κ΅¬ν˜„ λ§Œμ•½ μ „λž΅ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, λ‹¨μˆœνžˆ if-elseλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•΄μ•Ό ν•˜λ©° κ²Œμž„μ΄ μ—…λ°μ΄νŠΈλ˜μ–΄ 직업이 μΆ”κ°€λ˜κ±°λ‚˜ μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€λ©΄ attack() λ©”μ„œλ“œλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•  것이닀. class Character { private final String job; Character(String job) { this.job = job; } void attack() ..

    [κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] κ²Œμž„ κ°œλ°œμ—μ„œ μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄

    [κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] κ²Œμž„ κ°œλ°œμ—μ„œ μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄

    κ²Œμž„ κ°œλ°œμ—μ„œ μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄ κ²Œμž„ 개발의 κ΄€μ μ—μ„œ 각 λ””μžμΈ νŒ¨ν„΄μ— λŒ€ν•΄μ„œ λ‹€λ£° 것이닀. κ·ΈλŸ¬λ‚˜ λͺ¨λ“  μ•±μ΄λ‚˜ κ²Œμž„ κ°œλ°œμ—μ„œλ„ μ μš©λœλ‹€. 1. Singleton Design Pattern ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λ  λ•Œ ν΄λž˜μŠ€κ°€ 졜초 ν•œ 번만 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  κ·Έ λ©”λͺ¨λ¦¬μ— μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš© 2020.05.16 - [πŸ“/✏ Design Pattern] - 싱글톀 νŒ¨ν„΄(Singleton Pattern) κ²Œμž„μ—μ„œλŠ” μ˜ν™”μ²˜λŸΌ ν•œ λͺ…μ˜ λ””λ ‰ν„°κ°€ μ‘΄μž¬ν•œλ‹€. λ””λ ‰ν„°λŠ” κ²Œμž„μ—μ„œ μΌμ–΄λ‚˜λŠ” λͺ¨λ“  것을 μˆ˜ν–‰ν•˜λŠ” ν΄λž˜μŠ€μ΄λ‹€. 였브젝트λ₯Ό λžœλ”λ§ ν•˜κ³  μœ„μΉ˜λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯을 μ •ν™•ν•œ 캐릭터에 전달해 μ£ΌλŠ” λ“±μ˜ 역할을 μˆ˜ν–‰ν•œλ‹€. Singleton νŒ¨ν„΄μ„ 톡해 λ””λ ‰ν„°κ°€ ν•˜λ‚˜ 이상 μƒμ„±λ˜λŠ” 것을 λ°©μ§€ν•œλ‹€. 2. Strat..

    [κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] 더티 ν”Œλž˜κ·Έ νŒ¨ν„΄(Dirty Flag Pattern)

    더티 ν”Œλž˜κ·Έ νŒ¨ν„΄(Dirty Flag Pattern) μ΄λ¦„μ²˜λŸΌ λ”λŸ¬μš΄ νŒ¨ν„΄μ€ μ•„λ‹ˆλ‹€. 였히렀 κΉ”λ”ν•˜κ²Œ μ΅œμ ν™”ν•΄μ£ΌλŠ” νš¨κ³Όκ°€ μžˆλ‹€. 더티 ν”Œλž˜κ·ΈλŠ” λΆˆν•„μš”ν•œ μž‘μ—…μ„ ν”Όν•˜κΈ° μœ„ν•΄ μ‹€μ œλ‘œ ν•„μš”ν•  λ•ŒκΉŒμ§€ κ·Έ 일을 λ―Έλ£¨λŠ” 것을 λ§ν•œλ‹€. κ°’μ˜ 변경이 μΌμ–΄λ‚˜μ•Ό ν•˜λŠ” 상황을 ν”Œλž˜κ·Έλ‘œ 섀정해두어, κΌ­ ν•„μš”ν•œ μƒν™©μ—λ§Œ 갱신을 ν•˜λ„λ‘ ν•΄μ£ΌλŠ” νŒ¨ν„΄μ΄λ‹€. λ³€ν™”κ°€ μ—†λŠ” 상황인데 λΆˆν•„μš”ν•œ 연산을 ν•œλ‹€λ©΄ νΌν¬λ¨ΌμŠ€μ— 지μž₯을 μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€. λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ„ 예둜 λ“€μ–΄λ³΄μž. 2020.06.21 - [πŸ“/✏ Computer Graphics] - λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈ λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈ λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈ 3D 세계에 λŒ€ν•œ κΈ°ν•˜ν•™μ  ν‘œν˜„κ³Ό 이 세계λ₯Ό λ°”λΌλ³΄λŠ” 관점을 μ •μ˜ν•˜λŠ” 가상 카메라λ₯Ό μ΄μš©ν•΄ 2D 이미지λ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 과정이닀. 1) 3D λͺ¨λΈ ..

    [κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] κ²Œμž„ 루프 νŒ¨ν„΄(Game Loop Pattern)

    κ²Œμž„ 루프 νŒ¨ν„΄(Game Loop Pattern) λ¨Όμ € μš”μ•½ν•˜μžλ©΄ κ²Œμž„ 루프 νŒ¨ν„΄μ΄λž€ κ²Œμž„ 진행을 μœ μ € μž…λ ₯, ν”„λ‘œμ„Έμ„œ 속도와 λ””μ»€ν”Œλ§ ν•˜λŠ” 것이닀. 더 μ‰½κ²Œ λ§ν•˜μžλ©΄ μž…λ ₯이 없어도 ν”„λ‘œμ„Έμ„œκ°€ 잘 λŒμ•„κ°„λ‹€λŠ” 말이닀. 이 νŒ¨ν„΄μ€ νŠΉμˆ˜ν•˜μ—¬ κ²Œμž„ λΆ„μ•Ό μ™Έμ—μ„œλŠ” μ°Ύμ•„λ³΄κΈ°λŠ” νž˜λ“€μ§€λ§Œ μ‹€μ œλ‘œ 많이 쓰이고 μžˆλ‹€. (μœ λ‹ˆν‹° λ“± κ²Œμž„ 엔진) μ˜ˆμ „ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μ½”λ“œλ₯Ό λͺ¨λ‘ 짜고 λ‚˜μ„œμ•Ό ν”„λ‘œκ·Έλž¨μ„ 돌릴 수 μžˆμ—ˆλ‹€. 즉, 쀑간에 ν™•μΈν•˜λŠ” 것은 거의 λΆˆκ°€λŠ₯ν–ˆλ‹€. 이런 ν”„λ‘œκ·Έλž¨μ„ 배치 λͺ¨λ“œ ν”„λ‘œκ·Έλž¨μ΄λΌκ³  ν•˜λŠ”λ°, λͺ¨λ“  μž‘μ—…μ΄ λλ‚˜κ³  λ‚˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ λ©ˆμΆ˜λ‹€. μ—¬κΈ°μ„œ λ‚˜μ˜€λŠ” λ¬Έμ œμ μ€ λ””λ²„κΉ…ν•˜λŠ” 데도 였래 κ±Έλ € 생산성이 λ–¨μ–΄μ§€κ²Œ λœλ‹€λŠ” 점이닀. κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λŒ€ν™”ν˜• ν”„λ‘œκ·Έλž¨μ΄ λ‚˜μ™”λ‹€. ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯을 κΈ°λ‹€λ Έλ‹€κ°€ μ‘λ‹΅ν•˜λ©΄..

    μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern)

    μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern)

    μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern) λ§Œμ•½ μœ μ €μ˜ κ²Œμž„ λ¨Έλ‹ˆκ°€ μ—…λ°μ΄νŠΈλ˜μ–΄ UI, 이벀트 λ“± λ‹€λ₯Έ 였브젝트의 변경이 ν•„μš”ν•˜λ‹€λ©΄ μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  것인가? 맀번 λ‹€λ₯Έ μ˜€λΈŒμ νŠΈκ°€ κ²Œμž„ λ¨Έλ‹ˆ μ—…λ°μ΄νŠΈκ°€ λλŠ”μ§€ 확인할 순 없을 것이닀. 이럴 λ•Œ ν•„μš”ν•œ 것이 μ˜΅μ €λ²„ νŒ¨ν„΄μ΄λ‹€. Sudject(κ²Œμž„ λ¨Έλ‹ˆ)λ‘œλΆ€ν„° μ–΄λ– ν•œ λ³€ν™”κ°€ 생긴닀면, ObserverλŠ” 이 λ³€ν™”λ₯Ό 감지할 수 μžˆλ‹€. 객체의 μƒνƒœ λ³€ν™”λ₯Ό κ΄€μ°°ν•˜λŠ” κ΄€μ°°μž(μ˜΅μ €λ²„)κ°€ μžˆλ‹€. κ΄€μ°°μžλ₯Ό 객체가 κ°–κ³  μžˆλ‹€κ°€ μƒνƒœ λ³€ν™”κ°€ μžˆμ„ λ•Œ λ©”μ„œλ“œ 등을 톡해 객체가 각 μ˜΅μ €λ²„μ—κ²Œ ν†΅μ§€ν•œλ‹€. 주둜 λΆ„μ‚° 이벀트 핸듀링 μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€. μ—¬κΈ°μ„œ 핡심은 객체의 μƒνƒœ λ³€ν™”λ₯Ό κ΄€μ°°ν•˜λŠ” 것인데, κ³Όμ—° μ–΄λ–»κ²Œ κ΄€μ°°ν•œλ‹€λŠ” κ²ƒμΌκΉŒ? 1. κ΅¬ν˜„ 1) Observer Concr..