๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL -์ผ๊ฐ„ํ•™์Šต๊ธฐ๋ก/Java Script

Class์™€ Instance

by ___Jin 2022. 1. 22.

ํ•™์Šต๋ชฉํ‘œ

  • ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค๋ผ๋Š” ์šฉ์–ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • new ํ‚ค์›Œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • class ํ‚ค์›Œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ชจ๋ธ์„ ๋ฐ”ํƒ•์œผ๋กœ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์„ ๋””์ž์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠน์ง•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์บก์Šํ™”
    • ์ƒ์†
    • ์ถ”์ƒํ™”
    • ๋‹คํ˜•์„ฑ
  • JavaScript์—์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Prototype์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ƒ์†(Inheritance)์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ  ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ƒ์†๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ชจ๋ธ์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํด๋ž˜์Šค ์ƒ์†์˜ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Prototype chain์„ ์ดํ•ดํ•˜๊ณ  ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. (__proto__)
  • ๋ฉด์ ‘์— ์ž์ฃผ๋“ฑ์žฅํ•˜๋Š” ๊ฐœ๋…์ด๋ผ๊ณ  ํ•˜๋‹ˆ ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ์Šตํ•ด๋ณผ๊ฒƒ

๋ฐœ๊ฒฌํ•œ๊ฒƒ

class๋Š” ํ•˜๋‚˜์˜ ํผ? ๊ทœ๊ฒฉ, ๋ชจ๋ธ์ด ๋˜๋Š” ์ฒญ์‚ฌ์ง„

instance ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ํŒจํ„ด

 

//ํด๋ž˜์Šค ๋งŒ๋“œ๋Š”๋ฒ• Es6๋ฌธ๋ฒ•
 class Car {
   constructor(brand, name, color){
     this.brand = brand;
     this.name = name;
     this.color = color;
     //@@ this๋ž€ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ ํ•œ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ ๋ธŒ๋žœ๋“œ,๋„ค์ž„,์ปฌ๋Ÿฌ๊ฐ™์€..
   };
 };
 //this์— ํ• ๋‹นํ•˜๋Š”๊ฒƒ์€ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค์— ํ•ด๋‹น๋‚ด์šฉ์„ ๋ถ€์—ฌํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
 // this.brand = brand; ์ด๋ ‡๊ฒŒ ํ•ด์ค˜์•ผ ์ถ”ํ›„ ์ธ์ž์˜ ์ž์œจ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค 
 ex)  this.brand = 'kia'; ์ด๋ ‡๊ฒŒ ์ ์œผ๋ฉด ํ™•์ •๋˜์–ด๋ฒ„๋ ค ์ธ์ž๊ฐ’์„ ๋ฐ›๊ธฐ ์‰ฝ์ง€์•Š๋‹ค.
//์ธ์Šคํ„ด์Šค ๋งŒ๋“œ๋Š” ๋ฒ•
let avante = new Car('hyundai', 'avante', 'white');
//new๋ฅผ ๋ถ™์—ฌ๋งŒ๋“  ์ธ์Šคํ„ด์Šค๋Š” Carํด๋ž˜์Šค์˜ ๊ณ ์œ ํ•œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค.
//new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์ƒ์„ฑ์ž(constructor)ํ•จ์ˆ˜๊ฐ€์‹คํ–‰๋จ,์ƒ์„ฑ์žํ•จ์ˆ˜๋Š” ๋ฆฌํ„ด๊ฐ’์„ ๋งŒ๋“ค์ง„์•Š์Œ.

 

O(object) O(oriented) P(programming)์˜  ํŠน์„ฑ

   =์‚ฌ๋žŒ์ด ์„ธ๊ณ„๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ‰๋‚ด๋‚ธ ๋ฐฉ๋ฒ•๋ก 

 

1. ์บก์Šํ™” : ์ฝ”๋“œ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์€๋‹‰(hiding) (๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ์–ด ๊ตฌํ˜„์€ ์ˆจ๊ธฐ๊ณ  ๋™์ž‘์€ ๋…ธ์ถœํ•จ)

    ์ ˆ์ฐจ์  ์ฝ”๋“œ์ž‘์„ฑ์ด ์•„๋‹ˆ๋ผ ์ฝ”๋“œ๊ฐ€ ์ƒ์ง•ํ•˜๋Š” ์‹ค์ œ ๋ชจ์Šต๊ณผ ๋‹ฎ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ชจ์•„ ๊ฒฐํ•ฉํ•˜๋ฉฐ

    ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ์–ธ์ œ๋‚˜ ์ฝ”๋“œ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์ •๋ฆฌ : ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์žฌ์‚ฌ์šฉ๋ฅ ์„ ๋†’์ธ๋‹ค.

 

2. ์ถ”์ƒํ™” : ๋‚ด๋ถ€๋Š” ๋ณต์žกํ•˜๊ฒ ์ง€๋งŒ ๋…ธ์ถœ๋ถ€๋ถ„์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค์ž (ex.์ „ํ™”๊ธฐ, ๊ณ„์‚ฐ๊ธฐ)

    (์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜์ง€์•Š๋Š” ๋ถ€๋ถ„์€ ๋…ธ์ถœ์‹œํ‚ค์ง€์•Š์•„ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์‚ฌ์šฉ์ƒ์˜ ๋ณ€ํ™” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.)

    ํด๋ž˜์Šค ์ •์˜์‹œ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ๋งŒ ์ •์˜ํ•œ๊ฒƒ์„ interface๋ผ๊ณ  ํ•œ๋‹ค. ์ถ”์ƒํ™”์˜ ๋ณธ์งˆ 

    

