μ€νλ§μ 곡λΆν λ DIμ ν¨κ» νμ κ±°λ‘ λλ κ²μ΄ λ°λ‘ AOPμ΄λ€. AOPλ κ΄μ μ§ν₯ νλ‘κ·Έλλ°μ΄λΌλ νλμ λ°©λ²λ‘ μ΄λ€. μ€νλ§μ μ¬μ©νλ©΄ AOP ꡬνμ μ½κ² ν μ μλ€.
μ§κΈκΉμ§λ Object Oriented Programmingμλ§ κ΄μ¬μ λκ³ μμλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅ν΄ μ¬μ©μμ μνλ μ
무λ₯Ό λΆμν΄μ κ·Έμ λν λ‘μ§μ ꡬνν΄μλ€λ μλ―Έμ΄λ€. νμ§λ§ μ¬μ©μμ μꡬμ¬ν μΈμλ κ°λ°μ λλ κ΄λ¦¬μκ° κ°λ°κ³Ό μ΄μμ μν΄ νμλ‘νλ μ½λκ° μκ³ , μ΄λ¬ν μ£Ό μ
무 λ‘μ§ μΈμ μ½λμλ κ΄μ¬μ κ°μ§κ² λμλ€. => κ΄μ μ§ν₯ νλ‘κ·Έλλ°
μ£Ό μ
무(μ¬μ©μμ κ΄μ )μμ λ€λ₯Έ κ΄μ (λ‘κ·Έ μ²λ¦¬, 보μ μ²λ¦¬, νΈλμμ
μ²λ¦¬ λ±)μΌλ‘λ λ΄μ©μ΄ νμ₯λλ€.
μ΄λ° λ‘μ§λ€μ μ¬μ©μμ μꡬμ¬ν μ λ€μ μμΉνλ 보쑰 μ
λ¬΄κ° λλ€. νλ‘κ·Έλ¨μ μμμ μλλ‘ μ§νλλλ°, μ΄λ¬ν 보쑰 μ
무λ€μ νλ‘κ·Έλ¨μ νλ¦ λ°©ν₯κ³Ό ν¬λ‘μ€ λκΈ° λλ¬Έμ Cross-cutting Concernμ΄λΌκ³ λΆλ₯Έλ€. μλ κ·Έλ¦Όμμ νλμ μμμ΄ μ£Ό λ‘μ§, λ
Έλμ λΆλΆμ΄ 보쑰 μ
무μ΄λ€.
보쑰 μ 무λ€μ μ£Ό μ 무 μ λ€λ‘ λΊλ€ κΌλ€κ° μμ λ‘μμΌ ν λκ° μλ€. μλ₯Ό λ€μ΄ λ‘κ·Έλ₯Ό λ¨κΈΈ λλ μκ³ μ λ¨κΈΈ λλ μκ³ , 보μ μ²λ¦¬λ₯Ό νκ±°λ νμ§ μμ μ μλ€. κ³Όκ±°μλ μ΄λ° μμ μ ν λ 컀ν μ μμ λ‘μ§ μμλ€. λ‘κ·Έ λ¨κΈ°λ μμ μ λΉΌμΌν λλ©΄ μ§μ μ£Ό μ 무 μμ€ μ½λ μ λ€μ λ‘κ·Έ μ²λ¦¬ μμ€λ₯Ό μ£Όμμ νλ μμΌλ‘ μ²λ¦¬λ₯Ό ν΄μΌλ§ νλ€. μμ€ μ½λλ₯Ό μ§μ μμ ν΄μΌ νλ―λ‘ μμ€ μ½λλ₯Ό κ°μ§κ³ μλ μ¬λλ§ μμ μ΄ κ°λ₯νλ©°, μ¬λ°°ν¬λ λ²κ±°λ‘λ€λ λ¨μ μ΄ μμλ€. νμ§λ§ AOP ꡬνμΌλ‘ Core Concernκ³Ό Cross-cutting Concernμ λ°λ‘ λΌμ΄λμ μ μ§ λ³΄μλ₯Ό μ½κ² ν μ μκ² λμμΌλ©°, μ΄ μμ μ μμ λ‘κ² ν μ μλλ‘ λμμ£Όλ κ²μ΄ λ°λ‘ μ€νλ§μ΄λ€. μλ°λ§ κ°μ§κ³ λ AOP ꡬνμ ν μ μμΌλ μ€νλ§μ μ¬μ©νλ κ²μ΄ λ νΈλ¦¬νλ€. νμ κ·Έλ¬λ―μ΄..
proxyλ₯Ό ν΅ν΄ ν¨μλ₯Ό νΈμΆνλ©΄ Core Concern μ λ€μ μ§μ μ½λλ₯Ό κ½μλμ§ μμλ μ€ν μμμ λ§μΉ μ£Ό μ 무 μ λ€μ μ½λλ₯Ό κ½μλμ κ²μ²λΌ μ€νμ΄ κ°λ₯νλ€. μ£Ό μ 무 μμ μ€νλμ΄μΌ ν μ½λλ₯Ό A, λ€μ μ€νλμ΄μΌ ν μ½λλ₯Ό BλΌκ³ νμ λ A->μ£Ό μ 무->B -> A -> μ£Ό μ 무 -> B μμλ‘ μ§νμ΄ λλ€λ κ²μ΄λ€.
λ΄λ μ² μ€νλ§ νλ μμν¬ κ°μλ₯Ό λ£κ³ μ 리ν κ²μκΈμ λλ€.
'π»Study > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
SpringμΌλ‘ AOP ꡬν (Around Advice) (0) | 2021.02.13 |
---|---|
μμ μλ°λ‘ AOP ꡬνν΄λ³΄κΈ° (0) | 2021.02.13 |
XML Configurationμ Java ConfigurationμΌλ‘ λ³κ²½νκΈ° (0) | 2021.02.13 |
μ΄λ Έν μ΄μ μ μ΄μ©ν κ°μ²΄ μμ±(@Component) (0) | 2021.02.12 |
μ΄λ Έν μ΄μ μ μ΄μ©ν DI (@Autowired, @Qualifier) (0) | 2021.02.12 |