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

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

[λͺ¨λ”₯λ‹€] 24μž₯ ν΄λ‘œμ €

728x90

 

ν΄λ‘œμ €λŠ” JS 고유의 κ°œλ…μ΄ μ•„λ‹ˆλ‹€. 

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜λŠ” μ€‘μš”ν•œ νŠΉμ§•μ΄λ‹€.

고유의 κ°œλ…μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— ECMAScript 사양에 λ“±μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

MDN μ—μ„œλŠ” μ•„λž˜μ™€ 같이 μ„€λͺ…ν•œλ‹€.

ν΄λ‘œμ €λŠ” ν•¨μˆ˜μ™€ ν•¨μˆ˜κ°€ μ„ μ–Έλœ λ ‰μ‹œμ»¬ ν™˜κ²½κ³Όμ˜ 쑰합이닀.

 

 

μ—¬κΈ°μ„œ κΈ°μ–΅ν•΄μ•Ό ν•  ν‚€μ›Œλ“œλŠ” : "ν•¨μˆ˜κ°€ μ„ μ–Έλœ λ ‰μ‹œμ»¬ ν™˜κ²½" 이닀.

 

 

function out() {
    const x = 10;
    function inner() {
        console.log(x); //10
    }
    inner();
}
out();

 

μ€‘μ²©ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ, μžμ‹ μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ‹€. 

λ§Œμ•½ inner ν•¨μˆ˜κ°€ out ν•¨μˆ˜μ˜ λ‚΄λΆ€μ—μ„œ μ •μ˜λœ μ€‘μ²©ν•¨μˆ˜κ°€ μ•„λ‹ˆλΌλ©΄, 

inner ν•¨μˆ˜λ₯Ό out ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ ν˜ΈμΆœν•œλ‹€ ν•˜λ”λΌλ„, out ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†λ‹€. 

 

=> 이유: JS κ°€ λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄λŠ” ν”„λ‘œκ·Έλž˜λ° 언어이기 λ•Œλ¬Έ

 

 

 

 

πŸ§‹ 24.1 λ ‰μ‹œμ»¬ μŠ€μ½”ν”„ (Lexical Scope)

 

JS λŠ” ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ ν˜ΈμΆœν–ˆλŠ”κ°€κ°€ μ•„λ‹Œ, ν•¨μˆ˜λ₯Ό 어디에 μ •μ˜ν–ˆλŠ”μ§€μ— 따라 μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ‹€.

=> 이λ₯Ό λ ‰μ‹œμ»¬ μŠ€μ½”ν”„ (정적 μŠ€μ½”ν”„) 라고 ν•œλ‹€. 

 

lexical : μ–΄νœ˜μ˜, μ–΄νœ˜μ μΈ, 사전적인

scope: λ²”μœ„

(μ‚¬μ „μ μœΌλ‘œ μ •μ˜λœ λ²”μœ„ λΌλŠ” λŠλ‚ŒμΈκ°€?)

 

"ν•¨μˆ˜μ˜ μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ‹€"  = " λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ 참쑰에 μ €μž₯ν•  참쑰값을 κ²°μ •ν•œλ‹€"

 

......

 

 

 

 

 

 

πŸ§‹ 24.2 ν•¨μˆ˜ 객체의 λ‚΄λΆ€ 슬둯 [[Environment]]

 

ν•¨μˆ˜λŠ” μžμ‹ μ΄ μ •μ˜λœ ν™˜κ²½, 즉 μƒμœ„ μŠ€μ½”ν”„(ν•¨μˆ˜ μ •μ˜κ°€ μœ„μΉ˜ν•˜λŠ” μŠ€μ½”ν”„κ°€ λ°”λ‘œ μƒμœ„ μŠ€μ½”ν”„μž„)λ₯Ό κΈ°μ–΅ν•΄μ•Ό ν•œλ‹€.

=> 이λ₯Ό μœ„ν•΄ ν•¨μˆ˜λŠ” μžμ‹ μ˜ λ‚΄λΆ€ 슬둯 [[Environment]] 에 μžμ‹ μ΄ μ •μ˜λœ ν™˜κ²½, 즉 μƒμœ„ μŠ€μ½”ν”„μ˜ μ°Έμ‘°λ₯Ό μ €μž₯ν•œλ‹€.

=> 호좜 μ‹œ 참쑰값이 μƒμ„±λ˜λŠ”λ°, 이 참쑰값이 "μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°" λΌλŠ” 곳에 μ €μž₯λ˜λŠ” μ°Έμ‘°κ°’μž„. 

 

κ·Έλ‹ˆκΉŒ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ ν•¨μˆ˜μ˜ 주민등둝등본 같은 건가?

 

 

 

 

πŸ§‹ 24.3 ν΄λ‘œμ €μ™€ λ ‰μ‹œμ»¬ ν™˜κ²½

 

const x = 1;

function outer() {
    const x = 10;
    const inner = function () { console.log(x) }
    return inner;
}

const innerFn = outer();
innerFn();

ν•¨μˆ˜λ₯Ό 호좜 -> μ‹€ν–‰ν•˜κ³  생λͺ… μ£ΌκΈ° 마감

