17μž₯. μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•œ 객체 생성

2025. 2. 28. 16:27Β·πŸ“™ λͺ¨λ”₯λ‹€

λͺ¨λ”₯λ‹€

 

βœ… μƒμ„±μž ν•¨μˆ˜(constructor)


- new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜μ—¬ 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§ν•œλ‹€.

  μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•΄ μƒμ„±λœ 객체λ₯Ό μΈμŠ€ν„΄μŠ€(instance)라 ν•œλ‹€.

const person = new Object();

person.name = "Lee";
person.sayHello = function() {
  console.log("Hi! My name is " + this.name);
};

console.log(person); // {name: "Lee", sayHello: f}
person.sayHello(); // Hi! My name is Lee

 

- 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법은 객체 λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜λŠ” 것이 더 κ°„νŽΈν•˜λ‹€.

  Object μƒμ„±μž ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ 객체λ₯Ό μƒμ„±ν•˜λŠ” 방식은 νŠΉλ³„ν•œ μ΄μœ κ°€ μ—†λ‹€λ©΄ κ·Έλ‹€μ§€ μœ μš©ν•΄ 보이지 μ•ŠλŠ”λ‹€.

  (ν•˜μ§€λ§Œ 객체 λ¦¬ν„°λŸ΄μ— μ˜ν•œ 객체 생성 방식은 단 ν•˜λ‚˜μ˜ 객체만 μƒμ„±ν•œλ‹€. λ”°λΌμ„œ λ™μΌν•œ ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ” 객체λ₯Ό μ—¬λŸ¬ 개 생성해야 ν•˜λŠ” 경우 맀번 같은 ν”„λ‘œνΌν‹°λ₯Ό κΈ°μˆ ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μ΄λ‹€.)

 

βœ… μΈμŠ€ν„΄μŠ€ 생성과 this 바인딩


- μ•”λ¬΅μ μœΌλ‘œ 빈 객체가 μƒμ„±λœλ‹€. 이 빈 객체가 λ°”λ‘œ (아직 μ™„μ„±λ˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ) μƒμ„±μž ν•¨μˆ˜κ°€ μƒμ„±ν•œ μΈμŠ€ν„΄μŠ€λ‹€.

  그리고 μ•”λ¬΅μ μœΌλ‘œ μƒμ„±λœ 빈 객체, 즉 μΈμŠ€ν„΄μŠ€λŠ” this에 λ°”μΈλ”©λœλ‹€.

  μƒμ„±μž ν•¨μˆ˜ λ‚΄λΆ€μ˜ thisκ°€ μƒμ„±μž ν•¨μˆ˜κ°€ 생성할 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” μ΄μœ κ°€ λ°”λ‘œ 이것이닀.(이 μ²˜λ¦¬λŠ” ν•¨μˆ˜ λͺΈμ²΄μ˜ μ½”λ“œκ°€ ν•œ 쀄씩 μ‹€ν–‰λ˜λŠ” λŸ°νƒ€μž„ 이전에 μ‹€ν–‰λœλ‹€)

 

- λ§Œμ•½ thisκ°€ μ•„λ‹Œ λ‹€λ₯Έ 객체λ₯Ό λͺ…μ‹œμ μœΌλ‘œ λ°˜ν™˜ν•˜λ©΄ thisκ°€ λ°˜ν™˜λ˜μ§€ λͺ»ν•˜κ³  return 문에 λͺ…μ‹œν•œ 객체가 λ°˜ν™˜λœλ‹€.

  (ν•˜μ§€λ§Œ λͺ…μ‹œμ μœΌλ‘œ μ›μ‹œ 값을 λ°˜ν™˜ν•˜λ©΄ μ›μ‹œ κ°’ λ°˜ν™˜μ€ λ¬΄μ‹œλ˜κ³  μ•”λ¬΅μ μœΌλ‘œ thisκ°€ λ°˜ν™˜λœλ‹€)

 

