[๐ŸŒณjavascript] class

h-a-n-aยท2023๋…„ 3์›” 13์ผ
1

๐ŸŒณjavascript

๋ชฉ๋ก ๋ณด๊ธฐ
12/17

๊ทธ๋™์•ˆ ๋ฏธ๋ค„์™”๋˜ class ์ •๋ฆฌํ•ด์•ผ์ง€, ํ•ด์•ผ์ง€ ํ•˜๋‹ค๊ฐ€ ๋“œ๋””์–ด ์ •๋ฆฌํ•˜๋Š” ๋‚ .

์˜ค๋ธŒ์ ํŠธ ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ๋•…

๋น„์Šทํ•œ object ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ฐ์–ด๋‚ด๊ณ  ์‹ถ์œผ๋ฉด class ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
ES6 ์‹ ๋ฌธ๋ฒ•์ด ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” function ํ‚ค์›Œ๋“œ๋กœ ์—ด์‹ฌํžˆ ์ฐ์–ด๋ƒˆ๋‹ค.

function Student(์ด๋ฆ„){
  this.name = ์ด๋ฆ„;
}

let ํ•™์ƒ1= new Student('Lee')

this๋Š” ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฉ‹์ง„ ๊ฐœ๋ฐœ์ž ์šฉ์–ด๋กœ ์ธ์Šคํ„ด์Šค ๋ผ๊ณ  ํ•œ๋‹ค.

class

์œ„์—์„œ ์“ฐ๋˜ thisํ‚ค์›Œ๋“œ๋Š” ์œ ์ง€ํ•œ ์ฑ„ class ํ‚ค์›Œ๋“œ์™€ constructor() ํ‚ค์›Œ๋“œ๋ฅผ ์•„๋ฆ„๋‹ต๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

class Student{ //ํด๋ž˜์Šค๋ช…์€ ๋Œ€๋ฌธ์ž, ํด๋ž˜์Šค๋ช… ๋‹ค์Œ์— () ์•ˆ์“ด๋‹ค!
  constructor(์ด๋ฆ„){ //ํŒŒ๋ผ๋ฏธํ„ฐ ์ž๋ฆฌ๋Š” constructor()์—ฌ๊ธฐ์— ์“ฐ๋Š”๊ฑฐ๋‹ค!
  	this.name = ์ด๋ฆ„;
  }
}

let ํ•™์ƒ1= new Student('Lee')

class์— ํ•จ์ˆ˜ ์ถ”๊ฐ€ํ•˜๊ธฐ

class Student{
  constructor(์ด๋ฆ„){
	this.name= ์ด๋ฆ„;
    this.sayHi= function(){
    }
  }
  sayHello(){
    alert(this.name)
  }
}

ํ•จ์ˆ˜๋Š” constructor ์•ˆ์—์„œ this.์–ด์ฉŒ๊ตฌํ•จ์ˆ˜ = function(){} ์ด๋ ‡๊ฒŒ ์“ฐ๊ฑฐ๋‚˜ constructor()๋ฐ–์—์„œ ์ €์ฉŒ๊ตฌํ•จ์ˆ˜(){} ์ด๋ ‡๊ฒŒ ์“ธ์ˆ˜ ์žˆ๋‹ค. this ๋กœ ์“ฐ๋ฉด ์ž์‹์€ ์ง์ ‘ ๊ทธ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์งˆํ…Œ๊ณ , contructor ๋ฐ–์—์„œ ์“ฐ๋ฉด prototype์— ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ˆ ์ž์‹์ด ์ง์ ‘ ์†Œ์œ ํ•˜์ง€๋Š” ๋ชปํ•  ๊ฒƒ์ด๋‹ค.

prototype

class ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์ด์ œ ํ•™์ƒ1, ํ•™์ƒ2,...์„ ์—ด์‹ฌํžˆ ์ฐ์–ด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— class๋Š” ๋ถ€๋ชจ, ์—ด์‹ฌํžˆ ์ฐ์–ด๋‚ธ ํ•™์ƒ1,2๋Š” ์ž์‹์ด๋ผ๊ณ  ๋ณดํ†ต ์นญํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ทธ ์•ˆ์˜ ์†์„ฑ๋“ค์„ ์ž์‹๋“ค๋„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๊ฑธ ์ƒ์†์ด๋ผ๊ณ ๋„ ํ‘œํ˜„ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์†ํ•˜๊ฒŒ ๋˜๋Š” ๊ฑด class ์™ธ์— prototype์ด๋ผ๋Š” ๊ฑธ๋กœ๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด์„œ ๊ทธ๋ƒฅ ์œ ์ „์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
์œ„์—์„œ ๋งŒ๋“  'ํ•™์ƒ1' ์„ ์ฝ˜์†”์ฐฝ์— ์ฐ์–ด๋ณด๋ฉด Student{name: 'Lee'} ์ •๋„๋งŒ ๋‚˜์˜ค์ง€๋งŒ

