Facade

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„œλΉ„μŠ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ ν΄λž˜μŠ€λ“€μ— 정적 μΈν„°νŽ˜μ΄μŠ€λ‘œ 라라벨은 λŒ€λΆ€λΆ„μ˜ 라라벨기λŠ₯에 μ ‘κ·Όν•˜λŠ” λ§Žμ€ νŒŒμ‚¬λ“œλ₯Ό μ œκ³΅ν•˜κ³  μ„œλΉ„μŠ€ μ»¨ν…Œμ΄λ„ˆμ— λ“±λ‘λœ ν΄λž˜μŠ€λ“€μ— λŒ€ν•œ μΌμ’…μ˜ 정적 ν”„λ‘μ‹œ 역할을 μˆ˜ν–‰ν•˜μ—¬ 정적 λ©”μ†Œλ“œλ³΄λ‹€ κ°„κ²°ν•œ 문법과 ν…ŒμŠ€νŠΈμ˜ μš©μ΄μ„±, μ½”λ“œμ˜ μœ μ—°μ„±μ„ μœ μ§€ν•˜λŠ” μž₯점을 μ œκ³΅ν•œλ‹€.

λ™μž‘ 방식

\Gate::denies(..)μ—μ„œ \GateλŠ” μ–΄λ””μ—μ„œ μ™”μ„κΉŒ?

  • \둜 μ‹œμž‘ν•˜λŠ” 것은 κΈ€λ‘œλ²Œ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ˜λ―Έν•˜λŠ”λ° ν”„λ‘œμ νŠΈμ˜ 루트 디렉토리에 μžˆλ‹€λŠ” 것은 μ•„λ‹ˆλ‹€. 라라벨은 app을 μ‹œμž‘ν•  λ•Œ class_alias ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ config/app.phpνŒŒμΌμ— μž‡λŠ” aliasesν•­λͺ©μ— μ •μ˜ λ˜μ–΄ μžˆλŠ” ν΄λž˜μŠ€λ“€μ˜ 별칭을 κΈ€λ‘œλ²Œ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ“±λ‘ν•œλ‹€.

즉, \GateλŠ” Illuminate\Support\Facades\Gate::class이닀.

그런데 Gateν΄λž˜μŠ€μ— 가보면 denies()λŠ” μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠλŠ”λ° λ™μž‘ν•˜λŠ” 것을 λ³Ό 수 μžˆλŠ”λ° μ΄λŠ” λΆ€λͺ¨ν΄λž˜μŠ€μΈ Facade에 보면 __callStatic()μ΄λΌλŠ” static λ©”μ„œλ“œκ°€ μ •μ˜λ˜μ–΄μžˆλ‹€. 이 λ©”μ„œλ“œλŠ” μ •μ˜λ˜μ–΄μžˆμ§€ μ•Šμ€ staticλ©”μ„œλ“œκ°€ 호좜되면 λ™μž‘ν•˜λŠ” 맀직 λ©”μ„œλ“œλ‘œ μ΄λ•Œλ¬Έμ— λ™μž‘ν•˜λŠ” 것이닀.

__callStatic()μ—μ„œ static::getFacadeRoot()둜 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ Έμ˜€κ³  κ·Έ μΈμŠ€ν„΄μŠ€μ—μ„œ μ›λž˜ μ‹€ν–‰ν–ˆλ˜ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이닀. getFacadRoot()λ©”μ„œλ“œλ₯Ό λ‹€μ‹œ 봐보면 static::resolveFacadeInstance()둜 첫번째 νŒŒλΌλ―Έν„°μΈ static::getFacadeAccessor()의 μΈμŠ€ν„΄μŠ€λ₯Ό μ„œλΉ„μŠ€ μ»¨ν…Œμ΄λ„ˆλ‘œ κ°€μ Έμ˜¨λ‹€. getFacadeAccessor()λŠ” 각 νŒŒμ‚¬λ“œ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œν•˜λŠ” λ©”μ„œλ“œλ‘œ Gateκ°€ μœ μΌν•˜κ²Œ 가지고 μžˆλŠ” λ©”μ„œλ“œκ°€ λ°”λ‘œ 이 λ©”μ„œλ“œμ΄κΈ° λ•Œλ¬Έμ— Gate클래슀의 λ©”μ„œλ“œμ— μ˜ν•΄ denies()λ©”μ„œλ“œλ₯Ό μ°ΎλŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

Last updated