๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/Vanilla JS

JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ• (34)_ prototype (ํŠน์ง• ๋ฐ constructor์™€์˜ ์ฐจ์ด)

by KASSID 2023. 8. 11.

๋ชฉ์ฐจ

    728x90

    JS์˜ prototype์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

     

    0. ์ƒ์†(inheritance)

    ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ ์ƒ์†์€ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•˜๋ฉด ๋ถ€๋ชจ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ž์‹ ๊ฐ์ฒด๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    JS์—์„œ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋Š”๋ฐ

     

    ์ฒซ๋ฒˆ์งธ๋Š” ์ €๋ฒˆ์‹œ๊ฐ„์— ๋‹ค๋ฃจ์—ˆ๋˜ constructor ๋ฌธ๋ฒ•์ด๋‹ค.

    2023.08.08 - [๐ŸŒŒ | WEB DEV/Vanilla JS] - JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ• (33)_ constructor ๋ฌธ๋ฒ•

     

    ๊ทธ๋ฆฌ๊ณ  ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด prototype์ด๋‹ค.

     

     

    1. prototype

    ๋ชจ๋“  ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋“ค์€ prototype์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋‹ค. 

    function Student(name, code){
      this.name = name;
      this.code = code;
    }
    
    console.log(Student.prototype);

     

     

    prototype์˜ ๊ธฐ๋Šฅ

    prototype์€ ๋ถ€๋ชจ๊ฐ€ ์ž์‹์—๊ฒŒ ์ค„ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ๋น„์œ ํ•˜์ž๋ฉด ์œ ์ „์ž๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ƒ์†์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

     

    ๋ถ€๋ชจ.prototype์— ๋“ฑ๋ก๋œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์€

    ๋ถ€๋ชจ๋กœ ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ์ƒˆ๋กœ์šด ์ž์‹ object๊ฐ€ ์ „๋ถ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ์ด๋•Œ ํŠน์ง•์€ prototype์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ณ , ํ•จ์ˆ˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๋˜ํ•œ, ์ด๊ฒƒ์— ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋Š” '๋ถ€๋ชจ'๋งŒ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค.

     

     

    ์˜ˆ์‹œ

    function Student(name, code){
      this.name = name;
      this.code = code;
    }
    
    Student.prototype.class = 1;
    
    let student1 = new Student();
    console.log(student1.class);
    
    --------
    1

     

    ์ด์ฒ˜๋Ÿผ prototype์— ์ถ”๊ฐ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ์ž์‹ ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    prototype ์ž‘๋™์›๋ฆฌ

    ์œ„์—์„œ ๋ณธ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด ์ž์‹ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ.prototype์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๊ฒƒ์˜ ์ž‘๋™์›๋ฆฌ๋ฅผ ์•Œ์•„๋ณด๋ฉด

     

    JS์˜ ์—”์ง„์ด Object์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•  ๋•Œ 

    1) ํ˜„ ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€?

    2) ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€?

    3) ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€?

    4) ...

     

    ์ด์ฒ˜๋Ÿผ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ๊ฐ’์„ ์ฐพ์•„๋‚ธ๋‹ค.

    ๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ์ž์‹ ๊ฐ์ฒด๊ฐ€ ๊ฐ’์„ ์ง์ ‘ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ๋ถ€๋ชจ์˜ prototype์— ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

     

     

    ๊ทธ๋Ÿผ ํ˜น์‹œ ๋ฉ”์†Œ๋“œ๋Š”??

    ์ƒˆ๋กœ์šด array๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ JS์— ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” forEach(), sort(), toString() ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋Š” ๊ณผ์—ฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋˜ ๊ฒƒ์ผ๊นŒ?

     

    let arr1 = [1,2,3];
    
    let arr1 = new Array(1,2,3);

     

    ์œ„์˜ ๋‘ ์ฝ”๋“œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๊ฐ™์€ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

    ๋Œ€๊ด„ํ˜ธ์— ์›์†Œ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์€ ๋‚ด๋ถ€์ ์œผ๋กœ new Array()๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด array ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.

     

    ์ฆ‰, Array() ๋ผ๋Š” constructor ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž์‹ array๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

     

    ๋”ฐ๋ผ์„œ Array.prototype์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ํ•จ์ˆ˜๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“  array ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ทธ๊ฒƒ๋“ค์ด ๋ฐ”๋กœ forEach(), sort(), toString()์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ์ธ ๊ฒƒ์ด๋‹ค.

     

     

     

    3. constructor ์™€ prototype์˜ ์ฐจ์ด

    ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๋‘˜์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ฉด

     

    constructor๋Š” ์ž์‹์—๊ฒŒ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „ํ•ด์ง„๋‹ค.

    prototype์€ ๋ถ€๋ชจ๋งŒ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

     

    ์ด ํŠน์ง•์„ ์ด์šฉํ•˜์—ฌ ์ƒํ™ฉ์— ๋งž๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค!

    ๋Œ“๊ธ€