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