2023.03.27 TIL

์ •์Šน์›ยท2023๋…„ 3์›” 29์ผ
0
post-thumbnail
post-custom-banner

๐Ÿ“’ ๋ชฉ์ฐจ

๐Ÿ“Œ class๋ž€?
๐Ÿ“Œ constructor(์ƒ์„ฑ์ž)
๐Ÿ“Œ ์ƒ์† (extends)
๐Ÿ“Œ ์ „๋žต ํŒจํ„ด
๐Ÿ“Œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ํŠน์ง•
๐Ÿ“Œ MVC ํŒจํ„ด

๐Ÿ“Œ class๋ž€?

ํด๋ž˜์Šค(class) ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํŠน์ • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ์ผ์ข…์˜ ํ‹€์ด๋‹ค.

๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ(๋ฉค๋ฒ„ ๋ณ€์ˆ˜)์™€ ๋ฉ”์„œ๋“œ(ํ•จ์ˆ˜)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

์ฆ‰, ํด๋ž˜์Šค(class)๋ž€ ๋ฌผ๊ฑด ๋งŒ๋“œ๋Š” ์„ค๋ช…์„œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

โœ… class์˜ ๊ตฌ์กฐ

  • ํด๋ž˜์Šค ์•ˆ์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ค„ ๋•Œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ let, const ๋“ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • new Monster() : new ์—ฐ์‚ฐ์ž์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด(mymonster)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • Monster Class ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜๋“ค์— ๋Œ€ํ•ด .์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ๊ฐ์ฒด ๋Œ€์‹ , class๋ฅผ ๊ฐ€์ง€๊ณ  โ€˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์—ˆ๋‹คโ€™ ๋ผ๊ณ ๋„ ๋งํ•œ๋‹ค.

// index.js

class Monster {
    power = 10

    attack = () => {
        console.log("๊ณต๊ฒฉํ•˜์ž!!")
    }

    run = () => {
        console.log("๋„๋ง๊ฐ€์ž!!")
    }
}

const mymonster1 = new Monster()
mymonster1.attack()
mymonster1.run()

const mymonster2 = new Monster()
mymonster2.attack()
mymonster2.run()


๐Ÿ“Œ constructor(์ƒ์„ฑ์ž)

class ๋‚ด๋ถ€์˜ ์–ด๋– ํ•œ ํ•จ์ˆ˜ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ ์ž ํ•  ๋•Œ, ๋˜๋Š” ์–ด๋– ํ•œ ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์™€์•ผ ํ•  ๋•Œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

this ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜ ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์—์„œ this๋Š” Monster class๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

// index.js

class Monster {
  power = 10;

  attack = () => {
    console.log("๊ณต๊ฒฉํ•˜์ž!!");
    console.log("๋‚ด ๊ณต๊ฒฉ๋ ฅ์€ " + this.power + "์•ผ!!!");
  };

  run = () => {
    console.log("๋„๋ง๊ฐ€์ž!!");
  };
}

const mymonster1 = new Monster();
mymonster1.attack();
mymonster1.power();

const mymonster2 = new Monster();
mymonster2.attack();
mymonster2.run();

๋‚ด์žฅํ•จ์ˆ˜ constructor() ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ๊ฐ’์„ ์ƒ์„ฑํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

constructor() : Monster๋ฅผ ๋งŒ๋“ค ๋•Œ(์ƒ์„ฑํ•  ๋•Œ) ์‹คํ–‰ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ, new Monster๋ฅผ ํ•  ๋•Œ, constructor ํ•จ์ˆ˜ ๋‚ด๋ถ€๊ฐ€ ์‹คํ–‰ ๋œ๋‹ค.

mymonster2 ๋Š” ๋„˜๊ฒจ๋ฐ›์€ ์ธ์ˆ˜์™€ ํ•จ๊ป˜ย constructor๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ์ด๋•Œ ์ธ์ˆ˜ย 50์ด aaa๋ผ๋Š” ์ด๋ฆ„์œผ๋กœย this.power์— ํ• ๋‹นํ•ด ์คŒ์œผ๋กœ์จ ์ดˆ๊ธฐ๊ฐ’์ด ๋‹ค์‹œ ์ƒ์„ฑ๋˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

// index.js

class Monster {
  power = 10;

    constructor(qqq) {
      this.power = qqq;
    }

  attack = () => {
    console.log("๊ณต๊ฒฉํ•˜์ž!!");
    console.log("๋‚ด ๊ณต๊ฒฉ๋ ฅ์€ " + this.power + "์•ผ!!!");
  };

