관리 메뉴

Daehyunii's Dev-blog

23μž₯ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ λ³Έλ¬Έ

πŸ“š Language & CS knowledge/JavaScript (λͺ¨λ˜μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive)

23μž₯ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ

Daehyunii 2022. 7. 20. 22:04

  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ™μž‘ 원리λ₯Ό λ‹΄κ³  μžˆλŠ” 핡심 κ°œλ…μ΄λ‹€. 이 κ°œλ…μ„ λͺ…ν™•ν•˜κ²Œ μ΄ν•΄ν•˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μŠ€μ½”ν”„ 기반으둜 μ‹λ³„μžμ™€ μ‹λ³„μžμ— λ°”μΈλ”©λœ 값을 κ΄€λ¦¬ν•˜λŠ” 방식과 ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜λŠ” 이유, ν΄λ‘œμ €μ˜ λ™μž‘ 방식등을 이해할 수 μžˆλ‹€.

 

23.1 μ†ŒμŠ€μ½”λ“œμ˜ νƒ€μž…

  μš°μ„  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ†ŒμŠ€μ½”λ“œμ˜ νƒ€μž…μ„ μ•Œ ν•„μš”κ°€ μžˆλ‹€. ECMAscirpt 사양은 μ†ŒμŠ€μ½”λ“œ 즉, μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό 4가지 νƒ€μž…μœΌλ‘œ κ΅¬λΆ„ν•œλ‹€. 4가지 νƒ€μž…μ˜ μ†ŒμŠ€μ½”λ“œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 각각 μƒμ„±ν•œλ‹€.

μ†ŒμŠ€μ½”λ“œμ˜ νƒ€μž… μ„€λͺ…
μ „μ—­ μ½”λ“œ 전역에 μ‘΄μž¬ν•˜λŠ” μ†ŒμŠ€μ½”λ“œ
(μ „μ—­μ˜ ν•¨μˆ˜, 클래수 λ“±μ˜ λ‚΄λΆ€ μ½”λ“œλŠ” μ œμ™Έ)
ν•¨μˆ˜ μ½”λ“œ ν•¨μˆ˜ 내뢀에 μ‘΄μž¬ν•˜λŠ” μ†ŒμŠ€μ½”λ“œ
(μ€‘μ²©ν•¨μˆ˜,클래슀 λ“±μ˜ λ‚΄λΆ€ μ½”λ“œλŠ” μ œμ™Έ)
eval μ½”λ“œ 빌트인 μ „μ—­ ν•¨μˆ˜ eval ν•¨μˆ˜μ— 인수 μ „λ‹¬λ‘œ μ‹€ν–‰λ˜λŠ” μ†ŒμŠ€μ½”λ“œ
λͺ¨λ“ˆ μ½”λ“œ λͺ¨λ“ˆ 내뢀에 μ‘΄μž¬ν•˜λŠ” μ†ŒμŠ€μ½”λ“œ
(λͺ¨λ“ˆ λ‚΄ ν•¨μˆ˜, 클래슀 λ“±μ˜ λ‚΄λΆ€ μ½”λ“œλŠ” μ œμ™Έ) 

μ†ŒμŠ€μ½”λ“œλ₯Ό 4가지 νƒ€μž…μœΌλ‘œ κ΅¬λΆ„ν•˜λŠ” μ΄μœ λŠ” μ†ŒμŠ€μ½”λ“œμ˜ νƒ€μž…μ— 따라 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜λŠ” κ³Όμ •κ³Ό 관리 λ‚΄μš©μ΄ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€.

 

1. μ „μ—­ μ½”λ“œ

  μ „μ—­ μ½”λ“œλŠ” μ „μ—­ λ³€μˆ˜λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ΅œμƒμœ„ μŠ€μ½”ν”„μΈ μ „μ—­ μŠ€μ½”ν”„λ₯Ό 생성해야 ν•˜λŠ”ν•œλ‹€. 그리고 var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ μ „μ—­ λ³€μˆ˜μ™€ ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜λœ μ „μ—­ ν•¨μˆ˜λ₯Ό μ „μ—­ 객체의 ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ‘œ λ°”μΈλ”©ν•˜κ³  μ°Έμ‘°ν•˜κΈ° μœ„ν•΄ μ „μ—­ 객체와 μ—°κ²°λ˜μ–΄μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•΄ μ „μ—­ μ½”λ“œκ°€ ν‰κ°€λ˜λ©΄ μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λœλ‹€.

 

