E D R , A S I H C RSS

Aspect Oriented Programming

šฐ—ฐํ•˜ฒŒ žฐ”Šคํ„”” “ค–ดฐ”‹ค€ ณธ €ž…‹ˆ‹ค. ฒ˜Œ  ‘ํ•˜ฒŒ ˜Š” ฐœ…ธฐ, ฝค ดœฐฎ€ฒƒ ฐ™Šต‹ˆ‹ค. OOP„  œŒ€กœ ชจฅด€งŒš”..

ณธ €€ Markus Voelter— ˜ํ•ด ž‘„œ € ค‘ €ด‹ค. ›ฌธ€ AOP ธฐณธ ฐœ…, Xerox PARC— ˜ํ•ด ตฌํ˜„œ Java˜ AOP ํ™•žฅ „ „ธ AspectJ †Œฐœ, Metaclass ํ”„กœทธž˜ฐ˜ „ต “ ด 3 ํŒŒํŠธกœ ตฌ„˜–ด žˆœฉฐ, ฒˆ—ญฌธ€ ด ค‘ ฒซ ฒˆงธ ํŒŒํŠธงŒ ปค„ํ•œ‹ค. ฐธณ กœ ›ฌธ˜ AspectJ € จ ฝ”“œŠ” ƒ‹ํžˆ ˜คž˜œ ฌธฒ•— ธฐฐ˜ํ•˜—ฌ ํ˜„žฌ˜ ทธฒƒ งŽ€ ฐจด ณดธ‹ค.

Introduction

ตœ ช‡ …„— ณ ฐฒด€ํ–ฅ ํ”„กœทธž˜ฐ(Object-Oriented Programming, OOP)€  ˆฐจ  ฐฉฒ•ก „ ˜ ™„ฒฝํžˆ Œ€ฒดํ•˜ฉฐ ํ”„กœทธž˜ฐ ฐฉฒ•ก ˜ ƒˆ ฅ˜กœ – ˜คฅดฒŒ ˜—ˆ‹ค. ฐฒด€ํ–ฅ  ฐฉ‹˜ €žฅ ํฐ ด  ค‘ ํ•˜‚˜Š” †Œํ”„ํŠธ›จ–ด ‹œŠคํ…œด —ฌŸฌ ฐœ˜ …ฆฝœ ํดž˜Šค“ค˜ ง‘ํ•ฉœกœ ตฌ„œ‹คŠ” ฒƒด‹ค. ด“ค ฐฐ˜ ํดž˜Šค“ค€ ž˜  •˜œ ณ œ  ž‘—…„ ˆ˜ํ–‰ํ•˜ฒŒ ˜ณ , ทธ —ญํ•  ˜ํ•œ ช…ํžˆ  •˜˜–ด žˆ‹ค. ฐฒด€ํ–ฅ –ดํ”Œฆฌ€ด…˜—„œŠ” –ดํ”Œฆฌ€ด…˜ด ชฉํ‘œํ•œ ™ž‘„ ˆ˜ํ–‰ํ•˜ธฐ œ„ํ•ด ดŸฐ ํดž˜Šค“คด „œกœ œ ธฐ œกœ ํ˜‘ ฅํ•˜ฒŒ œ‹ค. ํ•˜€งŒ ‹œŠคํ…œ˜ –ด–ค ธฐŠฅ“ค€ ํŠ • ํ•œ ํดž˜Šค€ „งก•„ ฒ˜ฆฌํ•  ˆ˜ —†‹ค. ด“ค€ ‹œŠคํ…œ  „ฒด “ค‘ค‹œฉฐ ํ•ด‹ ฝ”“œ“ค„ —ฌŸฌ ํดž˜Šค“ค— ํฉฟŒ ค †“Š”‹ค. ดŸฐ ํ˜„ƒ„ ํšก‹จ (cross-cutting)ด ํ‘œํ˜„ํ•œ‹ค. „‚ฐ –ดํ”Œฆฌ€ด…˜—„œ˜ ฝํ‚(locking, ™ธฐํ™”) ฌธ œ, ˜ˆ™ธ ฒ˜ฆฌ, กœ… “ด ทธ ˜ˆด‹ค. ก  ํ•„š”ํ•œ ชจ“  ํดž˜Šค“ค— € จ ฝ”“œ ง‘–ด „œฉด ํ•ดฒฐ  ฌธ œด‹ค. ํ•˜€งŒ ดŸฐ ํ–‰œ„Š” ฐฐ˜ ํดž˜ŠคŠ” ž˜  •˜œ(well-defined) —ญํ• งŒ„ ˆ˜ํ–‰ํ•œ‹คŠ” ธฐณธ ›™— œ„ฐฐœ‹ค. ดŸฐ ƒํ™ฉด ฐ”กœ Aspect-Oriented Programming (AOP)ด ž‰ํƒœœ ›ธด ˜—ˆ‹ค.