Student.prototype.school='seoul'

์„ ์ ๊ณ  ๋‹ค์‹œ๋ณด๋ฉด ์—ฌ์ „ํžˆ Student{name: 'Lee'} ๋ผ๊ณ ๋งŒ ๋ณด์ด๋Š”..........
๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค ์•„๋ž˜์— prototype ์„ ํด๋ฆญํ•ด์„œ ๋ณด๋ฉด school: 'seoul' ๋„ ๋ณด์ด๋Š” ๋งค์ง!

์šฐ๋ฆฌ๊ฐ€ ํ•™์ƒ1์„ ์ง์ ‘์ ์œผ๋กœ ๊ฑด๋“  ์ ์€ ์—†์ง€๋งŒ, ๊ทธ ๋ถ€๋ชจ์˜ ์œ ์ „์ž์— shcool: 'seoul' ์„ ๋„ฃ์–ด์คŒ์œผ๋กœ์จ, ๊ทธ ์œ ์ „์ž์— ์˜ํ•ด ์ž์‹๋“ค๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. (์ฃผ์˜ํ•  ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด, prototype์œผ๋กœ ์ถ”๊ฐ€๋œ ๊ทธ ๋ฐ์ดํ„ฐ๋Š” ๋ถ€๋ชจ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ž์‹๋“ค์ด ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ!)

๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฑธ๊นŒ? ์ด๊ฑด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋ฉด ์‰ฌ์šด๋ฐ, JS๋Š” ์˜ค๋ธŒ์ ํŠธ์—์„œ ์ž๋ฃŒ๋ฅผ ๋ฝ‘์„ ๋•Œ ์˜ค๋ธŒ์ ํŠธ ์•ˆ์— ๊ทธ ์ž๋ฃŒ๊ฐ€ ์—†์œผ๋ฉด ๊ทธ ๋…€์„์˜ ๋ถ€๋ชจ๋‹˜ํ•œํ…Œ๊นŒ์ง€ ๊ฐ„๋‹ค. ๊ทธ ๋ถ€๋ชจ๋‹˜๋„ ์—†์œผ๋ฉด ๊ทธ ์ฆ์กฐ๋ถ€ํ•œํ…Œ๋„ ๊ฐ€๊ณ , ์—†์œผ๋ฉด ๊ณ ์กฐ๋ถ€ํ•œํ…Œ๋„ ๊ฐ„๋‹ค. ๋๊นŒ์ง€ ๊ฐ„๋‹ค.

์ด๊ฑธ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ด์ œ ๊ทธ๋™์•ˆ ์šฐ๋ฆฌ๊ฐ€ Array์—์„œ .sort(), .map() ๋“ฑ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ง์ ‘ ๋„ฃ์–ด์ค€ ๊ฒŒ ์•„๋‹Œ๋ฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์„๊นŒ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

const arr1=[1,2,3] // ๋ณดํ†ต ์šฐ๋ฆฌ๊ฐ€ ํŽธํ•˜๊ฒŒ ๋ฐฐ์—ด ๋งŒ๋“œ๋Š” ๋ฐฉ์‹
const arr1= new Array(1,2,3) // ๊ทผ๋ฐ ์ปดํ“จํ„ฐ๋Š” ํ•ญ์ƒ ์ด๋Ÿฐ์‹์œผ๋กœ ์ดํ•ดํ•จ

new ํ‚ค์›Œ๋“œ ์จ์„œ ๋งŒ๋“œ๋Š” ๊ฑธ ๋ณด๋‹ˆ ์—‡ ๋ฐฉ๊ธˆ ์œ„์—์„œ ์˜ค๋ธŒ์ ํŠธ ์ฐ์–ด๋‚ผ ๋•Œ ์“ฐ๋˜ ๊ฑฐ๋ž‘ ๋˜‘๊ฐ™๋„ค? ๋ผ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค. ์‚ฌ์‹ค ์ € Array๋ผ๋Š” ๊ฒƒ์˜ prototype์—๋Š” .filter(), .length(), .forEach(),...๋“ฑ๋“ฑ์œผ๋กœ ๊ฐ€๋“์ฐจ์žˆ๊ณ , ๊ทธ๊ฒƒ์˜ ์ž์‹๋“ค์„ ์šฐ๋ฆฌ๊ฐ€ ์ฐ์–ด๋‚ด๋ฉด ๋‹ค ์œ ์ „์ž ๋•Œ๋ฌธ์— ์“ธ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