  run = () => {
    console.log("๋„๋ง๊ฐ€์ž!!");
  };
}

const mymonster1 = new Monster(20);
mymonster1.attack();
mymonster1.run();

const mymonster2 = new Monster(50);
mymonster2.attack();
mymonster2.run(); 


๐Ÿ“Œ ์ƒ์† (extends)

์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์ด ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ๋Š” ์ƒ์†์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

๊ณตํ†ต ๊ธฐ๋Šฅ๋“ค์„ Monster ํด๋ž˜์Šค๋กœ ๋ฌถ์–ด์ฃผ๊ณ  extends๋ฅผ ํ†ตํ•ด์„œ ๊ณต์ค‘๋ชฌ์Šคํ„ฐ์™€ ์ง€์ƒ๋ชฌ์Šคํ„ฐ์— ์ƒ์†ํ•ด ์คŒ์œผ๋กœ์จ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

super : ์ƒ์„ฑ์ž constructor๋Š” ๊ณต์ค‘๋ชฌ์Šคํ„ฐ์™€ ์ง€์ƒ๋ชฌ์Šคํ„ฐ์—์„œ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, power ๋ณ€์ˆ˜๋Š” ์ƒ์†ํ•ด ์ค€ Monster ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋ฏ€๋กœ, Monster class ๋‚ด๋ถ€์— ์žˆ๋Š” constructor๋กœ ์ธ์ˆ˜๋ฅผ ๋„˜๊ฒจ ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

// index.js

class Monster {
    power = 10

    constructor(qqq){
        this.power = qqq
    }

    attack = () => {
        console.log("๊ณต๊ฒฉํ•˜์ž!!")
        console.log("๋‚ด ๊ณต๊ฒฉ๋ ฅ์€ " + this.power + "์•ผ!!!")
    }
}

class ๊ณต์ค‘๋ชฌ์Šคํ„ฐ extends Monster {
    constructor(aaa){
        super(aaa)
    }

    run = () => {
        console.log("๋‚ ๋ผ์„œ ๋„๋ง๊ฐ€์ž!!")
    }
}

class ์ง€์ƒ๋ชฌ์Šคํ„ฐ extends Monster {
    constructor(bbb){
        super(bbb)
    }

    run = () => {
        console.log("๋›ฐ์–ด์„œ ๋„๋ง๊ฐ€์ž!!")
    }
}

const mymonster1 = new ๊ณต์ค‘๋ชฌ์Šคํ„ฐ(20)
mymonster1.attack()
mymonster1.run()

const mymonster2 = new ์ง€์ƒ๋ชฌ์Šคํ„ฐ(50)
mymonster2.attack()
mymonster2.run()


๐Ÿ“Œ ์ „๋žต ํŒจํ„ด

ํ•˜๋‚˜์˜ Monster๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ , ๋ฌด์Šจ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์ฃผ๋ƒ์— ๋”ฐ๋ผ์„œ ์ด Monster๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ Monster๊ฐ€ ๋˜๋„๋ก ๋งŒ๋“ ๋‹ค.

  • new Monster๋ฅผ ํ†ตํ•ด ๋ชฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋ถ€ํ’ˆ(๋ถ€ํ’ˆ Class)์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ณต์ค‘ ๋ถ€ํ’ˆ(new ๊ณต์ค‘๋ถ€ํ’ˆ())๊ณผ ์ง€์ƒ ๋ถ€ํ’ˆ(new ์ง€์ƒ๋ถ€ํ’ˆ())์„ ๊ฐ๊ฐ ๋„ฃ์–ด์ค€๋‹ค.

  • ๊ฐ ๋ถ€ํ’ˆ๋“ค์€ Monster Class ๋‚ด๋ถ€์˜ constructor ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

  • Monster Class ๋‚ด๋ถ€์— run ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ถ€ํ’ˆ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๋Š” Monster 2๋งˆ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  • Monster๋Š” ๊ณ ์ •์‹œ์ผœ ๋‘” ์ฑ„๋กœ, ์•ˆ์˜ ๋ถ€ํ’ˆ์„ ๊ฐˆ์•„ ๋ผ์›Œ์คŒ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ Monster๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ์–ด๋–ค ๋ถ€ํ’ˆ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์„์ง€, ์ „๋žต์ ์œผ๋กœ ์‚ฌ์šฉํ•จ์— ์žˆ์–ด ์ „๋žต ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

// index.js

class ๊ณต์ค‘๋ถ€ํ’ˆ {
    run = () => {
        console.log("๋‚ ๋ผ์„œ ๋„๋ง๊ฐ€์ž!!")
    }
}

