๐Ÿ“š Design Pattern - 2

kkmdevelยท2024๋…„ 10์›” 11์ผ

DesignPattern

๋ชฉ๋ก ๋ณด๊ธฐ
2/4

๐Ÿ“• ํ–‰์œ„ ํŒจํ„ด(Behavioral Pattern)

ํ–‰์œ„ ํŒจํ„ด์€ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ๊ณผ ์ฑ…์ž„ ๋ถ„๋ฐฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ํŒจํ„ด

๐Ÿ“„ ์ „๋žต ํŒจํ„ด (Strategy Pattern)

์ „๋žต ํŒจํ„ด : ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š” ๋กœ์ง์„ ์ •์˜ํ•˜๊ณ , ์ด๊ฒƒ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด(์บก์Аํ™”) ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด

์žฅ์  ๋ฐ ์‚ฌ์šฉ ์ด์œ 

  • ์œ ์—ฐ์„ฑ: ๋Ÿฐํƒ€์ž„์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋™์ ์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ์ ์‘ ๊ฐ€๋Šฅํ•จ.

  • ํ™•์žฅ์„ฑ: ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•จ.

  • ์ฝ”๋“œ์˜ ๋‹จ์ˆœํ™”: ์กฐ๊ฑด๋ฌธ์„ ์ค„์ด๊ณ  ๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋…๋ฆฝ์ ์ธ ํด๋ž˜์Šค๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.

๋‹จ์ 

  • ๋ณต์žก์„ฑ ์ฆ๊ฐ€: ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ด€๋ฆฌํ•ด์•ผ ํ•  ํด๋ž˜์Šค ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•จ.

  • ์ค‘๋ณต ๊ฐ€๋Šฅ์„ฑ: ์—ฌ๋Ÿฌ ์ „๋žต ํด๋ž˜์Šค์—์„œ ๋น„์Šทํ•œ ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ์Œ.

๐Ÿ“„ ์˜ต์ €๋ฒ„ ํŒจํ„ด (Observer Pattern)

์˜ต์ €๋ฒ„ ํŒจํ„ด : ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ, ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์—๊ฒŒ ์ž๋™์œผ๋กœ ํ†ต์ง€ํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํŒจํ„ด

์žฅ์  ๋ฐ ์‚ฌ์šฉ ์ด์œ 

  • ๋А์Šจํ•œ ๊ฒฐํ•ฉ: ์ฃผ์ œ(Subject)์™€ ์˜ต์ €๋ฒ„(Observer) ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ, ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ์‰ฝ๊ฒŒ ๊ฐ์ฒด๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Œ.

  • ํ™•์žฅ์„ฑ: ์˜ต์ €๋ฒ„๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฃผ์ œ์™€ ์ƒ๊ด€์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ ๊ฐ€๋Šฅํ•จ.

  • ์ž๋™ ์—…๋ฐ์ดํŠธ: ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์ด, ์ž๋™์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•จ.

๋‹จ์ 

  • ๋ณต์žก์„ฑ ์ฆ๊ฐ€: ์˜ต์ €๋ฒ„๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ†ต์‹  ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ.

  • ์„ฑ๋Šฅ ๋ฌธ์ œ: ๋งŽ์€ ์˜ต์ €๋ฒ„๊ฐ€ ๋“ฑ๋ก๋œ ๊ฒฝ์šฐ, ์ƒํƒœ ๋ณ€ํ™” ์‹œ ๋ชจ๋“  ์˜ต์ €๋ฒ„์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐ ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ“„ ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด (Template Method Pattern)

ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด : ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ผˆ๋Œ€๋ฅผ ์ •์˜ํ•˜๊ณ , ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ทธ ๋ผˆ๋Œ€์— ๋งž์ถฐ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•จ.
์ฆ‰, ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์€ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐ€๋ณ€์ ์ธ ๋ถ€๋ถ„๋งŒ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•จ.

์žฅ์  ๋ฐ ์‚ฌ์šฉ ์ด์œ 

  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ: ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์„ ์ •์˜ํ•˜๋ฏ€๋กœ, ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ.

  • ์œ ์—ฐ์„ฑ: ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ํŠน์ • ๋‹จ๊ณ„๋งŒ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด, ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ๋Š” ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ตฌํ˜„์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌ์กฐ ํ†ต์ œ: ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด, ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ „์ฒด ํ๋ฆ„์„ ๋ฐ”๊พธ์ง€ ๋ชปํ•˜๋„๋ก ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Œ.

๋‹จ์ 

  • ์ƒ์†์— ์˜์กด: ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด์€ ์ƒ์†์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ, ์ƒ์† ๊ณ„์ธต์ด ๊นŠ์–ด์ง€๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Œ.

  • ๋ณ€๊ฒฝ์˜ ์–ด๋ ค์›€: ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ „์ฒด ๊ตฌ์กฐ๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค์— ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์—๋Š” ์ƒ์œ„ ํด๋ž˜์Šค๊นŒ์ง€ ์ˆ˜์ •ํ•ด์•ผ ํ•จ.

abstract : ๋ถ€๋ชจ์˜ ๊ธฐ๋Šฅ์„ ์ž์‹์—์„œ ํ™•์žฅ์‹œ์ผœ๋‚˜๊ฐ€๊ณ  ์‹ถ์„ ๋•Œ
interface : ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง„ ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ
abstract๋Š” ๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€๋Šฅ

์˜ˆ์‹œ

abstract class Bread {
    
    protected void ๋ฐ˜์ฃฝ() { System.out.println("๋ฐ˜์ฃฝ!"); }
    abstract void ์žฌ๋ฃŒ์ถ”๊ฐ€();
    protected void ๊ตฝ๊ธฐ() { System.out.println("๊ตฝ๊ธฐ!"); }
    
    final void makeBread() { // ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์—์„œ ์ˆ˜์ • ๋ถˆ๊ฐ€
        this.๋ฐ˜์ฃฝ();
        this.์žฌ๋ฃŒ์ถ”๊ฐ€();
        this.๊ตฝ๊ธฐ();
    }
}

class GarlicBread extends Bread {
    
    @Override
    void ์žฌ๋ฃŒ์ถ”๊ฐ€() {
        System.out.println("๋งˆ๋Š˜ ๋„ฃ๊ธฐ!");
    }
    
}

class CheeseBread extends Bread {
    
    @Override
    void ์žฌ๋ฃŒ์ถ”๊ฐ€() {
        System.out.println("์น˜์ฆˆ ๋„ฃ๊ธฐ!");
    }
    
}

๐Ÿ“„ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด (Iterator Pattern)

์ปฌ๋ ‰์…˜์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ , ๊ทธ ์•ˆ์˜ ์š”์†Œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํŒจํ„ด
์ปฌ๋ ‰์…˜์˜ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ.

์žฅ์  ๋ฐ ์‚ฌ์šฉ ์ด์œ 

  • ๋‚ด๋ถ€ ๊ตฌ์กฐ ์ˆจ๊น€: ์ปฌ๋ ‰์…˜์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ์ƒ๊ด€์—†์ด ์š”์†Œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•จ.
  • ์ผ๊ด€๋œ ์ ‘๊ทผ ๋ฐฉ์‹: ๋‹ค์–‘ํ•œ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Œ.

๋‹จ์ 

  • ์ถ”๊ฐ€ ํด๋ž˜์Šค ํ•„์š”: ๊ฐ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ.
  • ์ˆœ์ฐจ์  ์ ‘๊ทผ: ํŠน์ • ์š”์†Œ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ.
profile
25/08/12

0๊ฐœ์˜ ๋Œ“๊ธ€