๊ทธ๋™์•ˆ mdn์— ๋‚˜์˜ค๋Š” prototype.์ €๊ฒŒ ์ด๋Ÿฐ ๋œป์ด์—ˆ๊ตฌ๋‚˜...ํ•˜๋Š” ๊ฑธ ์ด์ œ์•ผ ์•Œ๊ฒŒ ๋˜๋Š” ์ˆœ๊ฐ„(!)

constructor VS prototype

๊ทธ๋Ÿผ ๋‘˜์€ ๋ฌด์Šจ ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ?
constructor ๋กœ ์ƒ์†์‹œํ‚ค๋ฉด ์ž์‹์€ ์ง์ ‘ ๊ทธ ๊ฐ’์„ ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ ,
prototype ์œผ๋กœ ์ƒ์†์‹œํ‚ค๋ฉด ์ž์‹์€ ์ง์ ‘ ๊ทธ ๊ฐ’์„ ๊ฐ€์ง€์ง€๋Š” ๋ชปํ•œ๋‹ค. ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฑธ ์ฐธ์กฐํ•ด์„œ ์“ธ ์ˆ˜๋Š” ์žˆ๊ฒ ์ง€๋งŒ.

prototype์€ constructor ํ•จ์ˆ˜์—๋งŒ ์ƒ์„ฑ๋œ๋‹ค

prototype์€ ์ผ๋ฐ˜ object,array์—๋„ ์ƒ๊ธฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์œ„์—์„œ ๋ณธ 'Student', 'Student1' 'Array' ์ด๋ ‡๊ฒŒ ์ฐ์–ด๋‚ด๋Š” ๋…€์„๋“ค์—๋งŒ ์ƒ๊ธฐ๋Š” ๊ฑฐ๋‹ค.์ผ๋ฐ˜ object ๊ฐ™์€ ๊ฑฐ ์ƒ์†์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด constructor / class ๊ฐ™์€ ๊ฑฐ ์“ฐ๋ฉด ๋œ๋‹ค.

Student.prototype.school='seoul'

Student๊ฐ€ ์•„๋‹Œ ํ•™์ƒ1์—๊ฒŒ prototype ์“ฐ๋ฉด ์ƒˆ๋นจ๊ฐ„ ์—๋Ÿฌ๋ฅผ ๋‚ด๋ฑ‰๋Š”๋‹ค...ํฅ

ํ•™์ƒ1.prototype.school='seoul' //Error~!~!~!~!~!~!!!!!!!

๋‚ด ๋ถ€๋ชจ๋‹˜์˜ ์œ ์ „์ž๋ฅผ ์ฐพ์•„์ฃผ์„ธ์š”: proto

๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ์ž์‹๋“ค์€ __proto__๋ผ๋Š” ์†์„ฑ์ด ์ƒ๊ธฐ๋Š”๋ฐ, ์ด๊ฑธ ํด๋ฆญํ•˜๋ฉด ๋ถ€๋ชจ์˜ prototype์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

console.log(ํ•™์ƒ1.__proto__)  <-- ์ด๊ฑฐ๋ž‘
console.log(Student.prototype)  <-- ์ด๊ฑฐ๊ฐ€ ๊ฐ™์€ ๋ง์ด๋‹ค.

์ด๊ฑธ ์ž˜ ์กฐ์ž‘ํ•˜๋ฉด ์ƒ์†๊ธฐ๋Šฅ์„ ๋ถ€๋ชจ๋‹˜์„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด

const score={
  math: 100
}

๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•™์ƒ1ํ•œํ…Œ ์œ ์ „์ž๋กœ ์ฃผ๋Š” ๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ฒ ๋‹ค.

ํ•™์ƒ1.__proto__ = score;
console.log(ํ•™์ƒ1.math) // 100

Object.getPrototypeOf()

()์•ˆ์— ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋„ฃ์œผ๋ฉด ๊ทธ์˜ ๋ถ€๋ชจ prototype์„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ์„œ, __proto__ ์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

extends

์ด์ „ class์—์„œ ๋งŒ๋“  ๊ฒƒ๊ณผ ์™„์ „ ๋˜‘๊ฐ™์ง„ ์•Š๊ณ  ๋น„์Šทํ•œ class๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค๊ณ  ์‹ถ์€๋ฐ, class ์ฝ”๋“œ๋ฅผ ๋‹ค ๊ฐ€์ ธ๋‹ค๊ฐ€ ๋ณต๋ถ™ํ•˜๋ ค๋‹ˆ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ง€์ €๋ถ„ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ extends๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ..!