2. ν•¨μˆ˜ μ½”λ“œ

  ν•¨μˆ˜ μ½”λ“œλŠ” 지역 μŠ€μ½”ν”„λ₯Ό μƒμ„±ν•˜κ³  지역 λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, arguments 객체λ₯Ό 관리해야 ν•œλ‹€.(callee,length,symbol,μΈμˆ˜λ“€) 그리고 μƒμ„±ν•œ 지역 μŠ€μ½”ν”„λ₯Ό μ „μ—­ μŠ€μ½”ν”„μ—μ„œ μ‹œμž‘ν•˜λŠ” μŠ€μ½”ν”„ 체인의 μΌμ›μœΌλ‘œ μ—°κ²°ν•΄μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•΄ ν•¨μˆ˜ μ½”λ“œκ°€ ν‰κ°€λ˜λ©΄ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λœλ‹€.

 

3. eval μ½”λ“œ

  eval μ½”λ“œλŠ” strict modeμ—μ„œ μžμ‹ λ§Œμ˜ λ…μžμ μΈ μŠ€μ½”ν”„λ₯Ό μƒμ„±ν•œλ‹€. 이λ₯Ό μœ„ν•΄ eval μ½”λ“œκ°€ ν‰κ°€λ˜λ©΄ eval μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λœλ‹€.(잘 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ)

 

4. λͺ¨λ“ˆ μ½”λ“œ

  λͺ¨λ“ˆ μ½”λ“œλŠ” λͺ¨λ“ˆλ³„λ‘œ 독립적인 λͺ¨λ“ˆ μŠ€μ½”ν”„λ₯Ό μƒμ„±ν•œλ‹€. 이λ₯Ό μœ„ν•΄ λͺ¨λ“ˆ μ½”λ“œκ°€ ν‰κ°€λ˜λ©΄ λͺ¨λ“ˆ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λœλ‹€.

 

23.2 μ†ŒμŠ€μ½”λ“œμ˜ 평가와 μ‹€ν–‰

  λͺ¨λ“  μ†ŒμŠ€μ½”λ“œλŠ” 싀행에 μ•žμ„œ 평가 과정을 거치며 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ μ€€λΉ„λ₯Ό ν•œλ‹€. λ‹€μ‹œ 말해, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ†ŒμŠ€μ½”λ“œλ₯Ό 2개의 κ³Όμ •, 즉 'μ†ŒμŠ€μ½”λ“œμ˜ 평가'와 'μ†ŒμŠ€μ½”λ“œμ˜ μ‹€ν–‰'κ³Όμ •μœΌλ‘œ λ‚˜λˆ„μ–΄ μ²˜λ¦¬ν•œλ‹€. μ†ŒμŠ€μ½”λ“œ 평가 κ³Όμ •μ—μ„œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  λ³€μˆ˜, ν•¨μˆ˜ λ“±μ˜ μ„ μ–Έλ¬Έλ§Œ λ¨Όμ € μ‹€ν–‰ν•˜μ—¬ μƒμ„±λœ λ³€μˆ˜λ‚˜ ν•¨μˆ˜ μ‹λ³„μžλ₯Ό ν‚€λ‘œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” 'λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ ν™˜κ²½ λ ˆμ½”λ“œ' 곡간에 λ“±λ‘ν•œλ‹€. μ†ŒμŠ€μ½”λ“œ 평가 과정이 λλ‚˜λ©΄ λΉ„λ‘œμ†Œ 선언문을 μ œμ™Έν•œ μ†ŒμŠ€μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜κΈ° μ‹œμž‘ν•œλ‹€.(λŸ°νƒ€μž„) 이 λ•Œ μ†ŒμŠ€μ½”λ“œ 싀행에 ν•„μš”ν•œ μ •λ³΄λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” λ ‰μ‹œμ»¬ ν™˜κ²½μ—μ„œ κ²€μƒ‰ν•΄μ„œ μ·¨λ“ν•œλ‹€. 그리고 λ³€μˆ˜ κ°’μ˜ λ³€κ²½ λ“± μ†ŒμŠ€μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³ΌλŠ” λ‹€μ‹œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” λ ‰μ‹œμ»¬ ν™˜κ²½μ— λ“±λ‘λœλ‹€. 

 

  방금 μ„€λͺ…ν•œ 과정이 λŒ€λž΅μ μΈ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ™μž‘ 과정이라고 보면 될 것 κ°™λ‹€. μš°μ„  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 말둜 μ΄ν•΄ν•˜λŠ” 것 λ³΄λ‹€λŠ” μ–΄λ–»κ²Œ 흐름을 μ΄μ–΄κ°€λŠ”μ§€ 그림을 톡해 κ³΅λΆ€ν•˜λ©΄ μ’‹κ² λ‹€. ν•„μžλŠ” ν•΄λ‹Ή λ‚΄μš©μ„ κΈ€λ‘œ μ •λ¦¬ν•˜λŠ”λ° 무리가 μžˆμ„ 것 κ°™μ•„ 전체적인 흐름에 λŒ€ν•΄μ„œλ§Œ κΈ€λ‘œ μ •λ¦¬ν•˜κ³  ν•œλ‹€.

 