์บก์Šํ™”์™€ ์ถ”์ƒํ™”

์บก์Šํ™”๊ฐ€ ์ฝ”๋“œ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์€๋‹‰์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถฐ์ ธ์žˆ๋‹ค๋ฉด,

์ถ”์ƒํ™”๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ ,

๋‹จ์ˆœํ•œ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถฐ์ ธ ์žˆ๋‹ค.

 

3. ์ƒ์† : ๋ถ€๋ชจํด๋ž˜์Šค์˜ ํŠน์ง•์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š”๊ฒƒ

    ex) ์‚ฌ๋žŒ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•™์ƒํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ๋žŒ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์— ํ•™์ƒ์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

    ๋ณธ์งˆ์ด๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ ค๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. 

    **๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.

 

4. ๋‹คํ˜•์„ฑ : ๊ฐ™์€์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋ผ๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ์ž‘๋™ํ• ์ˆ˜์žˆ๋‹ค.

    ๋™์ผํ•œ ๋ฉ”์„œ๋“œ์— ๊ฐ์ฒด์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ๋‹ฌ๋ฆฌ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

Proto typesโ—ˆ 

ํ”„๋กœํ† ํƒ€์ž…(prototype)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž…(prototype)์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฐ์ฒด๋Š” ๊ทธ๋“ค์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ๋ถ€ํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์ƒ์†์„ ๋ฐ›์œผ๋ฉฐ, ์ด๋•Œ ์ƒ์†๋˜๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด๋ฅผ

ํ”„๋กœํ† ํƒ€์ž…(prototype)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. -tcpschool ๋ฐœ์ทŒ

 

https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes

 

Object prototypes - Web ๊ฐœ๋ฐœ ํ•™์Šตํ•˜๊ธฐ | MDN

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

developer.mozilla.org

 

JavaScript๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด(prototype-based language)

 ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๋ฉ”์†Œ๋“œ์™€ ์†์„ฑ๋“ค์„ ์ƒ์† ๋ฐ›๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด(prototype object)๋ฅผ ๊ฐ€์ง„๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋„ ๋˜ ๋‹ค์‹œ ์ƒ์œ„ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋ฉ”์†Œ๋“œ์™€ ์†์„ฑ์„ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ 

๊ทธ ์ƒ์œ„ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ(prototype chain)์ด๋ผ ๋ถ€๋ฅด๋ฉฐ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์ •์˜๋œ ๋ฉ”์†Œ๋“œ์™€ ์†์„ฑ์„

ํ•œ ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ทผ๊ฐ„์ด ๋œ๋‹ค.(๋ชจ๋“  ๊ฐ์ฒด์—์„œ toString() ๋ฉ”์„œ๋“œ๋ฅผ ์“ธ์ˆ˜์žˆ๋Š” ์ด์œ ๋‹ค.)

์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด ์ƒ์†๋˜๋Š” ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋“ค์€ ๊ฐ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์˜ prototype์ด๋ผ๋Š” ์†์„ฑ์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript์—์„œ๋Š” ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์™€ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ„์— ์—ฐ๊ฒฐ(๋งŽ์€ ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ์ƒ์„ฑ์ž์˜ prototype ์†์„ฑ์—์„œ ํŒŒ์ƒ๋œ __proto__ ์†์„ฑ์œผ๋กœ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์— ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)์ด ๊ตฌ์„ฑ๋˜๋ฉฐ

์ด ์—ฐ๊ฒฐ์„ ๋”ฐ๋ผ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ€๋ฉฐ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

 

*๊ฐ์ฒด๋‚ด์— ์บก์Šํ™”๋˜์–ด์žˆ๋Š”๊ฒƒ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋จผ์ € ์ ์„ ์ž…๋ ฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ์ ์„ ์ฐ๊ณ  ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ํ”„๋กœํผํ‹ฐ์˜ ์ด๋ฆ„์ผ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๊ณ , ๋ฐฐ์—ด์˜ ์ผ๋ถ€์ด๊ฑฐ๋‚˜ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


๋Š๋‚€์ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด ๋ผ๊ณ ํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€๋ณด๋‹ค ํ–ˆ๋Š”๋ฐ,

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ด๋‹์ด๋‚˜ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฉ”์„œ๋“œ๋ฅผ ์“ธ์ˆ˜์žˆ๋‹ค๋Š” ์ ์—์„œ ํŽธ๋ฆฌํ•œ ์–ธ์–ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์•„์ง ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค๋Š” ์‘์šฉ์ด์–ด๋ ค์›Œ์„œ ๋งŽ์ด ์‚ฌ์šฉํ•ด์•ผํ• ๊ฒƒ๊ฐ™๋‹ค.


๋‹ค์Œ ๊ณต๋ถ€๋ฐฉํ–ฅ

์ฝ”์Šค์˜ ์Šคํ”„๋ฆฐํŠธ ์ง„ํ–‰ํ•ด๋ณด๊ธฐ.

๋Œ“๊ธ€