🍎객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° (3) Constructor

πŸ‘œμ—λ₯΄λ©”μŠ€

https://dev-seolleung2.netlify.app/development/OOP-part2/

λ°”λ‘œ μ „ κΈ€μ—μ„œ λ§Œλ“  μ„œλžμž₯은 말 κ·ΈλŒ€λ‘œ κ°€λ‚΄ μˆ˜κ³΅μ—… 에λ₯΄λ©”μŠ€ λ‹€.

ν•œλ•€ν•œλ•€ μ„œλžμž₯의 name, record κ°€ 뭔지 μ •μ„±μŠ€λŸ½κ²Œ λ§Œλ“€μ—ˆλ‹€. μ„œλžμž₯ ν•˜λ‚˜λ‹Ή κΈ°λ³Έ 500λ§Œμ›μ„ ν˜Έκ°€ν•œλ‹€.

let cutiehany = {
  name: 'hany kim',
  first_record: 10, //첫 번째 κ²Œμž„μ˜ μŠ€μ½”μ–΄
  second_record: 20, //두 번째 κ²Œμž„μ˜ μŠ€μ½”μ–΄
  sum: function() {
    return this.first_record + this.second_record;
  },
}

console.log("κ²Œμž„μŠ€μ½”μ–΄μ˜ 합계 :" , cutiehany.sum())
κ²Œμž„μŠ€μ½”μ–΄μ˜ 합계 : 30

κ²Œμž„ λ‘νŒ ν”Œλ ˆμ΄ν•œ μœ μ €λ₯Ό 일일이 1μ–΅κ°œ λ§Œλ“€ 수 μžˆμ„κΉŒ? ν•  수 μžˆλ‹€.

그런데 기껏 λ‹€ λ§Œλ“€μ–΄ λ†¨λŠ”λ° ν”Œλ ˆμ΄ν•œ κ²Œμž„μ˜ μ„Έλ²ˆμ§Έ 기둝 (third_record) 을 μΆ”κ°€ν•˜λΌκ³  ν•œλ‹€λ©΄,

고생도 이런 κ°œκ³ μƒμ΄ μ—†λŠ”κ±°λ‹€.. 1μ–΅κ°œμ˜ 객체 에 각각 일일이 λΆ€λž΄λΆ€λž΄ μΆ”κ°€ν•΄ μ€˜μ•Ό ν•˜κ³  return 문도 손봐야 ν•˜λ‹ˆκΉŒ 말이닀.

λ°”λ‘œ 이런 λΆˆνŽΈν•¨ λ•Œλ¬Έμ— μœ μ € 정보λ₯Ό μ°μ–΄λ‚΄λŠ” 곡μž₯을 λ§Œλ“€κ±°κ³ ,

그리고 κ·Έ 곡μž₯을 톡해 μ„œλžμž₯ (객체) 을 λŒ€λŸ‰ μ–‘μ‚°ν•  κ±°λ‹€.

⏰new Date() 둜 μ•Œμ•„λ³΄λŠ” 객체 μ–‘μ‚°μ˜ 사둀

let dateInfo = new Date('2020-10-28')

dateInfo
Wed Oct 28 2020 09:00:00 GMT+0900 (λŒ€ν•œλ―Όκ΅­ ν‘œμ€€μ‹œ)
dateInfo.getFullYear()
2020
dateInfo.getDay()
3 // μˆ˜μš”μΌμ„ 의미

ν˜„μž¬λ‚ μ§œλ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ‹΄μ•„μ„œ ν˜„μž¬ λ‚ μ§œλ₯Ό 데이터, μƒνƒœλ‘œ 가지고 μžˆλŠ” 객체가 λ§Œλ“€μ–΄μ Έ dateInfo 에 λ‹΄κ²Όλ‹€.

맨 μœ„μ˜ 객체와 λ‹€λ₯΄κ²Œ 객체의 섀계도가 λ…ΈμΆœλ˜μ§€ μ•Šμ•˜λ‹€.

이λ₯Ό 톡해 new λ₯Ό λΆ™μ˜€μ„ λ•Œ 객체λ₯Ό λ§Œλ“€μ–΄μ„œ 리턴 ν•΄ μ£Όκ³  μžˆλŠ” 것 κ°™λ‹€.

μ•„κΉŒ λ§Œλ“€μ—ˆλ˜ κ°€λ‚΄ μˆ˜κ³΅μ—… 객체도 μ €λŸ°μ‹μœΌλ‘œ 미리 곡μž₯을 λ§Œλ“€μ–΄ 놓고 μƒμ‚°ν•œλ‹€λ©΄ μ½”λ“œλ„ 깨끗해지고 μ΄λ”°κΈˆ 곡μž₯μž₯의 λ³€λ•μœΌλ‘œ 곡μž₯ 라인변경을 톡해, λ§Œλ“€μ–΄μ§€λŠ” λͺ¨λ“  객체가 μžλ™μœΌλ‘œ λ‹€λ₯΄κ²Œ 생성될 것이닀.

🏭Factory λ§Œλ“€κΈ°

μœ„μ— λ§Œλ“  let dateInfo = new Date(β€˜2020-10-28’) λ₯Ό 보면 마치 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ λͺ¨μ–‘ κ°™λ‹€.

μ‹€μ œ ν•¨μˆ˜κ°€ λ§žλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 곡μž₯을 ν•œλ²ˆ λ§Œλ“€μ–΄ λ³Έλ‹€.

