๐Ÿ” [์ง๋ฌด ๊ด€๋ จ ์งˆ๋ฌธ] - 13. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

์กฐ์ค€ํ˜•ยท2021๋…„ 7์›” 3์ผ
0

interview

๋ชฉ๋ก ๋ณด๊ธฐ
20/20
post-thumbnail
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋กœ์ €๋ž€?
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํ† ํƒ€์ž…์ด๋ž€?

๐Ÿ’ฌ Answer

๐ŸŒ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๐Ÿ‘‰ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

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

๐Ÿ‘‰ ํด๋กœ์ €

ํด๋กœ์ €๋ž€ ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ๋งฅ๋ฝ(context)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€๋ฅดํ‚จ๋‹ค.

๋‚ด๋ถ€ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜์„œ ์™ธ๋ถ€ํ•จ์ˆ˜๊ฐ€ ์†Œ๋ฉธ๋œ ์ดํ›„์—๋„ ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํด๋กœ์ €๋ผ๊ณ  ํ•œ๋‹ค.

function outter(){
    var title = 'coding everybody';  
    return function(){        
        alert(title);
    }
}
inner = outter();
inner();

์ด ๊ฒฝ์šฐ inner์—์„œ outter์ด ํ˜ธ์ถœ๋˜๊ณ  ๊ทธ๋‹ค์Œ inner()์—์„œ outter๋Š” ์ข…๋ฃŒ๋˜์ง€๋งŒ, ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜ title์ด ์ถœ๋ ฅ๋œ๋‹ค.
์ฆ‰, ํด๋กœ์ €๋ž€ ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ณ , ์™ธ๋ถ€ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์†Œ๋ฉธ๋  ๋•Œ๊นŒ์ง€ ์†Œ๋ฉธ๋˜์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ๋งํ•œ๋‹ค.

๐Ÿ‘‰ ํ”„๋กœํ† ํƒ€์ž…

Java,Python๋“ฑ ๊ฐ์ฒด ์ง€ํ–ฅ์–ธ์–ด์—์„œ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” Class.
ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์ง€๋งŒ, Class๋Š” ์—†๊ณ , ํ”„๋กœํ† ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
(ES6์—์„œ Class๋ฌธ๋ฒ•์ด ์ถ”๊ฐ€๋จ.)

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

function Person() {
  this.eyes = 2;
  this.nose = 1;
}
var kim  = new Person();
var park = new Person();
console.log(kim.eyes);  // => 2
console.log(kim.nose);  // => 1
console.log(park.eyes); // => 2
console.log(park.nose); // => 1

์ด ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” eyes์™€ nose๊ฐ€ ๋‘๊ฐœ์”ฉ ์ด 4๊ฐœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
100๊ฐœ๋ฅผ ๋งŒ๋“ค๋ฉด 200๊ฐœ๊ฐ€ ํ• ๋‹น.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ํ•ด๊ฒฐ.

function Person(){}
Person.prototype.eyes = 2;
Person.prototype.eyes = 1;

var kim = new Person();
var park = new Person();

์ด ๊ฒฝ์šฐ Person.prototype์ด๋ž€ ๋นˆ object๊ฐ€ ์–ด๋”˜๊ฐ€ ์กด์žฌํ•˜๊ณ , Personํ•จ์ˆ˜๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด(kim,park)๋“ค์€ ์–ด๋”˜๊ฐ€์— ์กด์žฌํ•˜๋Š” Object์— ์žˆ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, eyes์™€ nose๋ฅผ ์–ด๋”˜๊ฐ€ ๋„ฃ์–ด๋†“๊ณ , kim๊ณผ park์ด ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.

๐Ÿ“˜ ์ฐธ๊ณ 

https://velog.io/@kyusung/ํ•จ์ˆ˜ํ˜•-ํ”„๋กœ๊ทธ๋ž˜๋ฐ-์š”์•ฝ
https://mangkyu.tistory.com/111
https://opentutorials.org/course/743/6544
https://medium.com/@bluesh55/javascript-prototype-์ดํ•ดํ•˜๊ธฐ-f8e67c286b67

profile
๊นƒํ—ˆ๋ธŒ : github.com/JuneHyung

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