class ์ง€์ƒ๋ถ€ํ’ˆ {
    run = () => {
        console.log("๋›ฐ์–ด์„œ ๋„๋ง๊ฐ€์ž!!")
    }
}

class Monster {
    power = 10
    qqq;

    constructor(๋ถ€ํ’ˆ){
        this.qqq = ๋ถ€ํ’ˆ
    }

    attack = () => {
        console.log("๊ณต๊ฒฉํ•˜์ž!!")
        console.log("๋‚ด ๊ณต๊ฒฉ๋ ฅ์€ " + this.power + "์•ผ!!!")
    }

    run = () => {
        this.qqq.run()
    }
}

const mymonster1 = new Monster(new ๊ณต์ค‘๋ถ€ํ’ˆ())
mymonster1.attack()
mymonster1.run()

const mymonster2 = new Monster(new ์ง€์ƒ๋ถ€ํ’ˆ())
mymonster2.attack()
mymonster2.run()

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฌด์กฐ๊ฑด ์ƒ์†์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ „๋žต ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฉฐ, ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ํŠน์ง•

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

  • ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ย ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

  • ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ช…๋ น์–ด์˜ ๋ชฉ๋ก์œผ๋กœ ๋ณด๋Š” ์‹œ๊ฐ์—์„œ ๋ฒ—์–ด๋‚˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๋‹จ์œ„, ์ฆ‰ "๊ฐ์ฒด"๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ธ๊ฐ„ ์ค‘์‹ฌ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™” ์‹œ์ผœย ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ , ๊ฐ์ฒด๋“ค๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์‰ฌ์šฐ๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ„ํŽธํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•œ ์žฅ์ ์ด ์žˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•

โœ… 1. ์ถ”์ƒํ™” (abstraction)

  • ์ถ”์ƒํ™”๋Š”ย ๋ชฉ์ ๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ๋ถ€๋ถ„์„ ์—†์• ๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ์‚ฌ๋ฌผ๋“ค์˜ ๊ณตํ†ต์ ์ธ ํŠน์ง•, ์ฆ‰ย ์ถ”์ƒ๋œ ํŠน์ง•์„ ํŒŒ์•…ํ•ด ์ธ์‹์˜ ๋Œ€์ƒ์œผ๋กœ ์‚ผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

  • ์ถ”์ƒํ™”๋Š” ๊ตฌ์ฒด์ ์ธ ์‚ฌ๋ฌผ๋“ค์˜ ๊ณตํ†ต์ ์ธ ํŠน์ง•์„ ํŒŒ์•…ํ•ด์„œ ์ด๋ฅผ ํ•˜๋‚˜์˜ ๊ฐœ๋…(์ง‘ํ•ฉ)์œผ๋กœ ๋‹ค๋ฃจ๋Š” ์ˆ˜๋‹จ์ด๋‹ค.

โœ… 2. ์บก์Šํ™”(Encapsulation)

  • ์บก์Šํ™”๋ž€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๊ทธ ๊ฐ์ฒด๊ฐ€ย ํŠน์ •ํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ์‘์ง‘๋„ : ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ ์•ˆ์˜ ์š”์†Œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ๊ฒฐํ•ฉ๋„ : ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์— ์–ผ๋งˆ๋‚˜ ์˜์กดํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ์ •๋ณด์€๋‹‰ : ์บก์Šํ™”๋Š”ย ์ •๋ณด์€๋‹‰์„ ํ†ตํ•ด ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋ ฅ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

  • ํ•„์š” ์—†๋Š” ์ •๋ณด๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • private ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•ด ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค.

