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.0259 sec