- 이처럼 μƒμ„±μž ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ thisκ°€ μ•„λ‹Œ λ‹€λ₯Έ 값을 λ°˜ν™˜ν•˜λŠ” 것은 μƒμ„±μž ν•¨μˆ˜μ˜ κΈ°λ³Έ λ™μž‘μ„ ν›Όμ†ν•œλ‹€.

  λ”°λΌμ„œ μƒμ„±μž ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ return 문을 λ°˜λ“œμ‹œ μƒλž΅ν•΄μ•Ό ν•œλ‹€.

 

βœ… constructor와 non-constructor의 ꡬ뢄


- μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 ν•¨μˆ˜ μ •μ˜λ₯Ό ν‰κ°€ν•˜μ—¬ ν•¨μˆ˜ 객체λ₯Ό 생성할 λ•Œ ν•¨μˆ˜ μ •μ˜ 방식에 따라 ν•¨μˆ˜λ₯Ό constructor와 non-constructor둜 κ΅¬λΆ„ν•œλ‹€.

 

constructor: ν•¨μˆ˜ μ„ μ–Έλ¬Έ, ν•¨μˆ˜ ν‘œν˜„μ‹, 클래슀(ν΄λž˜μŠ€λ„ ν•¨μˆ˜λ‹€)

non-constructor: λ©”μ„œλ“œ(ES6 λ©”μ„œλ“œ μΆ•μ•½ ν‘œν˜„), ν™”μ‚΄ν‘œ ν•¨μˆ˜

function foo() {}

const bar = function() {};

const baz = {
  x: function() {}
};

new foo(); // -> foo {}
new bar(); // -> bar {}
new baz.x(); // -> x {}

const arrow = () => {};

new arrow(); // TypeError: arrow is not a constructor

const obj = {
  x() {}
};

new obj.x(); // TypeError: obj.x is not a constructor

 

βœ… new.target


- μƒμ„±μž ν•¨μˆ˜κ°€ new μ—°μ‚°μž 없이 ν˜ΈμΆœλ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ 파슀칼 μΌ€μ΄μŠ€ μ»¨λ²€μ…˜μ„ μ‚¬μš©ν•œλ‹€ ν•˜λ”λΌλ„ μ‹€μˆ˜λŠ” μ–Έμ œλ‚˜ λ°œμƒν•  수 μžˆλ‹€.

  μ΄λŸ¬ν•œ μœ„ν—˜μ„±μ„ νšŒν”Όν•˜κΈ° μœ„ν•΄ ES6μ—μ„œλŠ” new.target을 μ§€μ›ν•œλ‹€.

 

- new.target은 this와 μœ μ‚¬ν•˜κ²Œ constructor인 λͺ¨λ“  ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 암묡적인 μ§€μ—­ λ³€μˆ˜μ™€ 같이 μ‚¬μš©λ˜λ©° 메타 ν”„λ‘œνΌν‹°λΌκ³  λΆ€λ₯Έλ‹€.

 

 - new μ—°μ‚°μžμ™€ ν•¨κ»˜ μƒμ„±μž ν•¨μˆ˜λ‘œμ„œ 호좜되면 ν•¨μˆ˜ λ‚΄λΆ€μ˜ new.target은 ν•¨μˆ˜ μžμ‹ μ„ 가리킨닀. new μ—°μ‚°μž 없이 일반 ν•¨μˆ˜λ‘œμ„œ 호좜된 ν•¨μˆ˜ λ‚΄λΆ€μ˜ new.target은 undefinedλ‹€.

  λ”°λΌμ„œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ new.target을 μ‚¬μš©ν•˜μ—¬ new μ—°μ‚°μžμ™€ μƒμ„±μž ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœν–ˆλŠ”μ§€ ν™•μΈν•˜μ—¬ κ·Έλ ‡μ§€ μ•Šμ€ 경우 new μ—°μ‚°μžμ™€ ν•¨κ»˜ μž¬κ·€ν˜ΈμΆœμ„ 톡해 μƒμ„±μž ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœν•  수 μžˆλ‹€.

 

