๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ ์–ธ์–ด/JS

๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด - ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด(JS)

์ฑ… <๋Ÿฌ๋‹์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ>๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๋ฐฐ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • <๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด>
  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด vs ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด(JS)
  • <ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด>
  • 1. property
  • 2. ํ”„๋กœํ† ํƒ€์ž… (๊ฐœ๋… ์„ค๋ช…)
  • 3. ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด

 

<๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด>

๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ค„๊ธฐ๋กœ ๋‚˜๋ˆŒ์ˆ˜ ์žˆ๋‹ค.

  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด(C++, Java, C#, Ruby, Python ๋“ฑ)
  • ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด(JavaScript, ActionScript, JScript ๋“ฑ)
  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ & ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด

<ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด>

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ์ž์‹ ์˜ ๋ถ€๋ชจ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ (๋งˆ์น˜ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์† ๊ฐœ๋…๊ณผ ๊ฐ™์ด) ๋ถ€๋ชจ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ Prototype(ํ”„๋กœํ† ํƒ€์ž…) ๊ฐ์ฒด ๋˜๋Š” ์ค„์—ฌ์„œ Prototype(ํ”„๋กœํ† ํƒ€์ž…)์ด๋ผ ํ•œ๋‹ค.

Prototype ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด์— ๊ณต์œ  ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

1. property

1-1) property

  • property๋Š” ํ•ด๋‹น object์˜ ํŠน์ง•์ด๋‹ค.
  • property๋Š” ๋ณดํ†ต ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์—ฐ๊ด€๋œ ์†์„ฑ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • property๋Š” ์ด๋ฆ„(a string)๊ณผ ๊ฐ’(primitive/method/object reference)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • "ํ”„๋กœํผํ‹ฐ๊ฐ€ object๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค" = "property๊ฐ€ object reference๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค"๋ฅผ ์ค„์ธ๋ง๋กœ property์˜ ๊ฐ’์ด ๋ณ€ํ•œ ํ›„์—๋„ object๋Š” ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๋‹ค.

1-2) property์˜ ๋ฅ˜

  • ์ธ์Šคํ„ด์Šค property : ํŠน์ • object ์ธ์Šคํ„ด์Šค์˜ ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • Static Property : ๋ชจ๋“  object ์ธ์Šคํ„ด์Šค๋“ค์—๊ฒŒ ๊ณต์œ  ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

1-3) property์— ์ ‘๊ทผ ๋ฐฉ์‹

objectName.property      // person.age
objectName["property"]   // person["age"]
objectName[expression]   // x = "age"; person[x]

 

 

2. ํ”„๋กœํ† ํƒ€์ž…

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

2-1) ํ”„๋กœํ† ํƒ€์ž… ์ƒ์„ฑ

ํ•จ์ˆ˜ ์ƒ์„ฑํ•˜๋ฉด ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋„ ๋™์‹œ ์ƒ์„ฑ๋œ๋‹ค. ๋‹จ์ˆœํžˆ ์ƒ์„ฑ๋งŒ ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์—์„œ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์— prototype์ด๋ผ๋Š” ๋‚ด๋ถ€๋ณ€์ˆ˜๋กœ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ณ , ํ”„๋กœํ† ํƒ€์ž…์—์„œ๋Š” constructor๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ ˆํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‘ ๊ฐ์ฒด๋Š” ์ ‘๊ทผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณ€๊ฒฝ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

# ํ”„๋กœํ† ํƒ€์ž… ์ƒ์„ฑ

function Foo (){}
Foo.prototype.proto_val = '์›ํ˜• ๊ฐ’';

Foo.prototype.constructor.construct_val = "์ƒ์„ฑ์ž ๊ฐ’";

console.log(Foo.prototype.proto_val); //์›ํ˜• ๊ฐ’ ์„ ์ถœ๋ ฅ
console.log(Foo.construct_val); //์ƒ์„ฑ์ž ๊ฐ’ ์„ ์ถœ๋ ฅ
console.log(Foo.proto_val); // undefined๋ฅผ ์ถœ๋ ฅ 

์œ„ ์ฝ”๋“œ์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์ค„์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํ•จ์ˆ˜ ์Šค์Šค๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ newํ‚ค์›Œ๋“œ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

function Foo(){
    //var this = {}; this๊ฐ€ ์ƒ์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.  
    //์ด this๋Š” dunder proto๋ผ๋Š”(__proto__)๋ผ๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
    //return this; this๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
}
var foo_instance = new Foo();

์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด, new๋ฅผ ํ•  ๊ฒฝ์šฐ this ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ๋˜ํ•œ ๋ฐ˜ํ™˜๋˜์–ด foo_instance์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด this๋Š” Foo์˜ ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋˜๊ณ , (Foo ํ•จ์ˆ˜๊ฐ์ฒด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ) this๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‚ด๋ถ€ ๋ณ€์ˆ˜์ธ proto๋Š” Foo์˜ ํ•จ์ˆ˜์— ์ง์ ‘ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

โ€ป์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋ณด๋‹ค๋Š” ํ”„๋กœํ† ํƒ€์ž…์— ์žˆ๋Š” ๊ฐ’์„ ๊ณ ์Šค๋ž€ํฌ ๋ณต์ œํ•ด์„œ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์ ์ ˆํ•˜๋‹ค.

 

2-2) ํ”„๋กœํ† ํƒ€์ž…๊ณผ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ, ์ฐธ์กฐ๋˜๋Š” ๋ฐฉ์‹

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

 

2-3) ํ”„๋กœํ† ํƒ€์ž… ๊ฐœ๋…์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ฃผ์˜ํ•  ์ 

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

 

 

3. ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด

  • ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด์—์„œ๋Š” ํด๋ž˜์Šค๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ Built-in ๊ฐ์ฒด๋“ค์ด ์‹œ์Šคํ…œ์ƒ์— ์กด์žฌํ•˜๊ฒŒ๋œ๋‹ค.
  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด์˜ ์ƒ์† ๊ฐœ๋…๊ณผ ๋‹ฌ๋ฆฌ, ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด๋Š” ๊ฐ์ฒด๋ฅผ ์›ํ˜•(ํ”„๋กœํ† ํƒ€์ž…)์œผ๋กœ ํ•˜๋Š” ๋ณต์ œ ๊ณผ์ •์„ ํ†ตํ•ด ๊ฐ์ฒด์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋ณต์ œ๋ณด๋‹ค๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋งํฌ๋ฅผ ํ†ตํ•ด ์›ํ˜• ์ฐธ์กฐ.

 

'๐Ÿ“ฐ ์–ธ์–ด > JS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

map๊ณผ set  (0) 2020.01.10
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)  (0) 2020.01.05
๋ฐฐ์—ด๊ณผ ๋ฐฐ์—ด์ฒ˜๋ฆฌ  (0) 2020.01.03
์Šค์ฝ”ํ”„(2)  (0) 2019.12.22
์Šค์ฝ”ํ”„(1)  (0) 2019.12.20