AOP—„œŠ” aspectŠ” ƒˆกœšด ํ”„กœทธžจ ตฌกฐ  •˜ํ•ด ‚ฌšฉํ•œ‹ค. ดŠ” ‰ฝฒŒ struct, class, interface “ ฐ™ด ํŠ •ํ•œ šฉ„˜ ตฌกฐ ƒฐํ•˜ฉด œ‹ค. Aspect ‚ด—Š” ํ”„กœทธžจ˜ —ฌŸฌ ชจ“ˆ“ค— ํฉ–ด ธ žˆŠ” ธฐŠฅ(ํ•˜‚˜˜ ธฐŠฅด —ฌŸฌ ชจ“ˆ— ํฉ–ด ธ žˆŒ„ œปํ•œ‹ค)„ ชจ•„  •˜ํ•˜ฒŒ œ‹ค.  „ฒด œกœ, –ดํ”Œฆฌ€ด…˜˜ ฐฐ˜ ํดž˜ŠคŠ” ž‹ —ฒŒ –ด„ ธฐŠฅงŒ„ ˆ˜ํ–‰ํ•˜ณ , ถ”€œ ฐ aspect“คด ํšก‹จ ธ ํ–‰œ„(ธฐŠฅ)“ค„ ชจ•„ ฒ˜ฆฌํ•˜ฉฐ  „ฒด ํ”„กœทธžจ„ ดฃจŠ” ํ˜•ํƒœ€ งŒ“ค–ด„‹ค.

AOP Basics