βœ… 빌트인 μƒμ„±μž ν•¨μˆ˜


- Object와 Function μƒμ„±μž ν•¨μˆ˜λŠ” new μ—°μ‚°μž 없이 ν˜ΈμΆœν•΄λ„ new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν–ˆμ„ λ•Œμ™€ λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€.

  ν•˜μ§€λ§Œ String, Number, Boolean μƒμ„±μž ν•¨μˆ˜λŠ” new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν–ˆμ„ λ•Œ String, Number, Boolean 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ³€ν™˜ν•˜μ§€λ§Œ new μ—°μ‚°μž 없이 ν˜ΈμΆœν•˜λ©΄ λ¬Έμžμ—΄, 숫자, λΆˆλ¦¬μ–Έ 값을 λ°˜ν™˜ν•œλ‹€.

  이λ₯Ό 톡해 데이터 νƒ€μž…μ„ λ³€ν™˜ν•˜κΈ°λ„ ν•œλ‹€.

'πŸ“™ λͺ¨λ”₯λ‹€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

31μž₯. RegExp(μ •κ·œ ν‘œν˜„μ‹)  (3) 2025.08.27
23μž₯. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(LexicalEnvironment와 VariableEnvironment)  (1) 2025.05.20
19μž₯. prototypeκ³Ό __proto__의 차이?  (0) 2025.05.06
16μž₯. ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ  (0) 2025.02.28
'πŸ“™ λͺ¨λ”₯λ‹€' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • 31μž₯. RegExp(μ •κ·œ ν‘œν˜„μ‹)
  • 23μž₯. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(LexicalEnvironment와 VariableEnvironment)
  • 19μž₯. prototypeκ³Ό __proto__의 차이?
  • 16μž₯. ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ
j2yonghwa
j2yonghwa
Trying to be a fullstack developer πŸš€
  • j2yonghwa
    j2yonghwa
    j2yonghwa
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (156)
      • ⏰ Daily WakaTime (1)
      • πŸ–οΈ λ…Έλ§ˆλ“œμ½”λ” (2)
      • 🍺 Dev Setup (3)
      • πŸ”­ Tech Info (1)
      • 🚫 Error (1)
      • πŸ“‚ 라이브러리 (23)
      • ♣️ Next.js 14 (10)
      • ♠️ Next.js 12 (20)
      • πŸ›Έ React Native (12)
      • πŸ¦‹ TypeScript (1)
      • 🐍 Python (2)
      • 🌊 TailwindCSS (4)
      • 🧩 SQL (25)
      • πŸ’Ž Prisma (5)
      • 🌱 MongoDB (4)
      • 🎯 Redis (1)
      • 🧬 GraphQL (2)
      • πŸ”₯ Firebase (7)
      • πŸ’Έ Third-Party Services (2)
      • πŸ•ΈοΈ Web (1)
      • πŸ† μ½”λ”©ν…ŒμŠ€νŠΈ (23)
      • πŸ“™ λͺ¨λ”₯λ‹€ (5)
      • πŸ“— μ½”ν…Œ ν•©κ²©μž 되기 -JS- (0)
      • πŸ“˜ ν΄λ¦°μ½”λ“œ (0)
      • 🍯 κΏ€νŒ 🐝 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • κΉƒν—™
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    Firebase
    λͺ¨λ”₯λ‹€
    Next.js
    tailwindcss
    SQL
    API
    next.js 14
    PostgreSQL
    MySQL
    dev setup
    react router
    next.js 12
    라이브러리
    Prisma
    mongoDB
    0레벨
    μžλ°”μŠ€ν¬λ¦½νŠΈ
    Python
    React Native
    μ½”λ”©ν…ŒμŠ€νŠΈ μž…λ¬Έ
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
j2yonghwa
17μž₯. μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•œ 객체 생성
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”