[JS] πŸ“ ν”„λ‘œν† νƒ€μž… ⭐

Mec.D's BlogΒ·2022λ…„ 6μ›” 1일
0

JS ES6+ 비곡식 λ…ΈνŠΈ

λͺ©λ‘ 보기
14/17
post-thumbnail

🌌 ν”„λ‘œν† νƒ€μž…

πŸ’‘ ν”„λ‘œν† νƒ€μž… (Prototype)

JSμ—μ„œ μΈμŠ€ν„΄μŠ€λ“€μ˜ μ›ν˜•μ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.


μš©μ–΄

πŸ’‘ ν”„λ‘œν† νƒ€μž… 객체 (Prototype Object)

μƒμ„±μž ν•¨μˆ˜λ‘œ 생성할 μΈμŠ€ν„΄μŠ€λ“€μ˜ μ›ν˜• (λΆ€λͺ¨) 이 될 κ°μ²΄μž…λ‹ˆλ‹€.

νŠΉμ§•

  1. μƒμ„±μž ν•¨μˆ˜μ˜ prototype μ†μ„±μœΌλ‘œ μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  2. ν”„λ‘œν† νƒ€μž… μ›ν˜• ν˜Ήμ€ νŠΉμ • μΈμŠ€ν„΄μŠ€ λͺ¨λ‘ ν”„λ‘œν† νƒ€μž… 객체가 될 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œν† νƒ€μž… μΈμŠ€ν„΄μŠ€μ˜ μ›ν˜•μ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

νŠΉμ§•

  1. μΈμŠ€ν„΄μŠ€μ˜ __proto__ μ†μ„±μœΌλ‘œ μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  2. console.log(μΈμŠ€ν„΄μŠ€) μ‹€ν–‰ μ‹œ [[Prototype]] μ΄λΌλŠ” μ΄λ¦„μœΌλ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

μš©λ„

πŸ‘‰ μ΅œμ†Œν•œμ˜ λ©”λͺ¨λ¦¬λ‘œ λΉ„μŠ·ν•œ 객체 μ—¬λŸ¬ 개λ₯Ό μ†μ‰½κ²Œ 찍어내고 싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.


μ‚¬μš© μ‹œ μž₯점

  1. λ©”λͺ¨λ¦¬ μ‚¬μš© 효율이 μ¦κ°€ν•©λ‹ˆλ‹€.
    속성 / λ©”μ„œλ“œλ₯Ό μƒμ†μ‹œμΌœ μž¬μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

  2. μ½”λ“œλ₯Ό 객체지ν–₯적으둜 지 수 μžˆμ–΄ 가독성 / μž¬μ‚¬μš©μ„± / μœ μ§€λ³΄μˆ˜μ„±μ΄ μ˜¬λΌκ°‘λ‹ˆλ‹€.


관계

μƒμ„±μž ν•¨μˆ˜μΈμŠ€ν„΄μŠ€ν”„λ‘œν† νƒ€μž… 객체
ν”„λ‘œν† νƒ€μž… 객체
μ ‘κ·Ό 방법
prototype__proto____proto__
(λΆ€λͺ¨λ₯Ό 가리킴)
μƒμ„±μž ν•¨μˆ˜
μ ‘κ·Ό 방법
constructor
Object.getPrototypeOf( )
constructor
μΈμŠ€ν„΄μŠ€
생성 방법
new μƒμ„±μž( );
  1. μΈμŠ€ν„΄μŠ€.constructor λŠ” μΈμŠ€ν„΄μŠ€.[[Prototype]].constructor와 λ™μΌν•˜κ²Œ μΈμ‹λ©λ‹ˆλ‹€.

  2. μΈμŠ€ν„΄μŠ€μ—μ„œλ„ Object.getPrototypeOf λ₯Ό μ΄μš©ν•΄ ν”„λ‘œν† νƒ€μž…μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

(Object.getPrototypeOf(μΈμŠ€ν„΄μŠ€).constructor)(λ§€κ°œλ³€μˆ˜)

ν”„λ‘œν† νƒ€μž… 체이닝

πŸ’‘ ν”„λ‘œν† νƒ€μž… 체이닝 (Prototype Chaining)

