[๐ŸŒณjavascript] data reference type/ constructor/

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

๐ŸŒณjavascript

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

ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด object๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

let ์ด๋ฆ„์ž…๋‹ˆ๋‹ค ={ name:'lee'}
function ๋ณ€๊ฒฝ(obj){
  obj={name:'cho'}
}
๋ณ€๊ฒฝ(์ด๋ฆ„์ž…๋‹ˆ๋‹ค)

์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ณ€๊ฒฝ(์ด๋ฆ„์ž…๋‹ˆ๋‹ค) ๊ฐ’์œผ๋กœ 'lee'๋กœ ๋ฐ”๋€Œ.....์ง€ ์•Š๋Š”๋‹ค.
์™œ??

ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ผ์ข…์˜ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง€๋Š” ์กด์žฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ obj ํŒŒ๋ผ๋ฏธํ„ฐ ์ž๋ฆฌ์— ์ด๋ฆ„์ž…๋‹ˆ๋‹ค ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด ๋ณ€๊ฒฝ(์ด๋ฆ„์ž…๋‹ˆ๋‹ค)๋ผ๋Š”๊ฑด๋ณ€๊ฒฝ(let obj=์ด๋ฆ„์ž…๋‹ˆ๋‹ค)์™€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

let ์ด๋ฆ„์ž…๋‹ˆ๋‹ค ={ name:'lee'} // 'lee'๋ฅผ ๋ฐ”๋ผ๋ด„

๋ณ€๊ฒฝ(let obj=์ด๋ฆ„์ž…๋‹ˆ๋‹ค) // 'lee'๋ฅผ ๋ฐ”๋ผ๋ด„

constructor

const ํ•™์ƒ={
  name:'LEE',
  age:20,
} 

๊ฐ€ ์žˆ๋‹ค. ๊ทผ๋ฐ ์ด๋Ÿฐ ๊ฐ์ฒด๋ฅผ ๋” ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒƒ์ด๋‹ค.

const ํ•™์ƒ2={...ํ•™์ƒ}

object ํƒ€์ž…์€ = ๋งŒ ์ด์šฉํ•ด์„œ ๊ทธ๋ƒฅ ๋ณต์‚ฌํ•˜๋ฉด ์•„์ฃผ ํฐ์ผ์ด ๋‚œ๋‹ค. ์ด๊ฑด ํ™”์‚ดํ‘œ๋งŒ ์†์— ๊ผญ ์ฅ์–ด์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด๊ฐ€ ์ง„์งœ ์ˆ˜์ •ํ•œ ๊ฒŒ ์•„๋‹Œ๋ฐ ์ˆ˜์ •์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ€์‹  ...์ด์šฉํ•ด์„œ ์•„์˜ˆ ์ƒˆ๋กœ์šด ๊ฐ’ ๋งŒ๋“œ๋Š” ๋ฒ•์„ ๋ฐฐ์› ์—ˆ๋‹ค.
๊ทผ๋ฐ ์ด๋Ÿฐ ๊ฑธ 5๋ฐฑ๊ฐœ ์ •๋„ ๋งŒ๋“ค๊ณ  ์‹ถ๋„ค....? ๊ทธ๋Ÿผ ์ด์ œ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งŒ๋“ค๋‹ค๊ฐ€๋Š” ๋‚ด ์†๋ชฉ์ด๋ž‘ ๊ทธ๋‚  ์ž‘๋ณ„์ธ์‚ฌํ•˜๋Š”๊ฑฐ๋‹ค. ๋‚˜์˜ ์†๋ชฉ์€ ์†Œ์ค‘ํ•˜๋‹ˆ๊ป˜ ์˜ค๋Š˜์€ object๋“ค์„ ์—ด์‹ฌํžˆ ์ฐ์–ด๋‚ด๋Š” ๊ธฐ๊ณ„(constructor)์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

constructor ๋งŒ๋“ค ๋• function()์ด๋ผ๋Š” ํ•จ์ˆ˜ ๋งŒ๋“œ๋Š” ํ‚ค์›Œ๋“œ์™€ this ๋งŒ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  constructor ์ด๋ฆ„์€ ๊ด€์Šต์ ์œผ๋กœ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ด์ค€๋‹ค. (๋ณดํ†ต์˜ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๋‹ค๋Š” ์˜๋ฏธ๋กœ)

function Student(){
  this.name='LEE',
  this.age=20,
}

const ํ•™์ƒ1=new Student()
const ํ•™์ƒ2=new Student()

์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๋ฉด ์ด์ œ ํ•™์ƒ1๋„,ํ•™์ƒ2๋„ ์œ„์—์„œ ๋งŒ๋“  ํ•™์ƒ์ด๋ž‘ ๋˜์˜ค์˜ค์˜ฅ๊ฐ™์€ ๊ฐ์ฒด์•ˆ์˜ ์ž๋ฃŒ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๊ฐ€ ๋˜์—ˆ๋‹ค.
๋งŒ์•ฝ ํ•™์ƒ ์•ˆ์— ํ•จ์ˆ˜๋„ ์žˆ์—ˆ๋‹ค๋ฉด, ํ•จ์ˆ˜๋„ constructor ์•ˆ์— ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
์ฐธ๊ณ -> ๊ฐ์ฒด ์ž๋ฃŒ ์•ˆ์— ํ•จ์ˆ˜ ๋„ฃ๋Š” ๋ฒ•

const ํ•™์ƒ={
  name:'LEE',
  age:20,
  sayHi(){}
} 

ํ˜น์€

const ํ•™์ƒ={
  name:'LEE',
  age:20,
  sayHi: function (){}
} 

๋‘˜ ์ค‘ ์›ํ•˜๋Š” ๊ฑธ๋กœ ๊ณจ๋ผ์„œ ์ž˜ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
์–ด์จŒ๋“  ํ•จ์ˆ˜๋ฅผ ๊ฐ์ฒด ์•ˆ์— ์ž˜ ๋„ฃ์—ˆ์œผ๋ฉด, constructor ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

function Student(){
  this.name='LEE',
  this.age=20,
  this.sayHi=function(){
  console.log(this.name+'์ด๋ผ๊ณ ํ•ด')}
}
const ํ•™์ƒ1=new Student()
const ํ•™์ƒ2=new Student()

๊ทผ๋ฐ ์ฃ„๋‹ค ๋˜‘๊ฐ™์€ ์ž๋ฃŒ๋งŒ ๋งŒ๋“ค๋ฉด ์žฌ๋ฏธ์—†์œผ๋‹ˆ, ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์—์„œ value ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฃผ๊ณ  ์‹ถ์œผ๋ฉด ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

function Student(์ด๋ฆ„,๋‚˜์ด){
  this.name=์ด๋ฆ„,
  this.age=๋‚˜์ด,
  this.sayHi=function(){
  console.log(this.name+'์ด๋ผ๊ณ ํ•ด')}
}
const ํ•™์ƒ1=new Student('Jo',28)
const ํ•™์ƒ2=new Student('Kim',27)
profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

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