-> ν•¨μˆ˜μ˜ 싀행이 μ’…λ£Œλ˜λ©΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ 제거됨. 

-> ν•¨μˆ˜μ˜ 지역 λ³€μˆ˜ x 도 생λͺ… μ£ΌκΈ° 마감

 

근데 맨 λ§ˆμ§€λ§‰μ— λ‚˜μ˜€λŠ” 값이 λ†€λžκ²Œλ„ ν•¨μˆ˜ λ‚΄λΆ€ 값인 10μž„!  γ„΄γ…‡γ„±

 

이처럼 μ™ΈλΆ€ ν•¨μˆ˜λ³΄λ‹€ 쀑첩 ν•œμˆ˜κ°€ 더 였래 μœ μ§€λ˜λŠ” 경우

쀑첩 ν•¨μˆ˜λŠ” 이미 생λͺ… μ£ΌκΈ°κ°€ μ’…λ£Œν•œ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€. 

이런 쀑첩 ν•¨μˆ˜λ₯Ό ν΄λ‘œμ € 라고 λΆ€λ₯Έλ‹€. 

 

-> ν•¨μˆ˜ 싀행이 λλ‚œ ν›„ , μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μŠ€νƒμ—μ„œ μ œκ±°λ˜μ§€λ§Œ 

ν•¨μˆ˜μ˜ λ ‰μ‹œμ»¬ ν™˜κ²½ κΉŒμ§€ μ†Œλ©Έν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. 

outer ν•¨μˆ˜μ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ -> inner ν•¨μˆ˜μ˜ [[Environment]] λ‚΄λΆ€ μŠ¬λ‘―μ— μ˜ν•΄ 참쑰되고 있음!

즉, μ™ΈλΆ€ ν•¨μˆ˜λ³΄λ‹€ 더 였래 μƒμ‘΄ν•œ 쀑첩 ν•¨μˆ˜λŠ” 

μ™ΈλΆ€ ν•¨μˆ˜μ˜ 생쑴 여뢀와 상관 없이 μžμ‹ μ΄ μ •μ˜λœ μœ„μΉ˜μ— μ˜ν•΄ κ²°μ •λœ μƒμœ„ μŠ€μ½”ν”„λ₯Ό κΈ°μ–΅ν•œλ‹€. 

 

가비지 컬렉터가 μ°Έμ‘°ν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간을 ν•¨λΆ€λ‘œ ν•΄μ œν•˜μ§€λŠ” μ•ŠλŠ”λ‹€!

 

 

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  ν•¨μˆ˜λŠ” μƒμœ„ ν•¨μˆ˜λ₯Ό κΈ°μ–΅ν•˜λ―€λ‘œ 이둠적으둜 λͺ¨λ“  ν•¨μˆ˜λŠ” ν΄λ‘œμ €λ‹€. 

ν•˜μ§€λ§Œ 일반적으둜 λͺ¨λ“  ν•¨μˆ˜λ₯Ό ν΄λ‘œμ €λΌκ³  λΆ€λ₯΄μ§„ μ•ŠμŒ. 

 

μƒμœ„ μŠ€μ½”ν”„μ˜ μ‹λ³„μžλ₯Ό μ°Έμ‘°ν•΄μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ ν΄λ‘œμ € μ•„λ‹˜. 

그치만 μ‹€ν–‰ -> λ°”λ‘œ 써먹고 -> μ†Œλ©Έ ν•˜λ©΄ ν΄λ‘œμ € μ•„λ‹˜. 

 

ν΄λ‘œμ €λŠ” 쀑첩 ν•¨μˆ˜κ°€ μƒμœ„ μŠ€μ½”ν”„μ˜ μ‹λ³„μžλ₯Ό μ°Έμ‘°ν•˜κ³  있고

& 쀑첩 ν•¨μˆ˜κ°€ μ™ΈλΆ€ ν•¨μˆ˜λ³΄λ‹€ 더 였래 μœ μ§€λ˜λŠ” κ²½μš°μ— ν•œμ •ν•˜λŠ” 것이 일반적. 

 

(그리고 ν΄λ‘œμ €μ— μ˜ν•΄ μ°Έμ‘°λ˜λŠ” μƒμœ„ μŠ€μ½”ν”„μ˜ λ³€μˆ˜ : 자유 λ³€μˆ˜ 라고 함. )

 

ν΄λ‘œμ €μ˜ λ©”λͺ¨λ¦¬ μ μœ λŠ” κ±±μ •ν•  λ§Œν•œ 것은 μ•„λ‹˜. 

ν΄λ‘œμ €λŠ” JS 의 κ°•λ ₯ν•œ κΈ°λŠ₯으둜, ν•„μš”ν•˜λ‹€λ©΄ 적극적으둜 ν™œμš©ν•˜λΌκ³  함. 

 

 

 

 

 

 

 

πŸ§‹ 24.4 ν΄λ‘œμ €μ˜ ν™œμš©

 

ν΄λ‘œμ €λŠ” μƒνƒœ state λ₯Ό μ•ˆμ „ν•˜κ²Œ λ³€κ²½ν•˜κ³  μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. 

