λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 16μž₯ ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ

728x90

🌱 16.1 λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œ

λ‚΄λΆ€ 슬둯, λ‚΄λΆ€ λ©”μ„œλ“œ

=> JS μ—”μ§„μ˜ κ΅¬ν˜„ μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ…ν•˜κΈ° μœ„ν•œ μ˜μ‚¬ ν”„λ‘œνΌν‹°μ™€ μ˜μ‚¬ λ©”μ„œλ“œ

[[ ... ]] μ΄λ ‡κ²Œ 감싼 μ΄λ¦„λ“€μž„. 

 

μ–˜λ„€λŠ” ECMAScript 사양에 μ •μ˜λœ λŒ€λ‘œ κ΅¬ν˜•λ˜κ³ , JS μ—”μ§„μ—μ„œ μ‹€μ œλ‘œ λ™μž‘ν•˜κΈ΄ ν•˜μ§€λ§Œ,

κ°œλ°œμžκ°€ 직접 μ ‘κ·Όν•  수 μžˆλ„λ‘ μ™ΈλΆ€λ‘œ 곡개된 객체의 ν”„λ‘œνΌν‹°λŠ” μ•„λ‹ˆλ‹€

 

즉, λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œλŠ” JS μ—”μ§„μ˜ λ‚΄λΆ€ 쑰직 => μ›μΉ™μ μœΌλ‘  직접 μ ‘κ·Όν•˜κ±°λ‚˜ ν˜ΈμΆœν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•˜μ§„ μ•ŠλŠ”λ‹€.

ν•˜μ§€λ§Œ, 일뢀 λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œμ— ν•œν•΄ κ°„μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλŠ” μˆ˜λ‹¨μ„ μ œκ³΅ν•˜κΈ°λŠ” 함. 

λͺ¨λ“  κ°μ²΄λŠ” [[Prototype]] μ΄λž€ λ‚΄λΆ€ μŠ¬λ‘―μ„ 가지고, 

__proro__ λ₯Ό 톡해 κ°„μ ‘μ μœΌλ‘œ 접근이 κ°€λŠ₯ν•˜λ‹€.

 

 

 

🌱 16.2 ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈμ™€ ν”„λ‘œνΌν‹° λ””μŠ€ν¬λ¦½ν„° 객체

 

JS 엔진은 ν”„λ‘œνΌν‹°λ₯Ό 생성할 λ•Œ, ν”„λ‘œνΌν‹°μ˜ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό 기본적으둜 μžλ™ κ²…μ˜ ν•œλ‹€.

ν”„λ‘œνΌν‹°μ˜ μƒνƒœ : ν”„λ‘œνΌν‹°μ˜ κ°’, κ°’μ˜ κ°±μ‹  μ—¬λΆ€, μ—΄κ±° κ°€λŠ₯ μ—¬λΆ€, μž¬μ •μ˜ κ°€λŠ₯ μ—¬λΆ€

 

Object.getOwnPropertyDescriptor(객체의 μ°Έμ‘°, ν”„λ‘œνΌν‹°ν‚€)

=> ν”„λ‘œνΌν‹°μ˜ μƒνƒœλ₯Ό κ°„μ ‘μ μœΌλ‘œ 확인 κ°€λŠ₯

=> ν”„λ‘œνΌν‹° λ””μŠ€ν¬λ¦½ν„° 객체λ₯Ό λ°˜ν™˜ν•¨.

(ν”„λ‘œνΌν‹° λ””μŠ€ν¬λ¦½ν„° : λͺ¨λ“  ν”„λ‘œνΌν‹°μ˜ ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό μ œκ³΅ν•˜λŠ” 객체)

 

 

 

🌱 16.3 데이터 ν”„λ‘œνΌν‹°μ™€ μ ‘κ·Όμž ν”„λ‘œνΌν‹°

 

ν”„λ‘œνΌν‹°μ˜ ꡬ뢄

 

πŸ“Œ 데이터 ν”„λ‘œνΌν‹°

- 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λœ 일반적인 ν”„λ‘œνΌν‹°. 

 

 πŸ“Œμ ‘κ·Όμž ν”„λ‘œνΌν‹°

- μžμ²΄μ μœΌλ‘œλŠ” 값을 갖지 μ•Šκ³ , ν”„λ‘œνΌν‹°μ˜ 값을 μ½κ±°λ‚˜ μ €μž₯ν•  λ•Œ ν˜ΈμΆœλ˜λŠ” μ ‘κ·Όμž ν•¨μˆ˜λ‘œ κ΅¬μ„±λœ ν”„λ‘œνΌν‹°

 

 

16.3.1 데이터 ν”„λ‘œνΌν‹°

 

<데이터 ν”„λ‘œνΌν‹°μ˜ ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ>

 

[[Value]]

- ν”„λ‘œνΌν‹° 값에 μ ‘κ·Όν•˜λ©΄ λ°˜ν™˜λ˜λŠ” κ°’

- κ°’ λ³€κ²½ μ‹œ 여기에 μž¬ν• λ‹Ήλ¨. 

 

[[Writable]]

- ν”„λ‘œνΌν‹° κ°’μ˜ λ³€κ²½ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ„. λΆˆλ¦¬μ–Έ

 

[[Enumberable]]

- ν”„λ‘œνΌν‹°μ˜ μ—΄κ±° μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ„

 