function UserInfo() { // UserInfo() λΌλŠ” ν•¨μˆ˜λ₯Ό 톡해 λ§Œλ“€μ–΄μ§„ 객체, this!
  this.name = 'hany kim' // κ·Έλž˜μ„œ μ†μ„±λ§ˆλ‹€ this λ₯Ό μ•žμ— λΆ™μ΄λŠ” κ±°λ‹€.
  this.first_record = 10;
  this.second_record = 20;
  this.third_record = 30;
  this.sum = function() {
    return this.first_record + this.second_record + this.third_record;
  }
}

console.log("μœ μ € 정보 :", UserInfo());
μœ μ € 정보 : undefined

μœ μ € 정보가 undefined κ°€ λœ¬λ‹€. 아무 것도 λ¦¬ν„΄ν•˜λŠ” 것이 μ—†λ‹€.

πŸŽ‰λ§ˆλ²•μ˜ ν‚€μ›Œλ“œ new, 그리고 Constructor

UserInfo() μ•žμ— new λΌλŠ” ν‚€μ›Œλ“œλ₯Ό 뢙이면 μ™„μ „νžˆ λ‹€λ₯Έ μ‘΄μž¬κ°€ λœλ‹€. UserInfo λΌλŠ” 객체가 λ”± λ§Œλ“€μ–΄ 진닀.

new κ°€ 뢙지 μ•Šμ€ UserInfo() λŠ” κ·Έλƒ₯ ν•¨μˆ˜μ΄μ§€λ§Œ

new κ°€ 뢙은 new UserInfo() λŠ” 객체λ₯Ό μƒμ„±ν•˜λŠ” β€œμƒμ„±μžβ€ (Constructor) κ°€ λœλ‹€.

μƒμ„±μž ν•¨μˆ˜λΌκ³  λΆ€λ₯΄κΈ°λ„ ν•œλ‹€.

console.log("μœ μ € 정보 :", new UserInfo());
μœ μ € 정보 :
UserInfo {name: "hany kim", first_record: 10, second_record: 20, third_record: 30, sum: Ζ’}
first_record: 10
name: "hany kim"
second_record: 20
sum: Ζ’ ()
third_record: 30
__proto__: Object

이제 μœ μ €λ₯Ό λ‘κ°œ μ–‘μ‚°ν•΄ 보자.

let seolleung2 = new UserInfo(); let insoozzang = new UserInfo();

μ–Όλ ˆ? 두 μœ μ €μ˜ 점수 합계가 κ°™κ²Œ λ‚˜μ˜¨λ‹€?

seolleung2.sum() 60 insoozzang.sum() 60

constructor λ‚΄λΆ€μ μœΌλ‘œ λ™μΌν•œ μƒνƒœμ΄λ―€λ‘œ μƒμ„±μž ν•¨μˆ˜ λ‚΄ μΈμžμ— λ‹€λ₯Έ 정보λ₯Ό νƒœμ›Œ 보내야 ν•œλ‹€.

let seolleung2 = new UserInfo('seolleung2', 10, 20, 30)
let insoozzang = new UserInfo('insoozzang', 10, 10, 10)

그리고 곡μž₯에 constructor 도 μˆ˜μ •ν•΄ μ€˜μ•Ό ν•œλ‹€.

function UserInfo(name, first, second, third) {
  this.name = name
  this.first_record = first
  this.second_record = second
  this.third_record = third
  this.sum = function() {
    return this.first_record + this.second_record + this.third_record
  }
}

μœ„μ˜ ν•¨μˆ˜λŠ” constructor function 이라 λΆ€λ₯΄κΈ°λ„ ν•œλ‹€.

그리고 점수의 합계가 λ‹€λ₯΄κ²Œ λ‚˜μ˜€λŠ” 것을 확인해 λ³Ό 수 μžˆλ‹€.

seolleung2.sum() 60 insoozzang.sum() 30

λ­”κ°€ μ»¨μŠ€νŠΈλŸ­ν„° ν•¨μˆ˜λŠ” λ§Œλ“€μ–΄μ§ˆ 객체의 속성을 μ •μ˜ν•˜λ©΄μ„œ 초기의 값을 지정해 λ†“λŠ” ν˜•νƒœμΈ 것 κ°™λ‹€.

πŸŽ†μ΄κ±° λ§Œλ“€λ©΄ 뭐가 μ’‹μ•™?

수곡예 에λ₯΄λ©”μŠ€ μž₯인은 λ§Œλ“€ λ•Œλ§ˆλ‹€ 객체λ₯Ό λ‹€μ‹œ 지정해 μ€˜μ•Ό ν•˜λŠ”λ° constructor function 을 λ§Œλ“€λ©΄ μ•žμ— new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ 객체가 μ–‘μ‚°λœλ‹€.

그리고 μƒμ„±μž ν•¨μˆ˜μ˜ λ‚΄μš©μ„ λ°”κΎΈλ©΄ (생산라인을 λ°”κΎΈλ©΄) κ·Έ ν•¨μˆ˜μ— μ˜ν•΄ λ§Œλ“€μ–΄μ§€λŠ” λͺ¨λ“  객체가 ν•œ λ²ˆμ— λ°”λ€Œμ–΄ μƒμ‚°λ˜λŠ” 폭발적인? 효과λ₯Ό μ–»κ²Œ λœλ‹€.


Written by@[DotoriMook]
ν”„λ‘ νŠΈμ—”λ“œ μ£Όλ‹ˆμ–΄ 개발자 λ„ν† λ¦¬λ¬΅μ˜ 기술개발 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

GitHubMediumTwitterFacebook