Class

kirin.logยท2020๋…„ 12์›” 22์ผ
4

๐Ÿš— Javascrip๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” Class๋ผ๋Š” ๊ฐœ๋…์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํ•˜์ง€๋งŒ Javascript์—์„œ๋Š” Class์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ 3๊ฐ€์ง€ ์ง€์›ํ•œ๋‹ค.
๐Ÿ‘‰ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹ , ํ•จ์ˆ˜ ๋ฐฉ์‹ , ํ”„๋กœํ† ํƒ€์ž… ๋ฐฉ์‹

โœ… ํ•จ์ˆ˜(Function) vs ํด๋ž˜์Šค(Class)

Function
ํŠน์ • ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑ.
๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์ฝ”๋“œ ๊ทธ๋ฃนํ™”(๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์ค‘๋ณต์ฝ”๋“œ ์ œ๊ฑฐ ๋ฐ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ)
Class
์—ฐ๊ด€ ์žˆ๋Š” ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๋กœ ๊ตฌ์„ฑ.
๊ฐ์ฒด ๋‹จ์œ„์˜ ์ฝ”๋“œ ๊ทธ๋ฃนํ™”(๊ฐ์ฒด ๋‹จ์œ„์˜ ์ค‘๋ณต์ฝ”๋“œ ์ œ๊ฑฐ ๋ฐ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ)
โžก ๊ฐ์ฒด๋กœ ๋ฌถ์–ด์„œ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ํ•„์š”ํ•œ ํ•จ์ˆ˜๋“ค์„ ์ฐพ๊ธฐ ํŽธํ•ด์ง€๊ณ , ๊ฐ์ฒด๋‹จ์œ„์˜ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๋ฐ ์ค‘๋ณต์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ํด๋ž˜์Šค(Class) ๊ธฐ๋ณธ ๊ฐœ๋…

โฉ Class = Object
ex. ๋ถ•์–ด๋นต ํ‹€
โฉ Instance = Object
ex. ๋ถ•์–ด๋นต ํ‹€๋กœ ๋งŒ๋“ค์–ด๋‚ธ ๋ถ•์–ด๋นต
โ— Class์˜ ํ”„๋กœํผํ‹ฐ ์ดˆ๊ธฐํ™” ์—ญํ• (์ž๋™์œผ๋กœ Class๋ฅผ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜)
โฉ Property = Class ๋‚ด๋ถ€์— ๋งŒ๋“œ๋Š” ๋ณ€์ˆ˜(=๋ฉค๋ฒ„๋ณ€์ˆ˜)
ex. ๋ถ•์–ด๋นต ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ํŒฅ (์Šˆํฌ๋ฆผ ๋Œ€์ฒด ๊ฐ€๋Šฅ)
์ฆ‰ ํด๋ž˜์Šค ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด๋กœ์จ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅ.
โฉ Method = Class ๋‚ด๋ถ€์— ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜(=๋ฉค๋ฒ„ํ•จ์ˆ˜)
ex. ๋ถ•์–ด๋นต ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ํŒฅ (๋ถ•์–ด๋นต ์•ˆ์˜ ์ž‘์€ ๋ถ•์–ด๋นต ๊ฐ™์€ ๊ฐœ๋…)
์ฆ‰ ๊ฐ์ฒด ๋‚ด ํ•จ์ˆ˜ ํ”„๋กœํผํ‹ฐ๋กœ์จ, ์ฃผ๋กœ ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๋ณ€๊ฒฝ ๋ฐ ํƒ์ƒ‰.

๐Ÿš€ ํด๋ž˜์Šค๋Š” ๊ฒฐ๊ตญ ๊ฐ์ฒด(object)๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ํ‹€์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ๊ฐ์ฒด๋Š” ํŠน์ • ๋กœ์ง์„ ๊ฐ–๊ณ  ์žˆ๋Š” ํ–‰๋™(method)์™€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(๋ณ€์ˆ˜)๋ฅผ ๊ฐ–๋Š”๋‹ค.
์›ํ•˜๋Š” ๊ตฌ์กฐ์˜ ๊ฐ์ฒด ํ‹€(=class)์„ ์งœ ๋†“๊ณ , ๋น„์Šทํ•œ ๋ชจ์–‘์˜ ๊ฐ์ฒด(=instance)๋ฅผ ๊ณต์žฅ์ฒ˜๋Ÿผ ์ฐ์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿš€ class๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ์ธ์Šคํ„ด์Šคํ™”๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

// ํด๋ž˜์Šค ์ƒ์„ฑ
class Car {
    constructor(name, price) {  //constructor ๋ฉ”์†Œ๋“œ๋Š” 2๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์•˜๋‹ค.(=๋ฉค๋ฒ„๋ณ€์ˆ˜)
                                // ๋ฉค๋ฒ„๋ณ€์ˆ˜: ํด๋ž˜์Šค ๋‚ด์—์„œ name, price์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ’์ด์ž class๋‚ด์˜ ์ปจํ…์ŠคํŠธ์—์„œ ์–ด๋Š ๊ณณ์—์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜    
        this.name = name;
        this.price = price;
    }
}
// ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ(Carํด๋ž˜์Šค์˜ instance๋ฅผ morning์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ)
const morning = new Car('morning', 200);
//constructor()์˜ ์ธ์ž(name๊ณผ price)๋ฅผ ์‚ฌ์šฉํ•ด Car instance์˜ name, priceํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹น
  • Car๋Š” ํด๋ž˜์Šค ์ด๋ฆ„(โ— ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘, CarmelCase)
  • Car ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค constructor๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
  • ํด๋ž˜์Šค๋Š” ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ;๋กœ ๊ตฌ๋ถ„
    (์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ,(์ฝค๋งˆ)๋กœ ๊ตฌ๋ถ„)
  • ์ธ์Šคํ„ด์Šค๋Š” ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด. class์˜ property์ด๋ฆ„๊ณผ method๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด์ด๋‹ค. (์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๋ชจ๋‘ ๋‹ค๋ฅธ property value(๊ฐ’) ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค)
  • ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด newํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”. ์ฆ‰ newํ‚ค์›Œ๋“œ๋Š” constructor()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ returnํ•ด์ค€๋‹ค.