class ํ• ์•„๋ฒ„์ง€{
  constructor(์ด๋ฆ„){
    this.name=์ด๋ฆ„
    this.gender='๋‚จ์„ฑ'
  }
}
class ์•„๋ฒ„์ง€ extends ํ• ์•„๋ฒ„์ง€{
  constructor(๋‚˜์ด){
    this.age=๋‚˜์ด
  }
}  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•„๋ฒ„์ง€ ํด๋ž˜์Šค๋Š” ํ• ์•„๋ฒ„์ง€ ํด๋ž˜์Šค๋„ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์“ธ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค. ํ๋ญ‡ํ•˜๊ฒŒ const ์•„๋ฒ„์ง€1=new ์•„๋ฒ„์ง€()๋ฅผ ๋งŒ๋“ค๊ณ  ์ฝ˜์†”์„ ์ฐ์–ด๋ณธ ๊ฒฐ๊ณผ..
super()๊ฐ€ ์—†๋‹ค๋ฉฐ ๋‚œ๋ฆฌ๋ฅผ ์นœ๋‹ค.
์ž ๋‹ค์Œ์€ ๊ทธ๋ƒฅ ์•”๊ธฐ๋‹ค.

class ์•„๋ฒ„์ง€ extends ํ• ์•„๋ฒ„์ง€{
  constructor(์ด๋ฆ„,๋‚˜์ด){
    super(์ด๋ฆ„);
    this.age=๋‚˜์ด
  }
}  

ํ• ์•„๋ฒ„์ง€ class์˜ constructor() ๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด super() ๋ฅผ ์จ์•ผ ํ•œ๋‹ค. ์ด๊ฑด ์ดํ•ด๊ณ  ์ž์‹œ๊ณ  ๊ทธ๋ƒฅ ์™ธ์šฐ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ํŽธ์•ˆํ•˜๊ฒŒ ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. ์œ„์—์„œ ํ• ์•„๋ฒ„์ง€ class constructor์—์„œ ์“ฐ๋˜ ์ด๋ฆ„ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ณ ๋Œ€๋กœ ์•„๋ฒ„์ง€ constructor()์นธ์— ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

ํ•จ์ˆ˜ ์ถ”๊ฐ€

class ํ• ์•„๋ฒ„์ง€{
  constructor(์ด๋ฆ„){
    this.name=์ด๋ฆ„
    this.gender='๋‚จ์„ฑ'
  }
  sayHi(){
    console.log(`i'm your grandfather`)
    }            
}
class ์•„๋ฒ„์ง€ extends ํ• ์•„๋ฒ„์ง€{
 constructor(์ด๋ฆ„,๋‚˜์ด){
    super(์ด๋ฆ„);
    this.age=๋‚˜์ด
  }
}  
const ์•„๋ฒ„์ง€1 = new ์•„๋ฒ„์ง€();
์•„๋ฒ„์ง€1.sayHi() //i'm your grandfather

๊ทผ๋ฐ ์ด sayHiํ•จ์ˆ˜๊ฐ€ ๋„ˆ~~๋ฌด ์œ ์šฉํ•œ ๋‚˜๋จธ์ง€ ์•„๋ฒ„์ง€ ํด๋ž˜์Šค์— ๊ฐ€์ ธ์™€์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

class ์•„๋ฒ„์ง€ extends ํ• ์•„๋ฒ„์ง€{
 constructor(์ด๋ฆ„,๋‚˜์ด){
    super(์ด๋ฆ„);
    this.age=๋‚˜์ด
  }
 sayHello(){
    super.sayHi() //i'm your grandfather
 	console.log(`I'm your father`)
 }
}  
์•„๋ฒ„์ง€1.sayHello() // i'm your grandfather
                 // I'm your father ์ด๋ ‡๊ฒŒ ๋‘ ์ค„์ด ๋‚˜์˜จ๋‹ค.

getter/ setter

const hana = {
  name: "hyewon",
  age: 27,
  nextAge() {
    this.age + 1;
  },
};