ดํ•ด •ธฐ œ„ํ•ด, ทธฆฌณ  „ช…„ ‰ฝฒŒ ํ•˜ธฐ œ„ํ•ด ˜ˆ “ค–ด€ฉฐ AOP ฐœ…„ „ช…ํ† ก ํ•˜ฒ ‹ค. –ดํ”Œฆฌ€ด…˜˜ —ฌŸฌ Šค ˆ“œ“คด ํ•˜‚˜˜ ฐดํ„ ณตœ ํ•˜Š” ƒํ™ฉ„ € •ํ•ดณดž. ณตœ  ฐดํ„Š” DataŠ” ฐฒด(Data ํดž˜Šค˜ ธŠคํ„Šค)กœ บกŠํ™”˜–ด žˆ‹ค. „œกœ ‹คฅธ —ฌŸฌ ํดž˜Šค˜ ธŠคํ„Šค“คด ํ•˜‚˜˜ Data ฐฒด ‚ฌšฉํ•˜ณ  žˆœ‚˜ ด ณตœ  ฐดํ„—  ‘ํ•  ˆ˜ žˆŠ” ฐฒดŠ” ํ•œ ฒˆ— ํ•˜‚˜”ฉด–ด•งŒ ํ•œ‹ค. ทธ ‡‹คฉด –ด–ค ํ˜•ํƒœด™ธฐํ™” ฉ”ปค‹ˆฆ˜ด „ž…˜–ด• ํ•  ฒƒด‹ค. ฆ‰, –ด–ค ํ•œ ฐฒด€ ฐดํ„ ‚ฌšฉค‘ดฉด Data ฐฒดŠ” ž ฒจ(lock) ธ• ํ•˜ฉฐ, ‚ฌšฉด ‚ฌ„ •Œ ํ•ด œ(unlock)˜–ด• ํ•œ‹ค.  „ํ†ต ธ ํ•ดฒฐ…€ ณตœ  ฐดํ„ ‚ฌšฉํ•˜Š” ชจ“  ํดž˜Šค“คด ํ•˜‚˜˜ ณตํ†ต €ชจ ํดž˜Šค(โ€œworkerโ€  €ฅด„ก ํ•˜ž)กœ€„ฐ ํŒŒƒ˜Š” ํ˜•ํƒœด‹ค. worker ํดž˜Šค—Š” lock() unlock() ฉ”†Œ“œ  •˜ํ•˜—ฌ ž‘—…˜ ‹œž‘ — ด ฉ”†Œ“œ ํ˜ธถœํ† ก ํ•˜ฉด œ‹ค. ํ•˜€งŒ ดŸฐ ํ˜•ํƒœŠ” ‹คŒ ฌธ œ“ค„ ํŒŒƒ‹œํ‚จ‹ค.

  1. ณตœ  ฐดํ„ ‚ฌšฉํ•˜Š” ฉ”†Œ“œŠ” ƒ‹ํžˆ ˜ํ•ด„œ ž‘„˜–ด• ํ•œ‹ค. ™ธฐํ™” ฝ”“œ ž˜ชป ‚ฝž…ํ•˜ฉด ฐ“œฝ(dead-lock)ด ฐœƒํ•˜‚˜ ฐดํ„˜†„ด งˆ ˆ˜ žˆ‹ค. ˜ํ•œ ฉ”†Œ“œ ‚ด€Š” ณธž˜˜ ธฐŠฅ € จ —†Š” ™ธฐํ™” € จ ฝ”“œ“คกœ ”Ÿฝํ˜€งˆ ฒƒด‹ค.
  2. Java™€ ฐ™€ ‹จ ƒ† ชจธ—„œŠ” worker งŒ“ ‹คŠ” ฒƒด ถˆ€Šฅํ•  ˆ˜ žˆ‹ค. –ด–ค ํดž˜Šค“ค€ ด‹คฅธ ํดž˜Šค“คกœ€„ฐ ํ™•žฅ˜—ˆ„ ˆ˜„ žˆธฐ •Œฌธด‹ค. ดŠ” ํŠํžˆ ํดž˜Šค „ธต ตฌกฐ „„€ งˆฌดฆฌœ ํ›„, ’คŠฆฒŒ ™ธฐํ™”˜ ํ•„š”„„ ‹ฌ•˜„ •Œ ํ”ํžˆ ฐœƒํ•œ‹ค. ™ธฐํ™” ‹ ฒฝ “ฐ€ •Š€ ฒ”šฉ ํดž˜Šค ดธŒŸฌฆฌ ํ†ตํ•ด ณตœ  ฐดํ„—  ‘ํ•˜ ค ํ•˜Š” ฒฝšฐ€ ํ•œ ˜ˆ€   ˆ˜ žˆ‹ค.
  3. žฌํ™œšฉ„(reusability)ด ฐ†Œœ‹ค. worker ํดž˜ŠคŠ” ™ธฐํ™”€ ํ•„š”˜ •ŠŠ” ํดž˜Šค‚˜ ‹ฌ€–ด ‹คฅธ ™ธฐํ™” ฉ”ปค‹ˆฆ˜ด ํ•„š”ํ•œ ƒํ™ฉ—„œ„ ‚ฌšฉํ•˜ธธ ›ํ•  ˆ˜ žˆ‹ค. ™ธฐํ™” € จ ฝ”“œ ‚ฝž…ํ•จœกœจ worker ํดž˜ŠคŠ” ํŠ • –ดํ”Œฆฌ€ด…˜— ข…† ธ ํดž˜Šคกœ  „ฝํ•˜ฒŒ œ‹ค.

    šฐฆฌ€ •ž„œ € •ํ•œ –ดํ”Œฆฌ€ด…˜—„œ ™ธฐํ™” ฐœ…€ ‹คŒ ฐ™€ †„“ค„ ฐ–Š”‹ค.

  4. ™ธฐํ™”Š” worker ํดž˜Šค— ํ• ‹œ ตœšฐ„  ž‘—…ด •„‹ˆ‹ค.
  5. ™ธฐํ™” ฉ”ปค‹ˆฆ˜€ worker ํดž˜Šค˜ ตœšฐ„  ž‘—… …ฆฝ ด‹ค.
  6. ํ•œ ฐฒด— Œ€ํ•œ ™ธฐํ™” € จ ฝ”“œ€ ‹œŠคํ…œ  „ฒด— ํšก‹จ œกœ กดžฌํ•œ‹ค. ‹คˆ˜˜ ํดž˜Šค™€ ” งŽ€ ˆ˜˜ ฉ”†Œ“œ“คด ด ™ธฐํ™” ฉ”ปค‹ˆฆ˜— ˜ํ–ฅ ฐ›Š”‹ค.

    AOP—„œŠ” ดŸฐ ํ˜•ํƒœ˜ ฌธ œ ํ•ดฒฐํ•˜ธฐ œ„ํ•ด ƒˆกœšด ํ˜•ํƒœ˜  ‘ ฐฉฒ•„  œธฐํ•˜ณ  žˆ‹ค. AOPŠ” ƒˆกœ „ž…œ ํ”„กœทธžจ ตฌกฐ ํ†ตํ•ด ‹œŠคํ…œ— ํšก‹จ˜–ด žˆŠ” ธฐŠฅ“ค„  •˜ํ•ด ฒ˜ฆฌํ•˜„ก ํ–ˆ‹ค. ด ƒˆกœšด ตฌกฐ šฐฆฌŠ” aspect €ฅธ‹ค.

    šฐฆฌ˜ ˜ˆ— LockดŠ” aspect „ž…ํ•ดณดž. Lock aspectŠ” ‹คŒ ฐ™€ —ญํ• ด ํ• ‹  ฒƒด‹ค.

  7. Data ฐฒด ‚ฌšฉํ•˜Š” ํดž˜Šค“ค„ œ„ํ•ด lock ฐ unlock ฉ”ปค‹ˆฆ˜„  œณตํ•œ‹ค(lock(), unlock()).
  8. Data ฐฒด ˆ˜ •ํ•˜Š” ชจ“  ฉ”†Œ“œ“คด ˆ˜ํ–‰  „— lock()„ ํ˜ธถœํ•˜ณ , ˆ˜ํ–‰ ํ›„—Š” unlock()„ ํ˜ธถœํ•จ„ ณดžฅํ•œ‹ค.
  9. ดƒ˜ ธฐŠฅ„ Data ฐฒด ‚ฌšฉํ•˜Š” ํดž˜Šค˜ žฐ” †ŒŠค €ฒฝํ•˜€ •Šณ  ํˆฌช…ํ•˜ฒŒ ˆ˜ํ–‰ํ•œ‹ค.

    AspectŠ” ˜ –ด–ค “ค„ ˆ˜ํ–‰ํ•  ˆ˜ žˆ„Œ?
    ํŠ • ฉ”†Œ“œ(ex. ฐฒด ƒ„  • ถ” ) ํ˜ธถœ„ กœ…ํ•  ฒฝšฐ aspect€ „›€ด   ˆ˜ žˆ‹ค. ธฐกด ฐฉฒ•Œ€กœฉด log() ฉ”†Œ“œ งŒ“ค–ด †“€ ํ›„, žฐ” †ŒŠค—„œ กœ…„ ›ํ•˜Š” ฉ”†Œ“œ ฐพ•„ log() ํ˜ธถœํ•˜Š” ํ˜•ํƒœ ทจํ•ด•ํ•  ฒƒด‹ค. —ฌธฐ„œ AOP ‚ฌšฉํ•˜ฉด ›ณธ žฐ” ฝ”“œ ˆ˜ •ํ•  ํ•„š” —†ด ›ํ•˜Š” œ„˜—„œ ›ํ•˜Š” กœ…„ ˆ˜ํ–‰ํ•  ˆ˜ žˆ‹ค. ดŸฐ ž‘—… ชจ‘Š” aspectŠ” ™ธ€ ชจ“ˆ— ˜ํ•ด ˆ˜ํ–‰œ‹ค. ˜ ‹คฅธ ˜ˆกœ ˜ˆ™ธ ฒ˜ฆฌ€ žˆ‹ค. Aspect ดšฉํ•ด —ฌŸฌ ํดž˜Šค“ค˜ ‚ฐžฌœ ฉ”†Œ“œ“ค— ˜ํ–ฅ„ Š” catch() กฐํ•ญ(clause)„  •˜ํ•ด –ดํ”Œฆฌ€ด…˜  „ฒด— œ €† ดณ  € œกœ ˜ˆ™ธ ฒ˜ฆฌํ•  ˆ˜ žˆ‹ค.

    ทธ ‡‹คฉด ‘ €€ ˜ฌธด – ˜ค ฒƒด‹ค.

     €€˜AspectŠ” ญ ํ•„š”ํ•œ€?โ€™Š” งˆฌธ— ‹ตํ•ดณดž. ก  ทธ ‡€Š” •Š‹ค. ดƒ—„œ –ธธ‰ํ•œ ชจ“  ฌธ œ“ค€ aspect ฐœ… —†ด ํ•ดฒฐ  ˆ˜ žˆ‹ค. ํ•˜€งŒ aspectŠ” ƒˆกญณ  ณ ฐจ› ธ ถ”ƒ ฐœ…„  œณตํ•ด †Œํ”„ํŠธ›จ–ด ‹œŠคํ…œ˜ „„ ฐ ดํ•ด ณด‹ค ‰ฝฒŒ ํ•œ‹ค. †Œํ”„ํŠธ›จ–ด ‹œŠคํ…œ˜ ทœชจ€ „† ปค ธฐ— ”ฐ€œดํ•ด(understanding)โ€˜ ค‘š”„€ ทธงŒํ €ฐ˜ณ  žˆ‹ค(OOP€ ํ˜„žฌฒ˜Ÿ ฅ˜กœ – ˜คฅดŠ”ฐ žˆ–ด €žฅ ค‘š”ํ•œ š”ธ ค‘ ํ•˜‚˜˜€‹ค). ”ฐ„œ aspect ฐœ…€ „ช… €˜ žˆŠ” „ตฌ€   ฒƒž„— ํ‹€—†‹ค.‹คŒ˜ ˜ฌธ€€˜AspectŠ” ฐฒด˜ บกŠํ™” ›™„ Šคฅด€ •ŠŠƒ?โ€™Š” ฒƒด‹ค. ฒฐก €„งํ•˜žฉด โ€˜œ„ฐ˜ํ•œ‹คโ€™ ด‹ค. ํ•˜€งŒ  œํ•œœ ํ˜•ํƒœกœงŒ ทธ ‡ฒŒ ํ•œ‹คŠ”ฐ ชฉํ•˜„ก ํ•˜ž. aspectŠ” ฐฒด˜ private ˜—ญŒ€  ‘ํ•  ˆ˜ žˆ€งŒ, ‹คฅธ ํดž˜Šค˜ ฐฒด ‚ฌด˜ บกŠํ™”Š” ํ•ด˜€ •ŠŠ”‹ค.

