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