<μ „μ—­ μ½”λ“œμ˜ ν‰κ°€μ‹œ μƒμ„±λ˜λŠ” 것>

 

1. μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성

2. μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성 : μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” ν™˜κ²½(μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ μ—°κ²°λ˜μ–΄ μžˆμ§€λ§Œ, λ³„κ°œμ˜ 독립적 κ°μ²΄μž„)

2.1 μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œ 생성 : μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½λ‚΄μ˜ μ‹λ³„μžλ“€μ— λŒ€ν•œ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” 곡간

2.1.1 객체 ν™˜κ²½ λ ˆμ½”λ“œ 생성 : μ „μ—­ 객체와 μ—°κ²°λ˜μ–΄ 있으며, var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜, ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ„ μ–Έλœ μ „μ—­ ν•¨μˆ˜, 암묡적 전역에 λŒ€ν•œ 정보가 λ“€μ–΄κ°€ 있음

2.1.2 선언적 ν™˜κ²½ λ ˆμ½”λ“œ 생성 : letκ³Ό constν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜λ“€μ— λŒ€ν•œ 정보(letκ³Ό const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ— ν• λ‹Ήν•œ ν•¨μˆ˜ ν‘œν˜„μ‹ 포함)

2.2 this 바인딩 : 일반적으둜 μ „μ—­ μ½”λ“œμ—μ„œμ˜ thisλŠ” μ „μ—­ 객체λ₯Ό κ°€λ¦¬ν‚€λ―€λ‘œ μ „μ—­ 객체가 바인딩 λœλ‹€.

2.3 μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° κ²°μ • : κ°„λ‹¨ν•˜κ²Œ μƒμœ„ μŠ€μ½”ν”„λ₯Ό 가리킀고 μžˆλ‹€.(μ „μ—­ μ½”λ“œμ˜ μƒμœ„ μŠ€μ½”ν”„λŠ” μ—†μœΌλ―€λ‘œ null값이 λ“€μ–΄μžˆμŒ)

 

μ „μ—­ μ½”λ“œ ν‰κ°€μ‹œ, μƒμ„±λ˜λŠ” 것듀이며 μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— μ˜ν•΄ κ΄€λ¦¬λ˜κ³  μžˆλ‹€. 평가가 이뀄지면, κ·Έ λ‹€μŒ μ „μ—­ μ½”λ“œμ— λŒ€ν•œ 싀행이 이뀄진닀. μ „μ—­ μ½”λ“œμ˜ μ‹€ν–‰ 도쀑 ν•¨μˆ˜ν˜ΈμΆœμ„ λ§Œλ‚˜λ©΄, μ „μ—­ μ½”λ“œ 싀행이 μΌμ‹œ 쀑단 되고 호좜된 ν•¨μˆ˜μ˜ λ‚΄λΆ€ μ½”λ“œμ˜ 평가가 μ‹œμž‘λœλ‹€.

 