๋‚ด๋…„ ๋‚˜์ด ๊ตฌํ•˜๋Š”๊ฑด hana.nextAge()๋ฅผ ์“ฐ๋“  hana.age+1 ๋ฅผ ์“ฐ๋“  ์ง€๊ธˆ์€ ๋ณ„๋ฐ˜ ์ฐจ์ด๊ฐ€ ์—†์–ด๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•œ ๊ตฌ์กฐ์˜€๋‹ค๋ฉด?
hana.age[3].age[6].์–ด์ฉŒ๊ตฌ๋กœ ๊บผ๋‚ด๋Š” ๊ตฌ์กฐ์˜€์œผ๋ฉด ๊บผ๋‚ด์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“์€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒŒ ํ›จ์”ฌ ํŽธํ•  ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ์•ˆ์— ๋“ค์€ ๋ฐ์ดํ„ฐ ์ˆ˜์ •์„ ๊ฐ€ํ•  ๋•Œ age๋Š” ๋”ฑ ๋ด๋„ ์ˆซ์ž๋งŒ ๋ฐ›๋Š” ๋…€์„์ธ๋ฐ hana.age='28'์ด๋ผ๊ณ  ํ•ด๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ตฌ๋ณ„์—†์ด ๋‹ค ๋ฐ›์•„์ค€๋‹ค. ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์•ˆ์ „์žฅ์น˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์ฒ˜๋Ÿผ.

const hana = {
  name: "hyewon",
  age: 27,
  setAge(๋‚˜์ด) {
    this.age = Number(๋‚˜์ด) // ๋ฌด์กฐ๊ฑด ์ˆซ์ž๋งŒ ์ถœ๋ ฅ๋˜๊ฒŒ ํ•จ
  },
};
hana.setAge('323') // 323 <- ์ˆซ์ž๋ฟ…!

์ผ์ผ์ด () ์“ฐ๊ธฐ ๊ท€์ฐฎ์œผ๋ฉด get/set ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์œ„ ์˜ˆ์‹œ๋ž‘ ๋‹ค ๋˜‘๊ฐ™์€๋ฐ ์ด์™•์ด๋ฉด class์—์„œ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ๋‹ค.

const Hana {
  constructor(){
    name: "hyewon",
    age: 27
  }
    set setAge(๋‚˜์ด) { //๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •/์ž…๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
      this.age = Number(๋‚˜์ด) 
    },
    get nextAge(){ //๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”/๋ฝ‘์•„์˜ค๋Š” ํ•จ์ˆ˜
      return this.age+1
    }
  }
};
hana.setAge = 323 
hana.nextAge;

set์ด ๋ถ™์€ ํ•จ์ˆ˜๋“ค์€ setter๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ set(์ˆ˜์ •ํ•˜๋Š”) ํ•จ์ˆ˜.
setter๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•œ๊ฐœ ์กด์žฌํ•ด์•ผํ•œ๋‹ค.
get์ด ๋ถ™์€ ํ•จ์ˆ˜๋“ค์€ getter๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ get(๊ฐ€์ ธ์˜ค๋Š”) ํ•จ์ˆ˜.
getter๋Š” ๊ทธ๋ƒฅ ์ €์žฅ๋˜์–ด์žˆ๋Š”๊ฑฐ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋งŒ ์˜ฌ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์–ด๋–ค ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ํ•„์š”์—†๋‹ค. return๋งŒ ์ž˜ ํ•ด๋‘๋ฉด ๋œ๋‹ค.


  • ์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ
    class๋กœ ์˜ค๋ธŒ์ ํŠธ ์ฐ์–ด๋‚ด๋Š” ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
    prototype์œผ๋กœ ๋ถ€๋ชจ๋‹˜ ์ฐพ๊ธฐ์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
    extends, super๋กœ ์œ ์‚ฌํ•œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋” ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
    getter๋Š” ๋ฆฌํ„ด๋งŒ ์ž˜ํ•˜๊ธฐ/ setter๋Š” ์ˆ˜์ •,์ž…๋ ฅํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ ํŒŒ๋ผ๋ฏธํ„ฐ ํ•œ ๊ฐœ ๊ผญ ์ž…๋ ฅํ•˜๊ธฐ.

  • ์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ๋“ค ์ค‘ ๊ถ๊ธˆํ•˜๊ฑฐ๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ
    class๋ฅผ ์“ฐ๊ณ ๋‚˜๋‹ˆ ์ด์ œ this์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.
    getter/setter ๋ฅผ ๋ฐฐ์šฐ๋‹ˆ immutability์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.
    ์—ฐ์Šต๋ฌธ์ œ ํ’€๋ฉด์„œ sort() ํ•จ์ˆ˜ ์ •๋ ฌํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

  • ์˜ค๋Š˜์˜ ์†Œ๊ฐ

์™ธ์šธ ๊ฑฐ ์™ค์ผ€ ๋งŽ๋ƒ๊ณ !!!~!~!~!! ๋‚ ์”จ๋Š” ์™œ ์ข‹์€ ๊ฑฐ๋ƒ๊ณ ~!~!!!!

profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

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