[[Configurable]]

- ν”„λ‘œνΌν‹°μ˜ μž¬μ •μ˜ κ°€λŠ₯ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ„. 

 

 

 

16.3.2 μ ‘κ·Όμž ν”„λ‘œνΌν‹°

자체적으둜 값을 갖지 μ•Šκ³  λ‹€λ₯Έ 데이터 ν”„λ‘œνΌν‹°μ˜ 값을 μ½κ±°λ‚˜ μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ ‘κ·Όμž ν•¨μˆ˜λ‘œ κ΅¬μ„±λœ ν”„λ‘œνΌν‹°.

 

[[Get]]

- μ ‘κ·Όμž ν”„λ‘œνΌν‹°λ₯Ό 톡해 ν”„λ‘œνΌν‹°μ˜ 값을 읽을 λ•Œ ν˜ΈμΆœλ˜λŠ” μ ‘κ·Όμž ν•¨μˆ˜. 

- getter ν•¨μˆ˜κ°€ 호좜되고, κ·Έ κ²°κ³Όκ°€ ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ λ°˜ν™˜λ¨.

 

[[Set]]

- μ ‘κ·Όμž ν”„λ‘œνΌν‹°λ₯Ό 톡해 ν”„λ‘œνΌν‹°μ˜ 값을 μ €μž₯ν•  λ•Œ ν˜ΈμΆœλ˜λŠ” μ ‘κ·Όμž ν•¨μˆ˜

 

[[Enumberable]]

- 데이터 ν”„λ‘œνΌν‹°μ™€ 동일

 

[[Configurable]]

- 데이터 ν”„λ‘œνΌν‹°μ™€ 동일

 

 

πŸŒΏν”„λ‘œν† νƒ€μž…

- μ–΄λ–€ 객체의 μƒμœ„(λΆ€λͺ¨) 객체의 역할을 ν•˜λŠ” 객체

- ν•˜μœ„(μžμ‹) κ°μ²΄μ—κ²Œ μžμ‹ μ˜ ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ₯Ό 상속.

- 상속받은 λ©”μ„œλ“œλ₯Ό ν•˜μœ„ κ°μ²΄λŠ” 자유둭게 μ‚¬μš© κ°€λŠ₯함.

 

 

 

 

🌱 16.4 ν”„λ‘œνΌν‹°μ˜ μ •μ˜

 

ν”„λ‘œνΌν‹° μ •μ˜λž€?

=> μƒˆλ‘œμš΄ ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•˜λ©΄μ„œ 

ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜κ±°λ‚˜, 

κΈ°μ‘΄ ν”„λ‘œνΌν‹°μ˜ μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό μž¬μ •μ˜ ν•˜λŠ” 것. 

(κ°’μ˜ κ°±μ‹  μ—¬λΆ€, μ—΄κ±° κ°€λŠ₯ λ²Όμ£Ό 등을 μ •μ˜ν•  수 있음.)

 

Object.defineProperties(ν‚€, ν”„λ‘œνΌν‹° λ””μŠ€ν¬λ¦½ν„° 객체)

-> μ—¬λŸ¬κ°œμ˜ ν”„λ‘œνΌν‹°λ₯Ό ν•œλ²ˆμ— μ •μ˜ν•  수 있음.

 

 

 

 

🌱 16.5 객체 λ³€κ²½ 방지

 

κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•œ κ°’μ΄λ―€λ‘œ μž¬ν• λ‹Ή 없이 직접 λ³€κ²½ κ°€λŠ₯. 

μ‚­μ œ, κ°±μ‹ , μž¬μ •μ˜κ°€ κ°€λŠ₯ν•˜λ‹€.

 

객체의 변경을 λ°©μ§€ν•˜λŠ” λ‹€μ–‘ν•œ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•¨.

 

 

16.5.1 객체 ν™•μž₯ κΈˆμ§€

Object.preventExtensions

 

- ν”„λ‘œνΌν‹° μΆ”κ°€ ❌

- μ‚­μ œ, 읽기, κ°’ μ‚¬μš©, μ–΄νŠΈλ¦¬λ·°νŠΈ μž¬μ •μ˜ κ°€λŠ₯

 

 

16.5.2 객체 밀봉

Object.seal

 

λ°€λ΄‰λœ κ°μ²΄λŠ” 읽기와 μ“°κΈ°λ§Œ κ°€λŠ₯

- ν”„λ‘œνΌν‹° μΆ”κ°€, μ‚­μ œ, μž¬μ •μ˜ ❌

- 읽기, μ“°κΈ° κ°€λŠ₯

 

 

16.5.3 객체 동결

Object.freeze

 

- 읽기만 κ°€λŠ₯

 

 

 

16.5.4 λΆˆλ³€ 객체

μ΄μ „μ˜ 방법듀은 얕은 λ³€κ²½ 방지 -> 직속 ν”„λ‘œνΌν‹°λ§Œ 변경이 방지. (μ€‘μ²©λœ 객체엔 영ν–₯ λͺ»μ€Œ)

μ€‘μ²©λœ κ°μ²΄κΉŒμ§€ λ™κ²°ν•˜λ €λ©΄ -> λͺ¨λ“  ν”„λ‘œνΌν‹°μ— freeze λ₯Ό 해야함. 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•