โœ… ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹ ์œผ๋กœ Class Object ๋งŒ๋“ค๊ธฐ

var user = {        // instance
    name : "kirin", // property1
    age : 20,       // property2
    showInfo : function() {
       document.write( `์ด๋ฆ„: ${this.name} ๋‚˜์ด: ${this.age}` )
        },
    // ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์ž์‹ ์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ(this)
    callShowInfo : function() {
        this.showInfo();
    }
    // ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์ž์‹ ์˜ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผ(this)
}

user.showInfo();   //๋ฉ”์†Œ๋“œ ์ ‘๊ทผ
user.age;          // ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

๐Ÿ‘‰ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค(์ž์ฒด๊ฐ€ ์ธ์Šคํ„ด์Šค). ์ฃผ ์šฉ๋„๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํฌ์žฅ์šฉ.
์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹จ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด ๊ฐ’์„ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ.

โœ… ํ•จ์ˆ˜ ๋ฐฉ์‹ ์œผ๋กœ Class Object ๋งŒ๋“ค๊ธฐ

function User = {        // Class์ด๋ฆ„
    this.name : "kirin", // property1
    this.age : 20,       // property2
    this.showInfo : function() {
       document.write( `์ด๋ฆ„: ${this.name} ๋‚˜์ด: ${this.age}` )
        },
    // ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์ž์‹ ์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ(this)
}

let user = new User // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
User.showInfo();    //๋ฉ”์†Œ๋“œ ์ ‘๊ทผ
User.age;           // ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

๐Ÿ‘‰ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฒฝ์šฐ class์ด๋ฆ„ { ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ} ์˜ ํ˜•ํƒœ๋กœ class๋ฅผ ์ •์˜ํ•˜์ง€๋งŒ, Javascript๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ๋”ฐ๋กœ ์—†๋‹ค.
๋”ฐ๋ผ์„œ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜ ๋ฐฉ์‹์˜ ํด๋ž˜์Šค์˜ ํ˜•ํƒœ๊ฐ€ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ  class์˜ ๊ฒฝ์šฐ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
โ— class์ž‘์„ฑ ์‹œ, ํด๋ž˜์Šค ์ด๋ฆ„์€ ๊ผญ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

๐Ÿ‘‰ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜๋‚˜์˜ class๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์ƒ์„ฑ ๊ฐ€๋Šฅ

let userInfo1 = new User();
let userInfo2 = new User();
let userInfo3 = new User();

โ— ๋ฉ”์†Œ๋“œ ์ค‘๋ณต ์ƒ์„ฑ โžก ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋Š” ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— userInfo1,2,3 ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋„ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๋˜‘๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ชจ๋‘ ์ค‘๋ณต๋˜์–ด ์ƒ์„ฑ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

โœ… ํ”„๋กœํ† ํƒ€์ž… ๋ฐฉ์‹ ์œผ๋กœ Class Object ๋งŒ๋“ค๊ธฐ

function User = {        // Class์ด๋ฆ„
    this.name : "kirin", // property1
    this.age : 20,       // property2

    // ํ•จ์ˆ˜ ๋ฐฉ์‹๊ณผ ๊ฐ™์ง€๋งŒ, ํ”„๋กœํ† ํƒ€์ž…์€ ๋ฉ”์†Œ๋“œ์— prototype์ด๋ผ๊ณ  ํ”„๋กœํผํ‹ฐ์— ์ •์˜ํ•˜๋Š” ๊ตฌ์กฐ
    User.prototype.showInfo : function() {
       document.write( `์ด๋ฆ„: ${this.name} ๋‚˜์ด: ${this.age}` )
        },
    // ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์ž์‹ ์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ(this)
}

let user = new User // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
User.showInfo();    //๋ฉ”์†Œ๋“œ ์ ‘๊ทผ
User.age;           // ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

๐Ÿ‘‰ ํ•จ์ˆ˜ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง„๋‹ค.(๋ฉ”์†Œ๋“œ ์ƒ์„ฑ ๋ฐฉ๋ฒ•๋งŒ ๋‹ค๋ฅด๋‹ค)
โ— ๋ฉ”์†Œ๋“œ ๊ณต์œ  โžก ๋ชจ๋“  ์ธ์Šคํ„ด์Šค(userInfo1,2,3)๊ฐ€ prototype์— ๋งŒ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ ์ค‘๋ณต ์ƒ์„ฑ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

profile
boma91@gmail.com

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

comment-user-thumbnail
2020๋…„ 12์›” 22์ผ

์˜ฌ๋นผ๋ฏธ์กฑ ๋“ค.. 3์‹œ๋ผ๋‹ˆ ใ…Žใ…Ž ;

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2020๋…„ 12์›” 23์ผ

์š”์ฆ˜ ๋„ˆ๋ฌด ์—ด์‹ฌํžˆ ํ•˜๋Š”๊ฑฐ ์•„๋‹ˆ์—์š”?? ใ…‹ใ…‹ใ…‹ใ…‹

1๊ฐœ์˜ ๋‹ต๊ธ€