__proto__ 속성을 μ΄μš©ν•΄ μƒμ†λœ ν”„λ‘œν† νƒ€μž…μ„ 거슬러 μ˜¬λΌκ°€λ©° 속성 / λ©”μ†Œλ“œλ₯Ό νƒμƒ‰ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

νŠΉμ§•

  1. μ΅œμƒμœ„ ν”„λ‘œν† νƒ€μž…μΈ Objectμ—μ„œλ„ 찾지 λͺ»ν•œ 속성과 λ©”μ„œλ“œλŠ” undefined둜 μ²˜λ¦¬λ©λ‹ˆλ‹€.


🚧 보좩 자료

ꡬ성 μš”μ†Œ

속성

μ’…λ₯˜μ„€λͺ…
private μ†μ„±ν΄λ‘œμ €λ₯Ό μ΄μš©ν•΄ μΊ‘μŠν™”/μ€λ‹‰ν™”ν•œ μ†μ„±μž…λ‹ˆλ‹€.
public μ†μ„±μƒμ„±μž ν•¨μˆ˜ μ•ˆμ—μ„œ this.속성λͺ…μœΌλ‘œ μƒμ„±ν•œ μ†μ„±μž…λ‹ˆλ‹€.
static μ†μ„±μƒμ„±μž ν•¨μˆ˜μ— 직접 λΆ€μ—¬ν•œ μ†μ„±μž…λ‹ˆλ‹€.
주둜 μ„€μ •κ°’μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

λ©”μ„œλ“œ

μ’…λ₯˜μ„€λͺ…μ˜ˆμ‹œ
static λ©”μ„œλ“œμΈμŠ€ν„΄μŠ€λ₯Ό ν†΅ν•΄μ„œλŠ” μ ‘κ·Όν•  수 μ—†λŠ” ν”„λ‘œν† νƒ€μž… λ©”μ„œλ“œμž…λ‹ˆλ‹€.
μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
주둜 순수 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
Object.keys( )
prototype λ©”μ„œλ“œμΈμŠ€ν„΄μŠ€κ°€ 직접 ν˜ΈμΆœν•  수 μžˆλŠ” ν”„λ‘œν† νƒ€μž…μ˜ λ©”μ„œλ“œμž…λ‹ˆλ‹€.user.__proto__.getName( )
user.getName( )
μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œν”„λ‘œν† νƒ€μž…μ—λŠ” μ—†λŠ” μΈμŠ€ν„΄μŠ€λ§Œμ˜ λ©”μ„œλ“œμž…λ‹ˆλ‹€.user.__proto__.getAge( ) ❌
user.getAge( )

μ΅œμƒμœ„ ν”„λ‘œν† νƒ€μž… (Object)

πŸ“• Object

JS의 μ΅œμƒμœ„ ν”„λ‘œν† νƒ€μž…μž…λ‹ˆλ‹€.

문제점

JSλŠ” ν”„λ‘œν† νƒ€μž… 기반 μ–Έμ–΄μž…λ‹ˆλ‹€.
κ·Έλž˜μ„œ κΈ°λ³Έν˜• λ°μ΄ν„°λ§ˆμ €λ„ Object ν”„λ‘œν† νƒ€μž…μ„ 상속받고 μžˆμŠ΅λ‹ˆλ‹€.

이 λ•Œλ¬Έμ— κΈ°λ³Έν˜• λ°μ΄ν„°μ—μ„œ 객체 μ „μš© λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ²Œ λ§‰κ³ μž prototype λ©”μ„œλ“œ λŒ€μ‹  static λ©”μ„œλ“œλ‘œ κ΅¬ν˜„ν•΄ λ†“μ•˜μŠ΅λ‹ˆλ‹€.

β†’ κ·Έ κ²°κ³Ό 객체 μ „μš© λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ°κ°€ λ‹€μ†Œ λΆˆνŽΈν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.
ex) Object.keys( ), Object.values( ), Object.entries( ), ...

profile
기술둜 더 λ‚˜μ€ 미래λ₯Ό λ””μžμΈν•˜λŠ” 개발자 MEC:D μž…λ‹ˆλ‹€

0개의 λŒ“κΈ€