Aspect-Oriented Programming in Java

Markus Voelter, voelter at acm dot org
ฒˆ—ญ: žฐ”Šคํ„”” ดํดฆฝŠค & ชจธง„ตฌ ‹œ‚ฝ wegra (Bok-Youn, Lee) wegra at wegra dot org


http://javastudy.co.kr —„œ ํŽŠต‹ˆ‹ค. eclipse ํ”„กœ ํŠธค‘—„ žˆŠ”ฒƒ ฐ™”ตฐš”. (http://www.eclipse.org/aspectj/) - ž„ธํƒ
AspectJŠ” Eclipse ํ”„กœ ํŠธธฐ ณด‹ค. Xerox PARC ˜ AspectJ ํ”„กœ ํŠธ˜ ํ™ˆํŽ˜ด€€ ˜ฎฒจ ˜จฒƒ ž…‹ˆ‹ค. —ญ‹œ ด€ด wegra‹˜ด ํ•ด„ํ•ด †“œ‹ ˜€ตฐš”. €” งŽ€ ‚ดšฉ€ •„ž˜˜ SisterWiki ฐธณ ํ•˜‹œณ , € จํฌŸ „Šคฌดฆฌ ํ•œฐ€ http://aosd.net ž…‹ˆ‹ค. --NeoCoin

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:32
Processing time 0.0322 sec