<ν•¨μˆ˜ μ½”λ“œμ˜ ν‰κ°€μ‹œ μƒμ„±λ˜λŠ” 것>

 

1. ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성

2. ν•¨μˆ˜ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성 : ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” ν™˜κ²½(ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ μ—°κ²°λ˜μ–΄ μžˆμ§€λ§Œ, λ³„κ°œμ˜ 독립적 κ°μ²΄μž„)

2.1 μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œ 생성 : ν•¨μˆ˜ λ ‰μ‹œμ»¬ ν™˜κ²½λ‚΄μ˜ ν•¨μˆ˜μ— λŒ€ν•œ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” 곡간

2.2 this 바인딩 : 일반적으둜 μ „μ—­ μ½”λ“œμ—μ„œμ˜ thisλŠ” μ „μ—­ 객체λ₯Ό κ°€λ¦¬ν‚€λ―€λ‘œ μ „μ—­ 객체가 바인딩 λœλ‹€.

2.3 μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° κ²°μ • : ν•΄λ‹Ή ν•¨μˆ˜κ°€ μ •μ˜λ˜κ³  ν‰κ°€λ˜λŠ” μ‹œμ μ— μ‹€ν–‰λ˜κ³  μžˆλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ 가리킴, ν•΄λ‹Ή ν•¨μˆ˜κ°€ μ •μ˜λ˜κ³  ν‰κ°€λ˜λ©΄ μƒμ„±λœ ν•¨μˆ˜ 객체의 [[Environment]]에 μƒμœ„ μŠ€μ½”ν”„ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ μ €μž₯λ˜μ–΄ μžˆλŠ”λ°, [[Environment]]의 값이 즉 μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ°€λ¦¬ν‚€λŠ” κ°’μž„

 

ν•¨μˆ˜ μ½”λ“œ ν‰κ°€μ‹œ, μƒμ„±λ˜λŠ” 것듀이며 ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— μ˜ν•΄ κ΄€λ¦¬λ˜κ³  μžˆλ‹€. 

 

 

 

<μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ™μž‘ μˆœμ„œ>

//μ „μ—­ λ³€μˆ˜ μ„ μ–Έ
const x = 1;
const y = 2;

//μ „μ—­ ν•¨μˆ˜ μ •μ˜
function foo(a){
    // 지역 λ³€μˆ˜ μ„ μ–Έ
    const x = 10;
    const y = 20;
    // λ©”μ„œλ“œ 호좜
    console.log(a + x + y); // 130
}

foo(100);

console.log(x + y) // 3

<1. μ „μ—­ 객체 생성>

 

<2. μ „μ—­ μ½”λ“œ 평가

2.1 μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성

2.2 μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성

2.2.1 μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œ 생성

2.2.1.1 객체 ν™˜κ²½ λ ˆμ½”λ“œ 생성

2.2.1.2 선언적 ν™˜κ²½ λ ˆμ½”λ“œ 생성

2.2.2 this 바인딩

2.2.3 μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° κ²°μ •

3. μ „μ—­ μ½”λ“œ μ‹€ν–‰>

 

<4. foo ν•¨μˆ˜ μ½”λ“œ 평가

4.1 ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성

4.2 ν•¨μˆ˜ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성

4.2.1 ν•¨μˆ˜ ν™˜κ²½ λ ˆμ½”λ“œ 생성

4.3 this 바인딩

4.4 μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° κ²°μ •

5. foo ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰>

 

<6. bar ν•¨μˆ˜ μ½”λ“œ 평가(fooν•¨μˆ˜μ˜ λ™μž‘κ³Ό 동일)

7. bar ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰

7.1 console μ‹λ³„μž 검색

7.2 logλ©”μ„œλ“œ 검색

7.3 console.log λ©”μ„œλ“œμ˜ ν‘œν˜„μ‹ 평가

7.4 console.log λ©”μ„œλ“œ 호좜>

 