λ‹€μ‹œ 말해, μƒνƒœκ°€ μ˜λ„μΉ˜ μ•Šκ²Œ λ³€κ²½λ˜μ§€ μ•Šλ„λ‘

μƒνƒœλ₯Ό μ•ˆμ „ν•˜κ²Œ μ€λ‹‰ν•˜κ³  νŠΉμ • ν•¨μˆ˜μ—κ²Œλ§Œ μƒνƒœ 변경을 ν—ˆμš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

 

?μ—₯..? useState???

 

https://seokzin.tistory.com/entry/React-useState%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%ED%81%B4%EB%A1%9C%EC%A0%80

 

[React] useState의 λ™μž‘ 원리와 ν΄λ‘œμ €

useState hook은 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ 관리 문제λ₯Ό ν΄λ‘œμ €λ₯Ό 톡해 ν•΄κ²°ν•©λ‹ˆλ‹€. 이 글을 톡해 κ°„λ‹¨ν•œ useState hook을 λ‹¨κ³„λ³„λ‘œ 직접 κ΅¬ν˜„ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 맀 λ‹¨κ³„λ§ˆλ‹€ μ–΄λ– ν•œ 문제λ₯Ό λ§Œλ‚˜ μ–΄λ–»κ²Œ ν•΄κ²°

seokzin.tistory.com

 

였.. λ§žμžλ‚˜... 상관 μžˆμžλ‚˜... 

μ‹±κΈ° λ°©κΈ°

 

 

μ˜ˆμ œλŠ” λ§₯락만 μ–΄λŠ μ •λ„λ§Œ μ΄ν•΄λ˜λ©΄ λ„˜μ–΄κ°€μž. 

μ–΄μ°¨ν”Ό λ‹€μ‹œ 봐야함. 

 

 

 

 

πŸ§‹ 24.5 μΊ‘μŠν™”μ™€ 정보 은닉

 

μΊ‘μŠν™” : 객체의 ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 것. 

-> νŠΉμ • ν”„λ‘œνΌν‹°λ‚˜ 객체λ₯Ό 감좜 λͺ©μ μœΌλ‘œ μ‚¬μš©ν•˜κΈ°λ„ 함. 즉, 정보 은닉을 μœ„ν•΄ μ‚¬μš©ν•˜κΈ°λ„ 함. 

 

λŒ€λΆ€λΆ„μ˜ 객체지ν–₯ μ–Έμ–΄λŠ” 클래슀λ₯Ό μ •μ˜ν•˜κ³ , μ ‘κ·Ό μ œν•œμžλ‘œ 곡개 λ²”μœ„λ₯Ό μ •ν•  수 μžˆμ§€λ§Œ, 

JS λŠ” μ ‘κ·Ό μ œν•œμž (public, private, protected) λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. 

 

μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ -> μƒμ„±μž ν•¨μˆ˜μ˜ μΈμŠ€ν„΄μŠ€κ°€ 상속받아 μ‚¬μš©ν•  prototype λ©”μ„œλ“œ -> μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜κ°€ μ’…λ£Œλœ ν›„ 호좜됨. 

ν•¨μˆ˜ λ‚΄λΆ€μ˜ λ³€μˆ˜λ₯Ό μ§μ ‘μ μœΌλ‘œ ν˜ΈμΆœν•˜λ©΄ μ•ˆλ˜λŠ”λ°, ν•¨μˆ˜λ‘œ λΆ€λ₯΄λ©΄ μ°Έμ‘° κ°€λŠ₯. 

 

 

JS λŠ” 정보 은닉을 μ™„μ „ν•˜κ²Œ μ§€μ›ν•˜μ§€ μ•ŠμŒ. 

private ν‰λ‚΄λŠ” κ°€λŠ₯κ°€μ§€λ§Œ, ν”„λ‘œν† νƒ€μž… λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜λ©΄ 이것도 λΆˆκ°€λŠ₯함. 

 

 

 

 

πŸ§‹ 24.6 자주 λ°œμƒν•˜λŠ” μ‹€μˆ˜

 

var 둜 μ„ μ–Έν•œ λ³€μˆ˜ : 블둝 레벨이 μ•„λ‹Œ ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό κ°€μ§€λŠ” 점 유의. 

 

for λ¬Έμ—μ„œ let μ‚¬μš©μ‹œ -> for 문이 반볡될 λ•Œ λ§ˆλ‹€ for λ¬Έ μ½”λ“œ λΈ”λ‘μ˜ μƒˆλ‘œμš΄ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ 생성됨. 

=> for 문에 μžˆλŠ” ν•¨μˆ˜=>  싀행될 λ•Œλ§ˆλ‹€ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ μƒˆλ‘œ 생성됨. 

 

λ˜μž‰... μ–΄λ ΅λ‹€.. 

미래의 λ‚˜μ•Ό κ³΅λΆ€ν•˜κ³  μ™€μ„œ λ‹€μ‹œ 정리 λΆ€νƒν•œλ‹€!

 

 

 

 

 

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•