Skip to content

Latest commit

ย 

History

History
71 lines (45 loc) ยท 1.91 KB

Template Method Pattern.md

File metadata and controls

71 lines (45 loc) ยท 1.91 KB

[๋””์ž์ธ ํŒจํ„ด] Template Method Pattern

๋กœ์ง์„ ๋‹จ๊ณ„ ๋ณ„๋กœ ๋‚˜๋ˆ ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ ์šฉํ•œ๋‹ค.

๋‹จ๊ณ„๋ณ„๋กœ ๋‚˜๋ˆˆ ๋กœ์ง๋“ค์ด ์•ž์œผ๋กœ ์ˆ˜์ •๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ ๋” ํšจ์œจ์ ์ด๋‹ค.


์กฐ๊ฑด

  • ํด๋ž˜์Šค๋Š” ์ถ”์ƒ(abstract)๋กœ ๋งŒ๋“ ๋‹ค.
  • ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก final ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๊ฐ ๋‹จ๊ณ„๋“ค์€ ์™ธ๋ถ€๋Š” ๋ง‰๊ณ , ์ž์‹๋“ค๋งŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก protected๋กœ ์„ ์–ธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž. ํ”ผ์ž๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ํฌ๊ฒŒ ๋ฐ˜์ฃฝ โ†’ ํ† ํ•‘ โ†’ ๊ตฝ๊ธฐ ๋กœ 3๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

์ด ๋‹จ๊ณ„๋Š” ํ•ญ์ƒ ์œ ์ง€๋˜๋ฉฐ, ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€” ์ผ์€ ์—†๋‹ค. ๋ฌผ๋ก  ์‹ค์ œ๋กœ๋Š” ๋„์šฐ์— ๋”ฐ๋ผ ๋ฐ˜์ฃฝ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์ผ๋‹จ ๋ชจ๋“  ํ”ผ์ž์˜ ๋ฐ˜์ฃฝ๊ณผ ๊ตฝ๊ธฐ๋Š” ๋™์ผํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ํ”ผ์ž ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํ† ํ•‘๋งŒ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.

abstract class Pizza {
    
    protected void ๋ฐ˜์ฃฝ() { System.out.println("๋ฐ˜์ฃฝ!"); }
    abstract void ํ† ํ•‘() {}
    protected void ๊ตฝ๊ธฐ() { System.out.println("๊ตฝ๊ธฐ!"); }
    
    final void makePizza() { // ์ƒ์† ๋ฐ›์€ ํด๋ž˜์Šค์—์„œ ์ˆ˜์ • ๋ถˆ๊ฐ€
        this.๋ฐ˜์ฃฝ();
        this.ํ† ํ•‘();
        this.๊ตฝ๊ธฐ();
    }
    
}
class PotatoPizza extends Pizza {
    
    @Override
    void ํ† ํ•‘() {
        System.out.println("๊ณ ๊ตฌ๋งˆ ๋„ฃ๊ธฐ!");
    }
    
}

class TomatoPizza extends Pizza {
    
    @Override
    void ํ† ํ•‘() {
        System.out.println("ํ† ๋งˆํ†  ๋„ฃ๊ธฐ!");
    }
    
}

abstract ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ž์‹ ํด๋ž˜์Šค์—์„œ๋Š” ์„ ํƒ์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.



abstract์™€ Interface์˜ ์ฐจ์ด๋Š”?

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

abstract๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ์•ˆ๋œ๋‹ค. ์ƒํ™ฉ์— ๋งž๊ฒŒ ํ™œ์šฉํ•˜์ž!