<8. bar ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰ μ’…λ£Œ

9. foo ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰ μ’…λ£Œ

10. μ „μ—­ μ½”λ“œ μ‹€ν–‰ μ’…λ£Œ>

 

μœ„μ˜ μˆœμ„œλŒ€λ‘œ μžλ°” 슀크립트 엔진이 λ™μž‘μ„ ν•˜κ²Œ λœλ‹€. 사싀 μ΄λ ‡κ²Œ κ°„λ‹¨ν•œ μˆœμ„œλ“€λ§Œ κ°€μ§€κ³ λŠ” μ •ν™•ν•œ λ‚΄λΆ€ κ°œλ…μ„ μ΄ν•΄ν•˜κΈ°λž€ λΆˆκ°€λŠ₯ν•˜λ‹€κ³  생각이 λ“ λ‹€. μœ„ 뢀뢄에 λŒ€ν•΄μ„œλŠ” 책을 톡해 깊게 μ΄ν•΄ν•˜κΈΈ λ°”λž€λ‹€.

 

23.4 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ

  μœ„μ˜ μ½”λ“œλ₯Ό 보면 μ†ŒμŠ€μ½”λ“œμ˜ νƒ€μž…μœΌλ‘œ λΆ„λ₯˜ν•  λ•Œ μ „μ—­ μ½”λ“œμ™€ ν•¨μˆ˜ μ½”λ“œλ‘œ 이루어져 μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λ¨Όμ € μ „μ—­ μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•œλ‹€. 그리고 ν•¨μˆ˜κ°€ 호좜되면 ν•¨μˆ˜ μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€λ₯Ό μƒμ„±ν•œλ‹€. μ΄λ•Œ μƒμ„±λœ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μŠ€νƒ 자료ꡬ쑰둜 κ΄€λ¦¬λœλ‹€. 이λ₯Ό μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ΄λΌκ³  λΆ€λ₯Έλ‹€. κ°„λ‹¨ν•˜κ²Œ μ„€λͺ…ν•˜λ©΄, μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ ν‰κ°€λ˜κ³  μ‹€ν–‰λ˜λ©΄μ„œ μ—¬λŸ¬ 개의 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ λ§Œλ“€μ–΄ μ§€κ²Œ λ˜λŠ”λ°, 예λ₯Όλ“€μ–΄ μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μ‹€ν–‰λ˜κ³  μžˆλŠ” 도쀑에 ν•¨μˆ˜ 호좜 μ½”λ“œλ₯Ό λ§Œλ‚˜λ©΄ ν•¨μˆ˜μ˜ λ‚΄λΆ€ μ½”λ“œκ°€ ν‰κ°€λ˜κΈ° μ‹œμž‘ν•˜κ³  ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒκΈ°κ²Œ λœλ‹€. μ΄μ œλΆ€ν„°λŠ” ν•¨μˆ˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜κ²Œ 되고 ν•¨μˆ˜ μ½”λ“œκ°€ μ’…λ£Œλ˜λ©΄ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” 제거되고, λ‹€μ‹œ μ „μ—­ μ½”λ“œλ‘œ μ΄λ™ν•˜κ²Œ λœλ‹€. 즉, μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€ν…μ€ μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό κ΄€λ¦¬ν•œλ‹€. μœ„ μ½”λ“œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ„ 그렀보면 λ‹€μŒκ³Ό κ°™λ‹€.

      bar ν•¨μˆ˜ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
     
μ‹œκ°„μ˜ 흐름 λ°©ν–₯ > foo ν•¨μˆ˜ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
foo ν•¨μˆ˜ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
foo ν•¨μˆ˜ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
> >
  μ „μ—­ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
μ „μ—­ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
μ „μ—­ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
μ „μ—­ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
μ „μ—­ μ‹€ν–‰
μ»¨ν…μŠ€νŠΈ
 

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ˜ μ΅œμƒμœ„μ— μ‘΄μž¬ν•˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ–Έμ œλ‚˜ ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ‹€. λ”°λΌμ„œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ˜ μ΅œμƒμœ„μ— μ‘΄μž¬ν•˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλΌ λΆ€λ₯Έλ‹€.