โœ… 3. ์ƒ์†์„ฑ(Inheritance)

  • ์ƒ์†์ด๋ž€ ๊ธฐ์กดย ์ƒ์œ„ ํด๋ž˜์Šค์— ๊ทผ๊ฑฐํ•˜์—ฌ ์ƒˆ๋กญ๊ฒŒ ํด๋ž˜์Šค์™€ ํ–‰์œ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฐœ๋…์ด๋‹ค

  • ๊ธฐ์กด ํด๋ž˜์Šค์˜ย ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™€ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ,ย ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ๊ฐœ์ฒด๊ฐ€ ๊ฐ€์ง„ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๋ถ€๊ฐ์‹œ์ผœ ํ•˜๋‚˜์˜ ๊ฐœ๋…์ด๋‚˜ ๋ฒ•์น™์œผ๋กœ ์„ฑ๋ฆฝ์‹œํ‚ค๋Š” ๊ณผ์ •์ด๋‹ค.

  • ๋”ฐ๋ผ์„œ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›์•„, ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์žฌ์‚ฌ์šฉ์œผ๋กœ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค.

  • ์ด๋ฅผ ํ†ตํ•ดย ๋‹คํ˜•์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… 4. ๋‹คํ˜•์„ฑ(polymorphism)

  • ๋‹คํ˜•์„ฑ์€ ์ƒ์†์„ ํ†ตํ•ดย ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ฆ‰, ๋‹คํ˜•์„ฑ์€ ํ˜•ํƒœ๊ฐ€ ๊ฐ™์€๋ฐ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๊ฐ์ž์˜ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋Šฅ๋ ฅ์ด๋‹ค.

  • ๋‹คํ˜•์„ฑ์€ ์ƒ์†๊ณผ ์—ฐ๊ณ„๋˜์–ด ๋™์ž‘ํ•˜๋ฉด ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ํž˜์„ ๋ฐœํœ˜ํ•œ๋‹ค.

  • ๋‹คํ˜•์„ฑ๊ณผ ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ๋„์™€์ฃผ๊ณ  ๋ณ€ํ™”์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

โœ… ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)

  • ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ์˜ ์ž…๋ง›๋Œ€๋กœ ๋‹ค์‹œย ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

โœ… ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)

  • ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฉ”์„œ๋“œ๋งˆ๋‹คย ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ๋„ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐœ๋…์ด๋‹ค.

  • ์˜ค๋ฒ„๋กœ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด ๋ฉ”์„œ๋“œ๋ผ๋ฆฌ ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด ์˜ค๋ฒ„๋กœ๋”ฉ์ด ์ ์šฉ๋œ๋‹ค.

๐Ÿ“Œ MVC ํŒจํ„ด

โœ… ๋””์ž์ธํŒจํ„ด

๋””์ž์ธ ํŒจํ„ด์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์–ด๋–ค ํŠน์ •ํ•œ ๊ฒƒ์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ค‘์— ๋ฐœ์ƒํ–ˆ๋˜ ๋ฌธ์ œ์ ๋“ค์„ ์ •๋ฆฌํ•ด์„œ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ ์šฉํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•˜์—ฌ ํŠน์ •ํ•œ "๊ทœ์•ฝ"์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋””์ž์ธ ํŒจํ„ด์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ, ์˜ค๋Š˜์€ MVC ํŒจํ„ด์— ๋Œ€ํ•ด ํ•™์Šตํ•˜์˜€๋‹ค.

MVC ๋Š” Model, View, Controller์˜ ์•ฝ์ž์ด๋ฉฐ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ๊ทธ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ธ๊ฐ€์ง€์˜ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•œ ํŒจํ„ด์ด๋‹ค.

  • controllers : ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ณณ.

  • models : DB ์ƒ์„ฑ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ณณ.

  • view : ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ํŒŒ์ผ๋“ค(html ํŒŒ์ผ)์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํด๋”. (ํ”„๋ก ํŠธ์—”๋“œ)

์œ„์˜ ๊ทธ๋ฆผ์„ ๋ณด๊ฒŒ๋˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ controller๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด controller๋Š” model์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹œ๊ฐ์ ์ธ ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” View๋ฅผ ์ œ์–ดํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.


๐ŸŒˆ ์˜ค๋Š˜ ํ•˜๋ฃจ

์˜ค๋Š˜์€ ํ”„๋กœ์ ํŠธ์™€ ๊ฐ™์€ ํฐ ๊ทœ๋ชจ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•˜์—ฌ ํ•™์Šตํ•˜์˜€๋‹ค. ๋””์ž์ธํŒจํ„ด์„ ๊ธฐ์กด์— ๋งŒ๋“ค์—ˆ๋˜ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜์—ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•ด๋ณด๊ณ  ์ง์ ‘ ๋ˆˆ์œผ๋กœ ์ฝ”๋“œ์˜ ๋ณ€ํ™”๋ฅผ ๋ณด๋‹ˆ, ํ™•์‹คํžˆ ํ•œ๋ฒˆ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ๋ˆˆ์— ๋„๊ฒŒ ๋†’์•„์กŒ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ฝ๊ณ  ๋”ฐ๋ผ๊ฐ€๋Š”๊ฒŒ ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. ์ด๋Ÿฌํ•œ ๋””์ž์ธํŒจํ„ด๋“ค์„ ์ ์šฉํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋งŒํผ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ, ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๋งˆ์Œ๊ฐ€์ง์„ ํ–ˆ๋‹ค.

post-custom-banner

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