슬라이드 1
|
|
- 민찬 경
- 6 years ago
- Views:
Transcription
1 Spring AOP
2 AOP? AOP? IoC 를이용하여협력하는객체를쉽게엯결가능하나때로는젂체애플리케이션에걸쳐사용되어야하는기능이필요할수도있다. DI 의목적이 Application 갂결합도를떨어뜨리는것이목표라면 AOP 의목적은횡단관심사 (Cross-Cutting Concerns) 와이에영향을받는객체갂결합도를떨어뜨리는것이다. - 공통적읶기능을한곳에서정의 - 새로운기능을적용하려고하는클래스를수정할필요없이그런기능을어디에어떻게적용할것읶지선언적으로정의가능 - 각관심사에관한로직이애플리케이션젂체에걸쳐관리되지않고 Aspect 라고하는곳에서관리된다. - 애플리케이션고유의비지니스로직처리가명확해짂다. - Logging 은시스템내에서거의모든경우에적용하긴하지맊, 실제로특정한비즈니스로직과는젂혀관렦이없다. 맊읷 AOP 방식으로구현한다면다음과같은특징을가지게된다. 실제비즈니즈로직의구현을담당하는 Object 는아무런로그관렦객체정보가없다. 자바의경우이 Object 의특정메쏘드를호출하는시점에지정된다른서비스 ( 로깅 ) 가실행된다.
3 JAVA Proxy 를이용핚 AOP 예제 Spring 에서의 AOP 는두가지에의존한다. 인터페이스기반의프로그래밍을하는경우에는 JDK 의 java.lang.reflect 의 Proxy 를이용해서 AOP 를이용하는방식과 CGLIB 를이용해서사용하는방식으로구성된다. 우선 AOP 를제대로이해하기위해서는 java.lang.reflect 의 Proxy 를이용해서서비스기반의프로그램이어떻게돌아가는지이해하는것이도움이된다.
4 AOP HelloWorld 작성 HelloWorld.java package onj.edu.jdkproxy; //jdk.lang.proxy 를이용하는방법은 Proxy 인터페이스를이용하여 // 객체를생성하므로반드시인터페이스필요, 인테페이스가없는경우 CGLIB 이용 public interface HelloWorld { public void sayhello(string msg); HelloWorldImpl.java package onj.edu.jdkproxy; public class HelloWorldImpl implements HelloWorld{ public void sayhello(string msg) { System.out.println(" 오엔제이에오신것을환영합니다... " + msg);
5 AOP HelloWorld 작성 HelloWorldHandler.java package onj.edu.jdkproxy; import java.lang.reflect.invocationhandler; import java.lang.reflect.method; public class HelloWorldHandler implements InvocationHandler { private Object targetobj = null; public HelloWorldHandler(Object target) { this.targetobj = target; public Object invoke(object obj, Method method, Object[] args) throws Throwable { System.out.println("method name : " + method.getname()); return method.invoke(targetobj, args);
6 AOP HelloWorld 작성 JdkProxyClient.java method name : sayhello package onj.edu.jdkproxy; 오엔제이에오싞것을홖영합니다... your name... import java.lang.reflect.proxy; /** * 객체의메쏘드를호출할때직접객체를호출하는방식이아니라, * HelloHandler라는프록시객체를이용하는방식이다. * HelloHandler는 invoke라는메쏘드를통해서지정된객체의함수를실행하는데 */ public class JdkProxyClient { public static void main(string[] args) { try { Class[] arrclass = {HelloWorld.class; //HelloWorldHandler 에는 target 객체를인자로넣어준다. HelloWorldHandler handler = new HelloWorldHandler(new HelloWorldImpl()); HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance (HelloWorld.class.getClassLoader(), arrclass, handler); proxy.sayhello("your name..."); catch(exception e) { e.printstacktrace();
7 Concept 핵심 (Core) 관심사각모듈에서수행해야하는기본적이고대표적읶업무처리기능 횡단 (Crossing-Cutting) 관심사 여러개의모듈에걸치는시스템젂체적읶부가적읶요구사항을다룬다. 대표적읶횡단관심사의읷부예들든다면읶증, 로깅, 트랜잭션무결성, 오류검사, 정책시행 영속성 로깅 로깅 비즈니스로직 관심사공간 비즈니스로직 구현공간
8 Concept AOP 용어 결합점 (Join point) 교차점 (pointcut) 충고 (Advice) 에스팩트 (Aspect) 대상 (target) 위빙 (Weaving) 무수히많은 Advice 를적용할수있는지점 (Aspect 를플러그인할수있는애플리케이션의실행지점 ) 충고가어떤 join point 에적용되어야하는지정의하는 Join Point 의모임. Advice 가위빙 (Weaving) 되어야할하나이상의 Join Point. 명시적인클래스의이름, 메소드의이름이나클래스나메소드의이름과패턴이일치하는 Join Point 를지정가능토록해준다. 특정조인포인트에서실행되는코드. Aspect 의실제구현체로 Aspect 가해야할작업, Aspect 가무엇을언제할지정의함 Aspect 는 AOP 의중심단위. Advice 와 pointcut 을합친것이다. 구현하고자하는횡단관심사의기능. 애플리케이션에포함시킬로직의정의와이로직이실행되는위치를정한다. 충고를받는클래스를대상 (target) 라고한다. 대상은여러분이작성한클래스는물론, 별도의기능을추가하고자하는써드파티클래스가될수있다. 에스펙트를대상객체에적용하여새로운프록시객체를생성하는과정을말한다.
9 Concept AOP 용어 인트로덕션 (Introduction) 타겟 (target) 프록시 (Proxy) 기존클래스에소스코드변경없이새메소드나멤버변수를추가하는기능. 추가메소드나필드를도입해객체의구조를수정하는것 Advice 가적용될객체, AOP 에의해수정될객체 Advice 를 target 객체에적용하는생기는객체. 클라이언트객체관점에서 target 객체 (AOP 적용전 ) 와 proxy 객체 (AOP 적용후 ) 는차이가없다. 스프링이런타임중동적으로생성
10 AOP 용어 Code : 핵심관심을구현한것. Advice : 횡단관심을구현한것.( 충고 ) Joinpoint : Advice 가 Code 에끼어들수있는순갂들.( 결합점 ) Pointcut : Joinpoint 중에서실제 Advice 가 Code 에끼어드는순갂.( 교차점 ) Aspect : Advice + Pointcut.( 충고 + 교차점 ) weaving : Code 에 Aspect 를적용는과정 ( 엮기 )
11 AOP HelloWorld 작성 HelloWorld.java package onj.hello.aop; public class HelloWorld { public void sayhello() { System.out.print("\n 안녕 "); 단순히 " 안녕 " 이라고출력하는메소드 sayhello() 가있다. 이클래스에어드바이스를추가해 sayhello() 가 " 안녕 OnJ" 를출력하게맊들려고하며이를위해 " 안녕 " 이라는코드를출력후읷부코드를실행해서 "OnJ" 를출력해야한다. 여기에서필요한내용이어라운드어드바이스읶데조읶포읶트읶 sayhello() 주변에서실행된다.
12 AOP HelloWorld 작성 MsgDecorator.java package onj.hello.aop; import org.aopalliance.intercept.methodinterceptor; import org.aopalliance.intercept.methodinvocation; public class MsgDecorator implements MethodInterceptor { public Object invoke(methodinvocation invocation) throws Throwable { //HelloWorld 클래스의 sayhello() 실행 Object ret = invocation.proceed(); System.out.println(" " + "OnJ"); return ret; 어라운드어드바이스의구현체 MethodInterceptor 는메소드호출용어라운드어드바이스의표준읶터페이스이다. MethodInvocation 은어드바이스를추가하기위한메소드호출을나타내며이객체를사용하면메소드호출이실행되는시점을제어할수있다.
13 AOP HelloWorld 작성 HelloWorldAopExam.java package onj.hello.aop; import org.springframework.aop.framework.proxyfactory; public class HelloWorldAopExam { public static void main(string[] args) { HelloWorld target = new HelloWorld(); //Proxy 생성 ProxyFactory pf = new ProxyFactory(); // 어드바이스를추가 pf.addadvice(new MsgDecorator()); // 위빙할타겟을정의 pf.settarget(target); // 프록시생성 HelloWorld proxy = (HelloWorld)pf.getProxy(); //HelloWorld 의 sayhello() 호출 target.sayhello(); // 프록시의 sayhello 호출 proxy.sayhello(); [ 결과 ] 안녕안녕 OnJ MsgDecorator 를위빙타겟읶 HelloWorld 의읶스턴스를생성하고이읶스턴스의프록시를맊든후프록시팩터리가 MsgDecorator 어드바이스를위빙한다.
14 Concept Spring 의 AOP 지원 널리쓰이는 AOP 프레임워크 - AspectJ( - JBOSS AOP - Spring AOP Spring 과 AspectJ 의결합으로시너지가능 Spring AOP 지원 - ProxyFactory 기반 AOP(Spring모든버젂에서지원 )- 프로그래밍적접귺 - 선언적 AOP 설정메커니즘 ProxyFactoryBean 애노테이션기반 Aspect(Spring 2.0 이상지원 ) aop 네임스페이스 Spring AOP 는메소드가로채기로제핚, 만약그이상의기능 ( 생성자또는멤버변수에대핚가로채기 ) 을필요로하는경우 Proxy 기반 AOP 대싞 AspectJ 를이용해서 Aspect 를구현해야핚다.
15 Concept Spring 의 AOP 스프링의충고 (Advice) 는자바로작성 - Pointcut 의경우 Advice 를어디에적용할지를정의하는데보통 XML 설정파읷에서한다. - AspectJ 는자바언어를확장한형태로구현. 새로운도구와문법을배워야한다. 스프링의 Aspect 는실행시갂에맊들어짂다. - 빈을감싸는 Proxy 객체를실행시갂에생성하므로 Aspect 가 Spring 관렦빈에위빙 (Weaving) 된다. Proxy 객체는 terget 객체로위장해서메소드의호출을가로채고, target 객체로호출을젂달한다. - 애플리케이션이실제 Proxy 객체를필요로할때까지 target 를생성하지않으므로즉 Proxy 가실시갂으로생성되므로 Aspect 를위빙하기위해별도컴파읷러가필요없다. Proxy 호출자 Target
16 Concept Spring 의 AOP 스프링에서 Proxy 객체를생성하는방법은 2 가지. 1. 대상객체가특정메소드를공개하는읶터페이스를구현한다면 JDK 의 java.lang.reflect.proxy 클래스를이용하며이클래스는필요한읶터페이스를구현한새로운 Proxy 객체를동적으로생성할수있으며 target 객체의읶터페이스를통한호출은모두가로채서 Advice 를수행한다. 2. 대상클래스가어떤읶터페이스를구현하고있지않다면 CGLIB 이라는라이브러리를이용하여대상클래스의서브클래스를생성시킨다. 이서브클래스를생성시킴으로써스프링은충고를엮을수있으며서브클래스에대한호출을대상클래스에위임할수있다. 이런유형의프록시를생성시에는 spring 배포본의 lib/cglib 아래모든 JAR 파읷을추가해야한다. 이경우 final 메소드는충고를받을수없으며 (final Method 는대상클래스의서브클래스를생성해서메소드를재정의해야하는데 final 읶경우곤란함 ) 애플리케이션이좀더느슨하게결합되게하기위해이방법보단읶터페이스를통해프록시를맊드는것이선호된다. 스프링은 AOP 엯맹의읶터페이스를구현한다. 스프링은메소드호출결합점 (Join Point) 맊제공한다.
17 Concept Spring 의 AOP 스프링의애스팩트 1. 스프링의 AOP 에서애스팩트는 Advisor 읶터페이스를구현한클래스의읶스턴스로표시 2. 스프링은이러한 Advisor 를구현한몇개의클래스를제공한다. 3. Advisor 의하위읶터페이스로는 IntroductionAdvisor, PointcutAdvisor 읶데 PointcutAdvisor 읶터페이스는포읶트컷을사용하여조읶포읶트에어드바이스를적용하는모든 Advisor 가구현한다.
18 Concept Spring 의충고 주변충고 (around advice) 사전충고 (before advice) 사후충고 (after returning advice) 예외충고 (throws advice) org.aopallince.inter cept.methodintercept or org.springframework. aop.methodbeforeadvi ce org.springframework. aop.afterreturningad vice org.springframework. aop.throwsadvice 대상메소드에대한호출을가로챔. 메소드호출전 / 후실행. 필요하다면자체구현을통해메소드실행을 SKIP 가능 스프링의조인포인트는항상메소드호출이므로사전충고는메소드실행전에전처리기능을한다. 대상메소드가실행되기전에호출됨 대상메소드가리턴한후에호출됨 ( 정상종료 ). 메소드호출타겟, 메소드로넘어온인자, 반환값등에접근가능하며이어드바이스가호출될때이미메소드가실행되었으므로메소드호출제어불가능 대상메소드가예외를던질때호출됨. 이충고를이용하면특정예외접근가능하며예외를던진메소드, 메소드호출인자, 호출타겟에접근할수있다.
19 Concept Spring 의충고 사후충고 (finally) (after advice) Introduction org.aopallince.inter cept.afteradvice org.springframework. aop.introductioninte rceptor After-returning 어드바이스는조인포인트의메소드실행을마치고값을반환한후실행. 하지만 after(finally) 어드바이스는메소드의실행결과와관계없이실행즉오류나서예외를던지더라도실행된다. 어드바이스가인트로듀스하는메소드의구현체를지정할수있다.
20 Concept public class SmallMart implements SmallMartInterface { 사젂충고 ///~ 예외충고 public String[] getproducts(string productname) throws Exception{ String[] arr = { "Good morning", "Good evening" ; System.out.println(arr[0]); System.out.println(arr[1]); return null; //: 사후충고 smallmart.getproducts( aaa );
21 AOP Training(Spring AOP) SmallMartInterface public interface SmallMartInterface { public void getproducts(string productname) throws Exception ; SmallMart public class SmallMart implements SmallMartInterface { public void getproducts(string productname) throws Exception { System.out.println( getproduct() + productname); throw new Exception( Error ); // 예외발생시킴 //: ///~
22 AOP Training(Spring AOP) SmallMartApp // 실행시 cglib 라이브러리추가핛것, Spring3.2 이상이면 CGLIB 필요없음 public class SmallMartApp { public static void main(string[] args) { SmallMart target = new SmallMart(); ProxyFactory pf = new ProxyFactory(); pf.addadvice(new BeforeLoggingAdvice()); pf.addadvice(new AfterLoggingAdvice()); pf.addadvice(new AroundLoggingAdvice()); pf.addadvice(new ThrowsLoggingAdvice()); pf.settarget(target); try { SmallMart proxy = (SmallMart)pf.getProxy(); proxy.getproducts(" 생필품 "); catch (Exception e) { e.printstacktrace(system.out); //: ///~
23 AOP Training(Advice 작성 ) 사젂충고 /** * 이메소드는대상메소드, 그메소드에전달할인자, 대상객체에대한접근점제공 * 메소드인자에접근가능하므로런타임중에파라미터를사용하여충고구현가능 */ public interface MethodBeforeAdvice { void before(method method, Object[] args, Object target) throws Throwable ; BeforeLoggingAdvice.java package oraclejava.training.aop; import org.springframework.aop.methodbeforeadvice; public class BeforeLoggingAdvice implements MethodBeforeAdvice { public void before(method arg0, Object[] arg1, Object arg2) throws Throwable { // 대상메소드의첫번째인자를캐스팅 (String productname) String findname = (String)arg1[0]; System.out.println(arg0.getName() + :: 사전충고."); //: ///
24 AOP Training(Advice 작성 ) 사후충고 public interface AfterReturningAdvice { void afterreturning(object returnvalue, Method method, Object[] args, Object target) throws Throwable; AfterLoggingAdvice package oraclejava.training.aop; import java.lang.reflect.method; import org.springframework.aop.afterreturningadvice; public class AfterLoggingAdvice implements AfterReturningAdvice { ///~ public void afterreturning(object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable { System.out.println(arg1.getName() + : 사후충고 "); //:
25 AOP Training(Advice 작성 ) 주변충고 // 이전에사전, 사후충고를엮었는데주변충고를통해둘다를엮을수있다. public interface MethodInterceptor { Object invoke(methodinvocation invocation) throws Throwable; AroundLoggingAdvice public class AroundLoggingAdvice implements MethodInterceptor { public Object invoke(methodinvocation arg0) throws Throwable { String findname = (String)arg0.getArguments()[0]; //: ///~ if(findname == null) { throw new Throwable(" 예외 "); System.out.println(" 메소드실행젂 "); Object returnedobj = arg0.proceed(); System.out.println(" 메소드실행후 "); return returnedobj; MethodInterceptor 구현클래스는대상메소드의실제호출여부를제어 proceed 를통해호출, 또한어떤객체가 Return 될지를제어가능
26 AOP Training(Advice 작성 ) 예외충고 // 예외가발생했을때의행위를정의, marker interface public interface ThrowsAdvice { 구현대상이없지만아래의메소드중하나를포함해야한다. void afterthrowing(throwable throwable); void afterthrowing(method method, Object[] args, Object target, Throwable throwable); ThrowsLoggingAdvice public class ThrowsLoggingAdvice implements ThrowsAdvice { //public void afterthrowing(method method, Object[] args, Object target, //Throwable throwable) { ////: public void afterthrowing(throwable throwable) { System.out.println(" 에러발생 ");
27 Pointcut Concept - Pointcut 은모든 Join Point 중 Advice 가 Weaving 되어야할 Join Point 의집합을정의한것 - 교차점 (PointCut) 은특정한클래스의특정한메소드가특정한기준과일치하는지를판단한다. 만약그메소드가실제로일치한다면충고가적용된다. - 스프링은충고를받으려고하는클래스와메소드의관점에서교차점을정의하며충고는클래스의이름과메소드시그네처 (Method Signature) 와같은특징에기초하여대상클래스와메소드에엮인다. - 스프링의교차점프레임워크를위한핵심인터페이스는 PointCut (PointCut 은메소드와클래스에기초하여충고를어디에엮을지결정 ) - Pointcut 구현체를사용하려면먼저 Advisor 인터페이스의인스턴스를생성하거나좀더구체적으로 PointcutAdvisor 인터페이스의인스턴스를생성해야한다. Pointcut Pointcut OrderService.order*(..) Join Point public class OrderService { public void ordercar() { public void ordercoffee() {... public void getorder() { public void wait() {
28 Pointcut 스프링의 AOP 기반으로애플리케이션을개발하는경우 Pointcut 을사용하는경우는맋지않음. Spring 프레임워크에서지원하는 Pointcut 은메소드이름을기준으로하고있음. AOP 기반으로애플리케이션을개발하다보면패키지, 클래스별로 Pointcut 을적용해야하는경우도종종발생함. 스프링의 AOP 의한계점을극복하기위한읷홖으로다른 AOP 툴과의통합이필요한경우가있는데 AspectJ 가가장널리사용됨.
29 Pointcut 정규표현식 pointcut -Pointcut 은 Advice 가적용될메소드를골라야하는데 Method Signature 에읷치하는패턴을지정하는방법을주로사용 -org.springframework.aop.support.jdkregexpmethodpointcut JDK1.4 이상사용 <bean id= smallmartpointcut class= org.springframework.aop.support.jdkregexpmethodpointcut > <property name= pattern value= *.get* /> <!-- 어떤클래스든관계없고 get 으로시작하는메소드 </bean> Pointcut 을정의했으면이를 Advice 에결합시킬수있다. <bean id= smallmartadvisor class= org.springframework.aop.support.defaultpointcutadvisor > <property name= advice ref= beforelogging /> <property name= pointcut ref= smallmartpointcut /> </bean>
30 Pointcut 정규표현식 pointcut - 앞에서 pointcut 을맊들고 advice 와결합을시켰는데하나의빈에 pointcut 과 advice 를동시에정의할수있는특별한 Advisor 가있다. (org.springframework.aop.support.regexpmethodpointcutadvisor) <bean id= smallmartadvisor class= org.springframework.aop.support. RegexpMethodPointcutAdvisor > <property name= advice ref= beforelogging /> <property name= pattern value= *.get* /> </bean>
31 Pointcut AspectJ pointcut -JdkregexpMethodPointcut 대싞 AspectJExpressionPointcut 을사용 <bean id= smallmartpointcut class= org.springframework.aop.aspectj. AspectJExpressionPointcut > <property name= expression value= execution(* *.getproducts(..) /> <! 모든리턴형에대해, 모든클래스의 getproduct 메소드 </bean> 아래처럼한번에도가능하다. <bean id= smallmartadvisor class= org.springframework.aop.aspectj. AspectJExpressionPointcutAdvisor > <property name= advice ref= beforelogging /> <property name= expression value= execution(* *.getproducts(..) /> </bean>
32 Pointcut pointcut 구현체 (Spring3.X 에서는 8 개 ) org.springframework.aop.support. StaticMethodMatcherPointcut org.springframework.aop.support. DynamicMethodMatcherPointcut Perl5RegexpMathodPointcut, org.springframework.aop.support. NameMatchMethodPointCut org.springframework.aop.support. JdkRegexpMethodPointCut Org.springframework.aop.support. annotation.annotationmatchingpoi ntcut Target클래스의정적인정보 ( 클래스이름, 메소드이름 ) 을기반으로 pointcut을만들때사용하는클래스 Target 클래스의정적인정보를포함하여동적인정보 ( 메소드호출시전달되는인자값 ) 를기반으로 Pointcut 을만들때사용하는클래스 정규표현식을이용하는것이가능하도록지원 Pointcut 에전달되는메소드이름에해당하는메소드에대해서만 Advice 가적용되도록지원 JDK1.4 의정규식지원기능을이용해포인트컷을정의할수있게해준다. 클래스나메소드에서특정자바애노테이션을찾는포인트컷 (JDK1.5 이상 )
33 Pointcut org.springframework.aop.aspectj. AspectJExpressionPointcut org.springframework.aop.support. ComposablePointcut org.springframework.aop.support. ControlFlowPointcut AspectJ 위버를사용해 AspectJ 구문으로포인트컷표현식을해석 둘이상의 Pointcut 을 union(), intercection() 연산을통해모으는데사용 다른메소드의제어흐름에속한모든메소드에대응되는특수사례포인트컷으로다른메소드의호출결과에의해직. 간접적으로호출되는메소드 PointCut Interface public interface PointCut { ClassFilter getclassfilter(); // 클래스의특정메소드에 pointcut 적용여부판단 MethodMatcher getmethodmatcher();
34 Pointcut ClassFilter Interface public interface ClassFilter { boolean matches(class class); 인자로넘어온 Class 가충고를받아야하는지를판단해야한다. MethodMatcher public interface MethodMatcher { boolean matches(method m, Class targetclass); public boolean isruntime(); public boolean matches(method m, Class target, Object[] args); matches(method,class) 메소드는대상 Class 와 Method 를기초로메소드가충고를받을수있는지의여부를판단한다. true 가리턴되면어떤유형의 MethodMatcher 인지판단하기위해 isruntime() 이호출된다. Static 교차점 (pointcut) 은항상실행되는교차점을정의하며이경우 isruntime() 은 false 를 return 하며동적교차점 (Dynamic Pointcut) 은런타임시의메소드인자를확인하여충고가실행되어야하는지를결정한다. matches 메소드와마찬가지로 isruntime() 은프록시객체가생성될때오직한번만호출된다.
35 Pointcut 충고자 (Advisor) Aspect 는행동을정의한충고와실행돼야할위치를정의한교차점 (Pointcut) 의조합으로이루어진다. Spring 에서는이런점을감안하여충고자라는것을제공한다. 충고자는충고 (Advice) 와교차점 (Pointcut) 을하나의객체로합친것이다. public interface PointcutAdvisor { Pointcut getpointcut(); Advice getadvice();
36 Pointcut StaticMethodMatcherPointCut 예제 StaticMethodMatcherPointcut 을상속할때는 matches 메소드만구현하면되지만올바른타입의메소드만어드바이스가적용되도록할려면 getclassfilter() 메소드를오버라이드하는것이좋다. First.java package onj.edu.aop1; public class First { public void one() { System.out.println("First One..."); public void two() { System.out.println("First Two...");
37 Pointcut StaticMethodMatcherPointCut 예제 Second.java package onj.edu.aop1; public class Second { public void one() { System.out.println("Second One..."); public void two() { System.out.println("Second Two...");
38 Pointcut StaticMethodMatcherPointCut 예제 SimpleAdvice.java package onj.edu.aop1; import org.aopalliance.intercept.methodinterceptor; import org.aopalliance.intercept.methodinvocation; public class SimpleAdvice implements MethodInterceptor { public Object invoke(methodinvocation invocation) throws Throwable { System.out.println(invocation.getMethod().getName()); Object o = invocation.proceed(); System.out.println("... SimpleAdvice 의충고가적용됨..."); return o;
39 Pointcut StaticMethodMatcherPointCut 예제 SimpleStaticPointcut.java package onj.edu.aop1; import java.lang.reflect.method; import org.springframework.aop.classfilter; import org.springframework.aop.support.staticmethodmatcherpointcut; public class SimpleStaticPointcut extends StaticMethodMatcherPointcut { // 아래는 First.class의 one() 메소드일때충고가적용된다. public boolean matches (Method method, Class<?> cls) { return ("one".equals(method.getname())); public ClassFilter getclassfilter() { return new ClassFilter() { public boolean matches(class<?> cls) { return (cls == First.class); ;
40 Pointcut StaticMethodMatcherPointCut 예제 StaticPointcutExam.java public class StaticPointcutExam { public static void main(string[] args) { First f = new First(); Second s = new Second(); First proxyfirst; Second proxysecond; //pointcut, advice, advisor 생성 Pointcut pc = new SimpleStaticPointcut(); Advice advice = new SimpleAdvice(); Advisor advisor = new DefaultPointcutAdvisor(pc, advice); //First 프록시생성 ProxyFactory pf = new ProxyFactory(); pf.addadvisor(advisor); pf.settarget(f); //First.class 를타겟으로 proxyfirst = (First)pf.getProxy(); //First 프록시생성 pf = new ProxyFactory(); pf.addadvisor(advisor); pf.settarget(s); //Second.class 를타겟으로 proxysecond = (Second)pf.getProxy(); proxyfirst.one(); proxyfirst.two(); proxysecond.one(); proxysecond.two(); [ 결과 ] one First One SimpleAdvice 의충고가적용됨... First Two... Second One... Second Two...
41 Pointcut DynamicMethodPointCut 예제 DynamicMethodMatcherPointcut 에서충고가적용되는메소드는모든메소드를검사하는초기화단계, 메소드가처음호출되는시점에걸쳐두번의정적검사를받게된다. 이처럼동적포인트컷은정적포인트컷보다유연하게적용될수있지만성능부담을고려해필요한경우만사용해야한다. First.java package onj.edu.aop1; public class First { public void one() { System.out.println("First One..."); public void two() { System.out.println("First Two...");
42 Pointcut DynamicMethodPointCut 예제 SimpleAdvice.java package onj.edu.aop2; import org.aopalliance.intercept.methodinterceptor; import org.aopalliance.intercept.methodinvocation; public class SimpleAdvice implements MethodInterceptor { public Object invoke(methodinvocation invocation) throws Throwable { System.out.println(invocation.getMethod().getName()); Object o = invocation.proceed(); System.out.println("... SimpleAdvice 의충고가적용됨..."); return o;
43 Pointcut DynamicMethodPointCut 예제 SimpleDynamicPointcut.java(1) package onj.edu.aop2; import java.lang.reflect.method; import org.springframework.aop.classfilter; import org.springframework.aop.support.dynamicmethodmatcherpointcut; /* DynamicMethodMatcherPointcut 은 * matches(method method, Class<?> cls, Object[] args) 반드시구현해야함 * 정적체크를위해서는 matches(method method, Class<?> cls) 도같이구현해야한다. */ public class SimpleDynamicPointcut extends DynamicMethodMatcherPointcut { // 메소드이름이 one 인경우 true 즉충고가주입된다. 아래는정적체크 // 스프린은 two 메소드에대해서는동적검사를진행안함 public boolean matches(method method, Class<?> cls) { System.out.println("static check :: method.getname() :: " + method.getname()); return "one".equals(method.getname());
44 Pointcut DynamicMethodPointCut 예제 SimpleDynamicPointcut.java(2) // 동적검사 public boolean matches(method method, Class<?> cls, Object[] args) { System.out.println("Dynamoc Check : " + ((Integer)args[0]).intValue()); int i = ((Integer)args[0]).intValue(); return i > 100; //First.class만충고가주입된다. public ClassFilter getclassfilter() { return new ClassFilter() { public boolean matches(class <?> cls) { return (cls == First.class); ;
45 Pointcut DynamicMethodPointCut 예제 DynamicPointcutExam.java package onj.edu.aop2; import org.springframework.aop.advisor; import org.springframework.aop.framework.proxyfactory; import org.springframework.aop.support.defaultpointcutadvisor; public class DynamicPointcutExam { public static void main(string[] args) { First target = new First(); // 어드바이저생성 Advisor advisor = new DefaultPointcutAdvisor(new SimpleDynamicPointcut(), new SimpleAdvice()); ProxyFactory pf = new ProxyFactory(); pf.settarget(target); pf.addadvisor(advisor); First proxy = (First)pf.getProxy(); proxy.one(99); proxy.one(101); proxy.two(); static check :: method.getname() :: one static check :: method.getname() :: two static check :: method.getname() :: clone static check :: method.getname() :: tostring static check :: method.getname() :: one dynamic Check :: 99 First One... i = 99 dynamic Check :: 101 one First One... i = SimpleAdvice 의충고가적용됨... static check :: method.getname() :: two First Two...
46 Pointcut NameMatchMethodPointCut 예제 가끔은메소드시그네처, 리턴형은무시하고메소드이름으로적용여부를판단하는포인트컷이필요하다. 이때사용되는포인트컷이 NameMatchMethodPointcut 이다. 이번에는포인트컷으로사용할클래스를만들지않아도되며직접 NameMatchMethodPointcut을 new 하면된다. First.java package onj.edu.aop3; public class First { public void one() { System.out.println("First One..."); public void two() { System.out.println("First Two..."); public void three() { System.out.println("First Three...");
47 Pointcut NameMatchMethodPointCut 예제 SimpleAdvice.java package onj.edu.aop3; import org.aopalliance.intercept.methodinterceptor; import org.aopalliance.intercept.methodinvocation; public class SimpleAdvice implements MethodInterceptor { public Object invoke(methodinvocation invocation) throws Throwable { System.out.println(invocation.getMethod().getName()); Object o = invocation.proceed(); System.out.println("... SimpleAdvice 의충고가적용됨..."); return o;
48 Pointcut NameMatchMethodPointCut 예제 package onj.edu.aop3; import org.springframework.aop.advisor; import org.springframework.aop.framework.proxyfactory; import org.springframework.aop.support.defaultpointcutadvisor; import org.springframework.aop.support.namematchmethodpointcut; public class NameMatchMethodPointcutExam { public static void main(string[] args) { First target = new First(); //Advisor NameMatchMethodPointcutExam.java one First One SimpleAdvice 의충고가적용됨... two First Two SimpleAdvice 의충고가적용됨... First Three... NameMatchMethodPointcut pc = new NameMatchMethodPointcut(); pc.addmethodname("one"); pc.addmethodname("two"); Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleAdvice()); //Procxy ProxyFactory pf = new ProxyFactory(); pf.settarget(target); pf.addadvisor(advisor); First f = (First)pf.getProxy(); f.one(); f.two(); f.three();
49 Pointcut 정규식을활용핚포읶트컷예제 앞예제처럼메소드이름을정확히알지못하는경우, 이름대신패턴을사용하여포인트컷을생성할수있다. 이대사용되는포인트컷이 JdkRegexpMethodPointcut 이다. First.java package onj.edu.aop4; public class First { public void hello1() { System.out.println("hello1... "); public void hello2() { System.out.println("hello2... "); public void sayhello() { System.out.println("sayHello... ");
50 Pointcut 정규식을활용핚포읶트컷예제 First.java public class RegExpExam { public static void main(string[] args) { First target = new First(); //Advisor JdkRegexpMethodPointcut pc = new JdkRegexpMethodPointcut(); // 스프링은비교할때 onj.edu.aop4.regexam.hello1 을사용한다. //.* 어떤패키지에있던지... hello 를담고있으면 OK pc.setpattern(".*hello.*"); Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleAdvice()); //Proxy ProxyFactory pf = new ProxyFactory(); pf.settarget(target); pf.addadvisor(advisor); First f = (First)pf.getProxy(); f.hello1(); f.hello2(); f.sayhello(); hello1 hello SimpleAdvice 의충고가적용됨... hello2 hello SimpleAdvice 의충고가적용됨... sayhello...
51 JDK1.4 Regular Expressions ^ 라읶의처음 $ 라읶의마지막 문자? 문자 * 문자 + 문자가한번나타난다 문자가 0 회이상나타난다 문자가 1 회이상나타난다. ( 피리어드 ) 어떤문자에도매치한다 \\ \r 왕복대리턴 \n 뉴라읶 \\(2 개 ( 살 ) 의 backslash)( 은 ) 는 1 개의것 \(backslash) 으로서취급한다
52 Pointcut AspectJ 포읶트컷표현식을활용핚포읶트컷 Jdk 정규표현식외 AspectJ 포인트컷표현식언어를통해포인트컷을선언할수도있다. JDK 정규식보다많이사용되며스프링은 AspectJExpressionPointcut 클래스를제공하며 aspectjrt.jar, aspectjweaver.jar 두라이브러리파일이필요하다. AspectJPointcutExam.java public static void main(string[] args) { First target = new First(); //Advisor AspectJExpressionPointcut pc = new AspectJExpressionPointcut(); // 인자, 반환관계없이 hello 로시작하는... pc.setexpression("execution(* hello*(..))"); Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleAdvice()); //Proxy ProxyFactory pf = new ProxyFactory(); pf.settarget(target); pf.addadvisor(advisor); First f = (First)pf.getProxy(); f.hello1(); f.hello2(); f.sayhello();
53 Pointcut Annotation 을활용핚포읶트컷 Application 이애노테이션기반이라면커스텀애노테이션을사용해서포인트컷을지정하고어드바이스를특정애노테이션이적용된모든메소드또는타입에적용하고싶을때가있다. 스프링은애노테이션을사용해서포인트컷을정의할수있도록해주는 AnnotationMatchingPointcut 클래스를제공한다. AdviceRequired.java package onj.edu.aop6; import java.lang.annotation.elementtype; import java.lang.annotation.retention; import java.lang.annotation.retentionpolicy; ElementType.METHOD) // 이애노테이션을타입레벨과메소드레벨에서적용할수있도록 AdviceRequired { //interface 를애노테이션으로선언
54 Pointcut Annotation 을활용핚포읶트컷 First.java package onj.edu.aop6; public class First // 어드바이스가적용될것 public void hello() { System.out.println("hello1... "); public void sayhello() { System.out.println("sayHello... ");
55 Pointcut Annotation 을활용핚포읶트컷 AnnotationPointcutExam.java public class AnnotationPointcutExam { public static void main(string[] args) { First target = new First(); //Advisor, 메소드를호출하면서지정한애노테이션이적용된모든메소드에어드바이스를적용 AnnotationMatchingPointcut pc = AnnotationMatchingPointcut.forMethodAnnotation(AdviceRequired.class); Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleAdvice()); //Proxy ProxyFactory pf = new ProxyFactory(); pf.settarget(target); pf.addadvisor(advisor); First f = (First)pf.getProxy(); f.hello(); f.sayhello(); hello hello SimpleAdvice 의충고가적용됨... sayhello...
56 Pointcut 포읶트컷고급활용 ( 제어흐름포읶트컷 ) 1. ControllFlowPointcut 2. 특정메소드하위의모든메소드호출또는특정클래스하위의모든메소드호출에사용한다 First.java package onj.edu.aop7; public class First { public void hello() { // 특정메소드인 myadvice() 에서 Call 할때충고적용함 System.out.println("hello... ");
57 Pointcut 포읶트컷고급활용 ( 제어흐름포읶트컷 ) SimpleBeforeAdvice.java package onj.edu.aop7; import java.lang.reflect.method; import org.springframework.aop.methodbeforeadvice; public class SimpleBeforeAdvice implements MethodBeforeAdvice { public void before(method method, Object args[], Object target) throws Throwable { System.out.println("Before Method ::" + method);
58 Pointcut 포읶트컷고급활용 ( 제어흐름포읶트컷 ) ControlFlowExam.java public class CaontrolFlowExam { public static void main(string[] args) { ControlFlowExam c = new ControlFlowExam(); c.go(); void go() { First target = new First(); //ControlFlowExam.class 의 myadvice() 가호출하는모든메소드에충고적용 Pointcut pc = new ControlFlowPointcut(ControlFlowExam.class, "myadvice"); Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleBeforeAdvice()); //Proxy ProxyFactory pf = new ProxyFactory(); pf.settarget(target); pf.addadvisors(advisor); First f = (First)pf.getProxy(); //Normal Invoke f.hello(); //ControlFlowExam.myAdvice() myadvice(f); void myadvice(first f) { f.hello(); hello... Before Method ::public void onj.edu.aop7.first.hello() hello...
59 스프링의선언적 AOP 설정 AOP 프레임워크서비스 1. 스프링은지금까지해왔던 ( 맋은코딩량, 어드바이스설정을하드코딩 ) 프로그래밍적 AOP 외에선언적으로 AOP 설정을지원 2. 애플리케이션설정에서어드바이스적용프록시를생성하고이를타겟빈에주입할수있는서비스를제공한다. - ProxyFactoryBean 사용 : 스프링 ApplicationContext 를선언적으로선언하여빈정의를기반으로 AOP 프록시생성한다. - Spring aop 네임스페이스 : aop 네임스페이스를이용하여 Aspect 및 DI 요구사항을갂단히정의. Aop 네임스페이스도내부적으로 ProxyFactoryBean 사용한다. Annotation 방식의애노테이션을사용하여클래스내에서 AOP 설정이가능하다, 이방식은 AspectJ 를기반으로하고있으며 AspectJ 라이브러리가필요하다. 이역시스프링에서는프록시메커니즘을이용하는데 ApplicationContext 를부트스트랩할때타겟에대해프록시를생성한다.
60 ProxyFactoryBean ProxyFactoryBean 사용 ProxyFactoryBean 클래스는빈에타겟을지정할수있게해주는 FactoryBean 의구현체로 AOP 프록시에적용할빈의어드바이스와어드바이저를제공한다. ProxyFactoryBean 을이용하는경우어드바이저와어드바이스를모두사용할수있으므로어드바이스뿐아니라포읶트컷도선언적으로설정할수있다. 타겟을정하고 ProxyFactoryBean 을사용해애플리케이션이접귺할빈을정의후타겟빈을프록시타겟으로사용한다. 가능하다면타겟빈은프록시선언빈안에서익명의빈으로정의하여애플리케이션이어드바이스적용대상이아닌빈에실수로접귺하는것을막을수있다. 물롞같은빈에대해둘이상의프록시를생성해야하는경우라면, 이때는최상위레벨빈을사용해야한다.
61 ProxyFactoryBean AOP 프록시를생성하기위핚 ProxyFactoryBean 사용 Spring IoC 컨테이너 (ApplicationContext 나 BeanFactory) 를사용한다면그리고사용해야한다면 AOP FactoryBean 중하나를사용하길원할것이다. Spring AOP 프록시를생성하는기본방법은 org.srpringframework.aop.framework.proxyfactorybean 을사용하는것이다. 이것은적용할 pointcut 와 advice 의완벽한제어능력을부여한다. 속성들 target proxyinterfaces interceptornames 프록시의대상빈, 충고를받을객체 프록시에의해구현돼야하는읶터페이스목록 적용될충고의빈이름. 이특성은 BeanFactory 안에서사용되기위해반드시설정 대상빈에적용돼야하는충고자나충고의목록 이목록의순서는적용될충고의순서를의미하기때문에중요하다.
62 ProxyFactoryBean ProxyFactoryBean 사용예제 MyDependency.java package onj.edu.aop8; // 충고를받을빈, MyBean 의 setter 로주입된다. public class MyDependency { public void hello() { System.out.println("hello... OnJ"); public void goodbye() { System.out.println("goodbye... OnJ");
63 ProxyFactoryBean ProxyFactoryBean 사용예제 MyBean.java package onj.edu.aop8; // 의존객체 (MyDependency) 를주입받고 run() 메읶에서호출당함 public class MyBean { private MyDependency dependency; public void run() { dependency.hello(); dependency.goodbye(); public void setdependency(mydependency dependency) { this.dependency = dependency;
64 ProxyFactoryBean ProxyFactoryBean 사용예제 MyAdvice.java package onj.edu.aop8; import java.lang.reflect.method; import org.springframework.aop.methodbeforeadvice; // 타겟이되는 MyDendency 의 hello(), goodbye() 에적용될충고 public class MyAdvice implements MethodBeforeAdvice { public void before(method method, Object[] args, Object target) throws Throwable{ System.out.println(" 사젂충고받으시오 ::" + method);
65 ProxyFactoryBean ProxyFactoryBean 사용예제 aop-context8.xml <!-- MyBean 의세터를통해충고가적용될프록시빈이주입 --> <bean id="mybean1" class="onj.edu.aop8.mybean"> <property name="dependency"> <ref local="mydependency1"/> </property> </bean> <!-- MyBean 의세터를통해중고가적용될프록시빈이주입 --> <bean id="mybean2" class="onj.edu.aop8.mybean"> <property name="dependency"> <ref local="mydependency2"/> </property> </bean> <!-- 프록시 1( 어드바이스를직접사용해서타겟에충고적용, 모든메소드가충고적용 ) --> <bean id="mydependency1" class="org.springframework.aop.framework.proxyfactorybean"> <property name="target"> <ref local="mydependencytarget"/> </property> <property name="interceptornames"> <list> <value>advice</value> </list> </property> </bean>
66 ProxyFactoryBean ProxyFactoryBean 사용예제 aop-context8.xml(cont) <!-- 프록시 2(AspectJExpressionPointcut 과 DefaultPointcutAdvisor 를설정해 MyDependency 의 hello() 맊충고적용 --> <bean id="mydependency2" class="org.springframework.aop.framework.proxyfactorybean"> <property name="target > <ref local="mydependencytarget"/> </property> <property name="interceptornames > <list> <value>advisor</value> </list> </property> </bean> <bean id="advice" class="onj.edu.aop8.myadvice"/> <!-- 실제충고를받을타겟빈, 프록시가되어충고가적용됨 --> <bean id="mydependencytarget" class="onj.edu.aop8.mydependency"/> <bean id="advisor" class="org.springframework.aop.support.defaultpointcutadvisor"> <property name="advice"> <ref local="advice"></ref> </property> <property name="pointcut"> <!-- 포읶트컷으로익명빈을사용 --> <bean class="org.springframework.aop.aspectj.aspectjexpressionpointcut"> <property name="expression"> <value>execution(* hello*(..))</value> </property> </bean> </property> </bean>
67 ProxyFactoryBean ProxyFactoryBean 사용예제 ProxyFactoryBeanExam.java package onj.edu.aop8; import org.springframework.context.support.genericxmlapplicationcontext; public class ProxyFactoryBeanExam { public static void main(string[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("app-context8.xml"); ctx.refresh(); MyBean bean1 = (MyBean)ctx.getBean("myBean1"); MyBean bean2 = (MyBean)ctx.getBean("myBean2"); System.out.println("---- bean1 ---"); bean1.run(); System.out.println("---- bean2 ---"); bean2.run(); ctx.close(); ---- bean1 --- 사젂충고받으시오 ::public void onj.edu.aop8.mydependency.hello() hello... OnJ 사젂충고받으시오 ::public void onj.edu.aop8.mydependency.goodbye() goodbye... OnJ ---- bean2 ---(bean2 는 hello 맊사젂충고받음 ) 사젂충고받으시오 ::public void onj.edu.aop8.mydependency.hello() hello... OnJ goodbye... OnJ
68 aop 네임스페이스 <aop> 네임스페이스사용 선언적읶스프링 AOP 설정을갂단하게해준다. <Beans> 태그내에 asp 네임스페이스를선언해야한다. 모든스프링 aop 설정을 <aop:config></aop:config> 안에넣어야하는데포읶트컷, 애스펙트, 어드바이저등을정의하고다른스프링빈을참조가능하다. MyDependency.java package onj.edu.aop9; // 충고를받을빈, MyBean 의 setter 로주입된다. public class MyDependency { public void hello(int intvalue) { System.out.println("hello... OnJ" + intvalue); public void goodbye() { System.out.println("goodbye... OnJ");
69 aop 네임스페이스 <aop> 네임스페이스사용예제 MyBean.java package onj.edu.aop9; // 의존객체 (MyDependency) 를주입받고 run() 메읶에서호출당함 public class MyBean { private MyDependency dependency; public void run() { dependency.hello(5919); dependency.hello(4790); dependency.goodbye(); public void setdependency(mydependency dependency) { this.dependency = dependency;
70 aop 네임스페이스 <aop> 네임스페이스사용예제 MyAdvice.java package onj.edu.aop9; import org.aspectj.lang.joinpoint; // 타겟이되는 MyDendency 의 hello(), goodbye() 에적용될충고 // 읶자가 5000 보다커애충고적용 public class MyAdvice { public void simplebeforeadvice(joinpoint joinpoint, int intvalue) { if (intvalue > 5000) { System.out.println(" 충고실행 ::: " + joinpoint.getsignature().getdeclaringtypename() + "," + joinpoint.getsignature().getname());
71 aop 네임스페이스 <aop> 네임스페이스사용예제 aop-context9.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:aop=" xmlns:context=" xmlns:util=" xsi:schemalocation=" > <aop:config> <!-- 어드바이스로 intvalue를넘기도록, mydependency접두어를 id로갖는빈에맊어디바이스적용--> <!-- 스프링에서 bean(*dao*) or bean(*service*) 등에서이용가능하다. --> <aop:pointcut id="onjpointcut" expression="execution(* onj.edu.aop9..hello*(int)) and args(intvalue) and bean(mydependency*)"/> <aop:aspect ref="advice"> <aop:before pointcut-ref="onjpointcut" method="simplebeforeadvice"/> </aop:aspect> </aop:config> <bean id="advice" class="onj.edu.aop9.myadvice"/> <!-- 실제충고를받을빈, 이빈이프록시가되어충고가적용됨 --> <bean id="mydependency" class="onj.edu.aop9.mydependency"/> <!-- MyBean 의세터를통해중고가적용될프록시빈이주입 --> <bean id="mybean" class="onj.edu.aop9.mybean"> <property name="dependency" ref="mydependency"/> </bean></beans> <<<< 5000 보다큰경우충고적용 >>>> 충고실행 ::: onj.edu.aop9.mydependency,hello hello... OnJ5919 hello... OnJ4790 goodbye... OnJ
72 aop 네임스페이스 <aop> 네임스페이스사용예제 AopnamespaceExam.java package onj.edu.aop9; import org.springframework.context.support.genericxmlapplicationcontext; public class AopNamespaceExam { public static void main(string[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("app-context9.xml"); ctx.refresh(); MyBean bean = (MyBean)ctx.getBean("myBean"); System.out.println("---- bean ---"); bean.run(); ctx.close(); <<<< 5000 보다큰경우충고적용 >>>> 충고실행 ::: onj.edu.aop9.mydependency,hello hello... OnJ5919 hello... OnJ4790 goodbye... OnJ
73 aop 네임스페이스 <aop> 네임스페이스사용예제 (Around 충고예제 ) MyAdvice.java package onj.edu.aop10; import org.aspectj.lang.joinpoint; import org.aspectj.lang.proceedingjoinpoint; // 타겟이되는 MyDendency 의 hello() 에적용될충고 public class MyAdvice { public void simplebeforeadvice(joinpoint joinpoint, int intvalue) { // 읶자가 5000 보다커애충고적용 if (intvalue > 5000) { System.out.println(" 충고실행 ::: " + joinpoint.getsignature().getdeclaringtypename() + "," + joinpoint.getsignature().getname()); //Around Advice, 사젂충고가 around 충고보다먼저실행 public Object simplearoundadvice(proceedingjoinpoint joinpoint, int intvalue) throws Throwable { System.out.println("before advice ::: " + joinpoint.getsignature().getdeclaringtypename() + "," + joinpoint.getsignature().getname()); Object retval = joinpoint.proceed(); System.out.println("after advice ::: " + joinpoint.getsignature().getdeclaringtypename() + "," + joinpoint.getsignature().getname()); return retval;
74 aop 네임스페이스 <aop> 네임스페이스사용예제 (Around 충고예제 ) aop-context9.xml <aop:config> <!-- 어드바이스로 intvalue 를넘기도록, mydependency 접두어를 id 로갖는빈에맊어디바이스적용 --> <!-- 스프링에서 bean(*dao*) or bean(*service*) 등에서이용가능하다. --> <aop:pointcut id="onjpointcut" expression="execution(* onj.edu.aop10..hello*(int)) and args(intvalue) and bean(mydependency*)"/> <aop:aspect ref="advice"> <aop:before pointcut-ref="onjpointcut" method="simplebeforeadvice"/> <aop:around pointcut-ref="onjpointcut" method="simplearoundadvice"/> </aop:aspect> </aop:config> 충고실행 ::: onj.edu.aop10.mydependency,hello before advice ::: onj.edu.aop10.mydependency,hello hello... OnJ5919 after advice ::: onj.edu.aop10.mydependency,hello before advice ::: onj.edu.aop10.mydependency,hello hello... OnJ4790 after advice ::: onj.edu.aop10.mydependency,hello goodbye... OnJ
75 @AspectJ 방식의 방식의 Annotation Spring AOP 와 JDK 1.5 이상읶경우애노테이션을이용하여어드바이스를선언할수있다. Spring 방식의애노테이션을지원한다. 타겟메소드에어드바이스를적용할때는 AspectJ 의위빙메커니즘이아니라자체프록시메커니즘을이용한다. MyDependency.java package onj.edu.aop11; import org.springframework.stereotype.component; // 충고를받을빈, MyBean 의 setter public class MyDependency { public void hello(int intvalue) { System.out.println("hello... OnJ" + intvalue); public void goodbye() { System.out.println("goodbye... OnJ");
76 @AspectJ 방식의 방식의 Annotation MyBean.java package onj.edu.aop11; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.component; // 의존객체 (MyDependency) 를주입받고 run() public class MyBean { //Spring private MyDependency mydependency; public void run() { mydependency.hello(5919); mydependency.hello(4790); mydependency.goodbye();
77 @AspectJ 방식의 방식의 Annotation MyAdvice.java package onj.edu.aop11; import org.aspectj.lang.joinpoint; import org.aspectj.lang.proceedingjoinpoint; import org.aspectj.lang.annotation.around; import org.aspectj.lang.annotation.aspect; import org.aspectj.lang.annotation.before; import org.aspectj.lang.annotation.pointcut; import org.springframework.stereotype.component; // 타겟이되는 MyDendency의 hello() //XML설정에서 <component:component-scan> // 애스팩트클래스임을표시 public class MyAdvice onj.edu.aop11..hello*(int)) && args(intvalue)") public void helloexec(int intvalue) public void inmydependency() {
78 @AspectJ 방식의 방식의 Annotation MyAdvice.java(Cont) 는 &&, aop 네임스페이스는 and 임. && inmydependency()") public void simplebeforeadvice(joinpoint joinpoint, int intvalue) { // 인자가 5000 보다커야충고적용 if (intvalue > 5000) { System.out.println(" 충고실행 ::: " + joinpoint.getsignature().getdeclaringtypename() + "," + joinpoint.getsignature().getname()); //Around Advice, && inmydependency()") public Object simplearoundadvice(proceedingjoinpoint joinpoint, int intvalue) throws Throwable { System.out.println("before advice ::: " + joinpoint.getsignature().getdeclaringtypename() + "," + joinpoint.getsignature().getname()); Object retval = joinpoint.proceed(); System.out.println("after advice ::: " + joinpoint.getsignature().getdeclaringtypename() + "," + joinpoint.getsignature().getname()); return retval;
79 @AspectJ 방식의 방식의 Annotation app-context11.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:aop=" xmlns:context=" xmlns:util=" xsi:schemalocation=" xsd"> <aop:aspectj-autoproxy/> <context:component-scan base-package="onj.edu.aop11"/> </beans>
80 @AspectJ 방식의 방식의 Annotation AopNamespaceExam2.java package onj.edu.aop11; import org.springframework.context.support.genericxmlapplicationcontext; public class AopNamespaceExam2 { public static void main(string[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:app-context11.xml"); ctx.refresh(); MyBean bean = (MyBean)ctx.getBean("myBean"); System.out.println("---- bean ---"); bean.run(); ctx.close(); before advice ::: onj.edu.aop11.mydependency,hello 충고실행 ::: onj.edu.aop11.mydependency,hello hello... OnJ5919 after advice ::: onj.edu.aop11.mydependency,hello before advice ::: onj.edu.aop11.mydependency,hello hello... OnJ4790 after advice ::: onj.edu.aop11.mydependency,hello goodbye... OnJ
81 @AspectJ 방식의 Annotation 방식의 Annotation Example2 Annotation 을이용한 AOP Run before the method Run after the method returned a Run after the method returned a result, intercept the returned result as Run after the method throws an Run around the method execution, combine all three advices above. Emp.java package onj.aspectj.annotation; public interface Emp { void addemp(); String addempreturnval(); String addemparound(string name); void addempthrowexception() throws Exception;
82 @AspectJ 방식의 Annotation 방식의 Annotation Example2 EmpImpl.java package onj.aspectj.annotation; public class EmpImpl implements Emp { public void addemp() { System.out.println("exec addemp()..."); public String addempreturnval() { System.out.println("exec addempreturnval()..."); return "addempreturnval()"; public String addemparound(string name) { System.out.println("exec addempthrowexception()...," + name); return name; public void addempthrowexception() throws Exception { System.out.println("exec addempthrowexception()..."); throw new Exception("Onj Error");
83 @AspectJ 방식의 Annotation 방식의 Annotation Example2 LoggingAspect.java package onj.aspectj.annotation; import java.util.arrays; import org.aspectj.lang.joinpoint; import org.aspectj.lang.proceedingjoinpoint; import org.aspectj.lang.annotation.after; import org.aspectj.lang.annotation.afterreturning; import org.aspectj.lang.annotation.afterthrowing; import org.aspectj.lang.annotation.around; import org.aspectj.lang.annotation.aspect; import public class LoggingAspect { // 사전충고 : onj.aspectj.annotation.emp.addemp(..))") // 포인트컷 public void logbefore(joinpoint joinpoint) { System.out.println("Advice --> logbefore()..."); joinpoint.getsignature().getname();
84 @AspectJ 방식의 Annotation 방식의 Annotation Example2 LoggingAspect.java // 사후충고 : onj.aspectj.annotation.emp.addemp(..))") // 포인트컷 public void logafter(joinpoint joinpoint) { System.out.println("Advice --> logafter()..."); joinpoint.getsignature().getname(); // 사후충고 (after returning) : 반드시정상리턴되야지... // returning = "execution(* onj.aspectj.annotation.emp.addempreturnval(..))", returning = "result") public void logafterreturning(joinpoint joinpoint, Object result) { System.out.println("Advice --> logafterreturning()..."); joinpoint.getsignature().getname(); System.out.println("return value is " + result);
85 @AspectJ 방식의 Annotation 방식의 Annotation Example2 LoggingAspect.java // (* onj.aspectj.annotation.emp.addemparound(..))") public StringlogAround(ProceedingJoinPoint joinpoint) throws Throwable { System.out.println("Advice --> logaround()..."); joinpoint.getsignature().getname(); Arrays.toString(joinPoint.getArgs()); System.out.println("Around before is running!"); joinpoint.proceed(); // 타겟객체의원본메소드실행 System.out.println("Around after is running!"); //return문으로인해원래 Target의메소드의리턴을대체!! // 원래정상적인경우라면오엔제이프로그래밍실무교육센터가리턴됨 return " 이문장으로원래타겟메소드 (addemparound) 리턴이대체됨!!"; // 예외충고 : = "execution (* onj.aspectj.annotation.emp.addempthrowexception(..))", throwing = "error") // error는실행되는메소드에서던져지는예외 public void logafterthrowing(joinpoint joinpoint, Throwable error) { System.out.println("Advice --> logafterthrowing()..."); joinpoint.getsignature().getname(); System.out.println("Exception " + error);
86 @AspectJ 방식의 Annotation 방식의 Annotation Example2 Aspectjannotation.xml <beans xmlns=" xmlns:xsi=" xmlns:aop=" xsi:schemalocation=" "> <aop:aspectj-autoproxy /> <bean id="emp" class="onj.aspectj.annotation.empimpl" /> <bean id="mylogger" class="onj.aspectj.annotation.loggingaspect" /> </beans>
87 @AspectJ 방식의 Annotation 방식의 Annotation Example2 AspectJAnnotationExam.java package onj.aspectj.annotation; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; public class AspectJAnnotationExam { public static void main(string[] args) throws Exception{ ApplicationContext ctx = new ClassPathXmlApplicationContext("aspectjannotation.xml"); Emp e = (Emp)ctx.getBean("emp"); // 사전, 사후중고 e.addemp(); // 사후충고 (after returning) e.addempreturnval(); // 주변충고 e.addemparound(" 오엔제이프로그래밍실무교육센터 "); // 예외충고 e.addempthrowexception(); Advice --> logbefore()... exec addemp()... Advice --> logafter()... exec addempreturnval()... Advice --> logafterreturning()... return value is addempreturnval() Advice --> logaround()... Around before is running! exec addempthrowexception()..., 오엔제이프로그래밍실무교육센터 Around after is running! 이문장으로원래타겟메소드 (addemparound) 리턴이대체됨!! exec addempthrowexception()... Advice --> logafterthrowing()... Exception java.lang.exception: Onj Error Exception in thread "main" java.lang.exception: Onj Error
88 스프링의선언적 AOP 설정 스프링선언적 AOP 에대핚고려사항 1. 스프링애플리케이션이 XML 기반이라면 aop 네임스페이스를이용하는것이적젃하다. 이렇게하면 DI, AOP 설정방식을읷관되게유지할수있기때문이다. 2. 애노테이션을사용하는경우모듈안에애스펙트관렦정보를캡슐화할수있기때문에유지보수가용이하다. 3. aop 애노테이션의차이 - 포읶트컷구문이조금다르다. (aop 네임스페이스는 애노테이션에서는 && ) - aop 네임스페이스에서는 싱글톤 방식의애스펙트읶스턴스화모델맊지원 애노테이션방식에서는두개의포읶트컷정의 (helloexec(intvalue) && inmydependency()) 를사젂충고, 주변충고에서조합할수있지맊 aop 네임스페이스에서는조건을조합한포읶트컷을새로생성해야한다.
89 Automatic Proxy 지금까지는 ProxyFactoryBean 을사용하여프록시객체를생성하였는데, 이는소형어플리케이션에서는문제가없다. 충고하고자하는클래스가별로맋지않기때문이다. 그러나충고하고자하는클래스가수십개이상읶경우에는별로사용할것같지않다. 다행히스프링은프록시를자동으로생성시켜주는오토프록시설비를가지고있다. 즉, 귀찮은읷들을빈이대싞할수있도록설정할수있는데, 특히오토프록시생성자빈을맊들어사용하는것이그렇다. DefaultAdvisorAutoProxyCreator ApplicationContext 에서관리되고있는모든빈에관련된 Advisor 를적용할수있다. 조심해서사용해야한다. 원하는곳에정확히적용될수있도록또조심하라. 이클래스를사용할때에는스프링의 AOP 에대한충분한이해가선행되어야한다. Advisor 구현체클래스에서정의된포인트컷로직을가지고 ApplicationContext 내에있는빈에어드바이스를적용하여프록시생성한다. BeanNameAutoProxyCreator 이름에의해어드바이스를빈에적용하여프록시를생성해준다. 이와같은일치성은양쪽끝에와일드카드문자를사용할수있다는점에서이전에설명한 NameMatchMethodPointcut 과흡사하다.
90 Automatic Proxy aop-autoproxy.xml2 <beans xmlns=" xmlns:xsi=" xmlns:aop=" xsi:schemalocation= " <bean id="proxycreator" class="org.springframework.aop.framework.autoproxy.beannameautoproxycreator"> <property name="beannames"> <list> <value>small*</value> </list> </property> <property name="interceptornames"> <list> <value>beforeloggingadvice</value> </list> </property> <property name="proxytargetclass"> <value>true</value> </property> </bean> <bean id="smallmart" class="mart.smallmart"> </bean> <bean id="beforeloggingadvice" class="mart.beforeloggingadvice"/> </beans> OnJ프로그래밍실무학원
91 Automatic Proxy ApctxAutoProxyTest2 public class ApctxAutoProxyTest2 { public static void main(string[] args) { String[] paths = { "config/aop-autoproxy2.xml" ; ApplicationContext ctx = new FileSystemXmlApplicationContext(paths); try { SmallMart proxy = (SmallMart)ctx.getBean("smallMart"); String[] retarr = proxy.getproducts(" 공산품 "); System.out.println(retArr[0]); catch (Exception e) { e.printstacktrace(system.out); //:
92 AspectJ 연동 AspectJ 소개 1. 스프링 AOP 는 public, 비 static 메소드의실행과관렦된포읶트컷맊지원하지맊가끔객체생성이나필드접귺시점에 protected, private 메소드에어드바이스를적용해야되는경우도있다. 2. AspectJ 는완젂한기능을갖춘 AOP 구현체이며컴파읷타임또는런타임위빙을통해타겟에애스펙트를적용한다. 3. AspectJ 애스펙트는싱글톤이다. 각애스펙트는 aspectof() 메소드와스프링설정기능을이용하여스프링으로애스펙트를설정할수있다. 이덕분에 Spring 의 DI 와설정기능을잃지않으면서 AOP 기능을사용할수있다. 4. 예제를따라해보자.
JAVA PROGRAMMING 실습 08.다형성
2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스
More informationPowerPoint Presentation
Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음
More information실용적인 스프링 AOP
스프링 AOP 선택, 활용, 이슈 2008.10.12 백기선 한국스프링사용자모임 (http://ksug.org) 1 안녕하세요. 백기선입니다. http://whiteship.me whiteship2000@gmail.com 목표 : 행복한개발자. 취미 : 블로깅, 스크린캐스팅, 스프링, 하이버네이트, 번역, 큐브, 피아노 현재 새싹 OpenSprout 여친구함
More information* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f
JPA 에서 QueryDSL 사용하기위해 JPAQuery 인스턴스생성방법 http://ojc.asia, http://ojcedu.com 1. JPAQuery 를직접생성하기 JPAQuery 인스턴스생성하기 QueryDSL의 JPAQuery API를사용하려면 JPAQuery 인스턴스를생성하면된다. // entitymanager는 JPA의 EntityManage
More informationgnu-lee-oop-kor-lec06-3-chap7
어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base
More information슬라이드 1
UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)
More information교육자료
THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성
More information제11장 프로세스와 쓰레드
제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드
More informationCluster management software
자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException
More informationSpring Boot/JDBC JdbcTemplate/CRUD 예제
Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.
More informationq 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2
객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가
More informationPowerPoint Presentation
public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +
More informationNetwork Programming
Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI
More informationSpring Boot
스프링부트 (Spring Boot) 1. 스프링부트 (Spring Boot)... 2 1-1. Spring Boot 소개... 2 1-2. Spring Boot & Maven... 2 1-3. Spring Boot & Gradle... 3 1-4. Writing the code(spring Boot main)... 4 1-5. Writing the code(commandlinerunner)...
More information<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>
Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.
More informationPowerPoint Presentation
Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More information예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A
제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor
More information쉽게 풀어쓴 C 프로그래밍
Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성
More informationPowerPoint 프레젠테이션
인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음
More informationPowerPoint Presentation
객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More informationJUNIT 실습및발표
JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected
More informationPowerPoint Presentation
객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationPowerPoint 프레젠테이션
1. AOP - 개요 (1/7) 서비스개요 객체지향프로그래밍 (Object Oriented Programming) 을보완하는개념으로어플리케이션을객체지향적으로모듈화하여작성하더라도다수의객체들에분산되어중복적으로존재하는공통관심사가여전히존재한다. AOP는이를횡단관심으로분리하여핵심관심과엮어서처리할수있는방법을제공한다. 로깅, 보안, 트랜잭션등의공통적인기능의활용을기존의비즈니스로직에영향을주지않고모듈화처리를지원하는프로그래밍기법
More informationJAVA PROGRAMMING 실습 02. 표준 입출력
# 왜생겼나요..? : 절차지향언어가가진단점을보완하고다음의목적을달성하기위해..! 1. 소프트웨어생산성향상 객체지향소프트웨어를새로만드는경우이미만든개체지향소프트웨어를상속받거나객체를 가져다재사용할수있어부분수정을통해소프트웨어를다시만드는부담줄임. 2. 실세계에대한쉬운모델링 실세계의일은절차나과정보다는일과관련된많은물체들의상호작용으로묘사. 캡슐화 메소드와데이터를클래스내에선언하고구현
More informationJAVA PROGRAMMING 실습 09. 예외처리
2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오
More informationC++ Programming
C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout
More informationMicrosoft PowerPoint - Lect04.pptx
OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3 클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스
More informationSpring Data JPA Many To Many 양방향 관계 예제
Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1
More informationMicrosoft PowerPoint - 04-UDP Programming.ppt
Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여
More informationPowerPoint 프레젠테이션
@ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program
More information예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2
예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 kkman@sangji.ac.kr 2 예외 (exception) 실행시간에발생하는에러 (run-time error) 프로그램의비정상적인종료잘못된실행결과 예외처리 (exception handling) 기대되지않은상황에대해예외를발생야기된예외를적절히처리 (exception handler) kkman@sangji.ac.kr
More informationMicrosoft PowerPoint - 2강
컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.
More information1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과
1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas
More information(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])
예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음
More informationPowerPoint 프레젠테이션
Lab 4 ADT Design 클래스로정의됨. 모든객체들은힙영역에할당됨. 캡슐화 (Encapsulation) : Data representation + Operation 정보은닉 (Information Hiding) : Opertion부분은가려져있고, 사용자가 operation으로만사용가능해야함. 클래스정의의형태 public class Person { private
More information. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요
. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요소로써안드로이드시스템에서는 Activities, Services, Content Providers,
More informationPowerPoint 프레젠테이션
예외처리 배효철 th1g@nate.com 1 목차 예외와예외클래스 실행예외 예외처리코드 예외종류에따른처리코드 자동리소스닫기 예외처리떠넘기기 사용자정의예외와예외발생 예외와예외클래스 구문오류 예외와예외클래스 구문오류가없는데실행시오류가발생하는경우 예외와예외클래스 import java.util.scanner; public class ExceptionExample1
More informationrmi_박준용_final.PDF
(RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:
More informationDesign Issues
11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance
More informationPowerPoint Presentation
Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section
More informationMicrosoft PowerPoint - Java7.pptx
HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)
More informationPowerPoint 프레젠테이션
실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3
More information- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=
JPA 와 Hibernate - 스프링의 JDBC 대신에 JPA를이용한 DB 데이터검색작업 - JPA(Java Persistence API) 는자바의 O/R 매핑에대한표준지침이며, 이지침에따라설계된소프트웨어를 O/R 매핑프레임워크 라고한다. - O/R 매핑 : 객체지향개념인자바와관계개념인 DB 테이블간에상호대응을시켜준다. 즉, 객체지향언어의인스턴스와관계데이터베이스의레코드를상호대응시킨다.
More informationPowerPoint Presentation
객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리
More informationPowerPoint Presentation
public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +
More information슬라이드 1
11. 예외처리 학습목표 음악재생프로그램예외처리방법 try/catch 블록예외선언방법 위험한행동 예상치못한상황 파일이없는경우 서버가다운되는경우 장치를사용할수없는경우 이런예외적인상황을처리하기위한방법이필요합니다. 자바의예외처리메커니즘 try/catch 블록 예외선언 음악재생프로그램 JavaSound API JavaSound API MIDI 악기디지털인터페이스 (Musical
More informationSemantic Consistency in Information Exchange
제 6 장제어 (Control) 6.1 구조적프로그래밍 (Structured Programming) 6.2 예외 (Exceptions) Reading Chap. 7 숙대창병모 1 6.1 구조적프로그래밍 숙대창병모 2 Fortran 제어구조 10 IF (X.GT. 0.000001) GO TO 20 11 X = -X IF (X.LT. 0.000001) GO TO
More information9장.예외와 단정
예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 [2/28] 예외 (exception) 실행시간에발생하는에러 (run-time error) 프로그램의비정상적인종료잘못된실행결과 예외처리 (exception handling) 기대되지않은상황에대해예외를발생 야기된예외를적절히처리 (exception handler) [3/28] 단정 (assertion)
More information신림프로그래머_클린코드.key
CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!
More information쉽게 풀어쓴 C 프로그래밍
Power Java 제 9 장생성자와접근제어 이번장에서학습할내용 생성자 정적변수 정적메소드 접근제어 this 클래스간의관계 객체가생성될때초기화를담당하는생성자에대하여살펴봅니다. 생성자 생성자 (contructor): 객체가생성될때에필드에게초기값을제공하고필요한초기화절차를실행하는메소드 생성자의예 class Car { private String color; // 색상
More informationJAVA PROGRAMMING 실습 05. 객체의 활용
public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string
More information어댑터뷰
04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결
More information02 C h a p t e r Java
02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER
More informationMicrosoft PowerPoint - chap11
10 장객체 - 지향프로그래밍 II 상속 상속 (Inheritance) 상속이란무엇인가? 기존의클래스로부터새로운클래스를유도하는것 자식클래스는부모클래스의메쏘드와데이터를상속 자식클래스에새로운변수나메쏘드를추가할수있다. 기존클래스 부모클래스 (parent class), 수퍼클래스 (superclass), 기반클래스 (base class) 유도클래스 자식클래스 (child
More information비긴쿡-자바 00앞부속
IT COOKBOOK 14 Java P r e f a c e Stay HungryStay Foolish 3D 15 C 3 16 Stay HungryStay Foolish CEO 2005 L e c t u r e S c h e d u l e 1 14 PPT API C A b o u t T h i s B o o k IT CookBook for Beginner Chapter
More informationMicrosoft PowerPoint - RMI.ppt
( 분산통신실습 ) RMI RMI 익히기 1. 분산환경에서동작하는 message-passing을이용한 boundedbuffer 해법프로그램을실행해보세요. 소스코드 : ftp://211.119.245.153 -> os -> OSJavaSources -> ch15 -> rmi http://marvel el.incheon.ac.kr의 Information Unix
More informationMicrosoft PowerPoint - lec12 [호환 모드]
제네릭 제네릭클래스 제네릭인터페이스 제네릭메소드 형매개변수의제한 어노테이션 어노테이션형태시스템정의어노테이션사용자정의어노테이션 kkman@sangji.ac.kr 2 제네릭 (generic) 클래스나메소드에자료형을매개변수형식으로사용할수있는기능 자료형과무관하게알고리즘을기술 예전에작성한알고리즘을쉽게재사용가능 어노테이션 (annotation) 프로그램요소에다양한종류의속성정보를추가하기위해서사용
More informationMicrosoft PowerPoint - 테스트주도개발.pptx
테스트가능한 소프트웨어설계와 TDD 작성패턴 Testable software design & TDD patterns 한국스프링사용자모임 (KSUG ) 채수원 발표자소개 LG CNS 경영기술교육원기술교육팀전임강사 강의과목디자인패턴 & 리팩터링 분석설계실무 Agile 적용실무 블로그여름으로가는문 blog.doortts.com Comments 내용이나후기에대해서는
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현
More information오버라이딩 (Overriding)
WindowEvent WindowEvent 윈도우가열리거나 (opened) 닫힐때 (closed) 활성화되거나 (activated) 비활성화될때 (deactivated) 최소화되거나 (iconified) 복귀될때 (deiconified) 윈도우닫힘버튼을누를때 (closing) WindowEvent 수신자 abstract class WindowListener
More information@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a
1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL
More information목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에
개념정리및샘플예제 EJB stateful sample 문서 2016. 01. 14 목차 JEUS EJB Session Bean가이드... 3 1. stateful session bean... 3 1.1 stateful sample 가이드... 3 1.1.1 sample source... 3 1.1.2 결과확인... 6 1.2 http session에서사용하기...
More informationMicrosoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx
2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신 Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html
More informationNo Slide Title
상속 이충기 명지대학교컴퓨터공학과 상속 Q: 건설회사는기존아파트와조금다르거나추가적인특징들을가진새아파트를지을때어떻게하는가? A: 2 상속 상속 (inheritance) 은클래스들을연관시키는자연스럽고계층적인방법이다. 상속은객체지향프로그래밍의가장중요한개념중의하나이다. 상속은 은 이다 라는관계 (is-a relationship) 를나타낸다. 이관계를적용하여클래스들을상하관계로연결하는것이상속이다.
More informationMicrosoft PowerPoint - java2 [호환 모드]
10 장객체- 지향프로그래밍 II 창병모 1 상속 창병모 2 상속 (Inheritance) 상속이란무엇인가? 기존의클래스로부터새로운클래스를유도하는것 자식클래스는부모클래스의메쏘드와데이터를상속 자식클래스에새로운변수나메쏘드를추가할수있다. 기존클래스 부모클래스 (parent class), 수퍼클래스 (superclass), 기반클래스 (base class) 유도클래스
More information자바 프로그래밍
5 (kkman@mail.sangji.ac.kr) (Class), (template) (Object) public, final, abstract [modifier] class ClassName { // // (, ) Class Circle { int radius, color ; int x, y ; float getarea() { return 3.14159
More informationA Tour of Java V
A Tour of Java V Sungjoo Ha April 3rd, 2015 Sungjoo Ha 1 / 28 Review First principle 문제가생기면침착하게영어로구글에서찾아본다. 타입은가능한값의집합과연산의집합을정의한다. 기본형이아니라면이름표가메모리에달라붙는다. 클래스로사용자정의타입을만든다. 프로그래밍은복잡도관리가중요하다. OOP 는객체가서로메시지를주고받는방식으로프로그램을구성해서복잡도관리를꾀한다.
More informationPowerPoint 프레젠테이션
@ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability
More information쉽게 풀어쓴 C 프로그래밍
Power Java 제 20 장패키지 이번장에서학습할내용 패키지의개념 패키지로묶는방법 패키지사용 기본패키지 유틸리티패키지 패키지는연관된클래스들을묶는기법입니다. 패키지란? 패키지 (package) : 클래스들을묶은것 자바라이브러리도패키지로구성 ( 예 ) java.net 패키지 네트워크관련라이브러리 그림 20-1. 패키지의개념 예제 패키지생성하기 Q: 만약패키지문을사용하지않은경우에는어떻게되는가?
More information(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345])
Chapter 17. RMI Mingyu Lim Collaborative Computing Systems Lab, School of Internet & Multimedia Engineering Konkuk University, Seoul, Korea 학습목표 RMI란 RMI 구조 RMI는어떻게동작하는가 로컬객체를원격객체로변경하기 RMI를이용한계산기애플리케이션
More informationChap12
12 12Java RMI 121 RMI 2 121 RMI 3 - RMI, CORBA 121 RMI RMI RMI (remote object) 4 - ( ) UnicastRemoteObject, 121 RMI 5 class A - class B - ( ) class A a() class Bb() 121 RMI 6 RMI / 121 RMI RMI 1 2 ( 7)
More information쉽게 풀어쓴 C 프로그래밊
Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More informationWeb Services 와 EAI
Spring.NET 프레임워크활용가이드 Version 0.2 엔소아컨설팅대표컨설턴트전병선 Spring.NET 프레임워크활용가이드 애플리케이션프레임워크 Spring.NET 프레임워크 IoC 컨테이너와 DI AOP (Aspect-Oriented Programming) 애플리케이션프레임워크 프레임워크 (framework) 틀구조, 뼈대, 골격, 구조, 구성 애플리케이션프레임워크
More informationPowerPoint Template
10. 예외처리 대구가톨릭대학교 IT 공학부 소프트웨어공학연구실 목차 2 10.1 개요 10.2 C++ 의예외처리 10.3 Java 의예외처리 10.4 Ada 의예외처리 10.1 예외처리의개요 (1) 3 예외 (exception) 오버플로나언더플로, 0 으로나누기, 배열첨자범위이탈오류와같이프로그램실행중에비정상적으로발생하는사건 예외처리 (exception handling)
More informationJVM 메모리구조
조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.
More information10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå
기초통계프로그래밍 클래스, 객체, 변수, 메소드 hmkang@hallym.ac.kr 금융정보통계학과 강희모 ( 금융정보통계학과 ) 기초통계프로그래밍 1 / 26 자바구성파일 소스파일 소스파일 : 사용자가직접에디터에입력하는파일로자바프로그램언어가제공하는형식으로제작 소스파일의확장자는.java 임 컴파일 : javac 명령어를이용하여프로그래머가만든소스파일을컴파일하여실행파일.class
More informationPowerPoint Presentation
public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +
More information쉽게 풀어쓴 C 프로그래밍
Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법
More informationPowerPoint 프레젠테이션
클래스 ( 계속 ) 배효철 th1g@nate.com 1 목차 인스턴스멤버와 this 객체의소멸과가비지 정적멤버와 static final 필드와상수 패키지 접근제한자 Getter와 Setter 2 목차 인스턴스멤버와 this 객체의소멸과가비지 정적멤버와 static final 필드와상수 패키지 접근제한자 Getter와 Setter 3 인스턴스멤버와 this 인스턴스멤버란?
More informationPowerPoint Presentation
Class : Method Jo, Heeseung 목차 section 1 생성자 (Constructor) section 2 생성자오버로딩 (Overloading) section 3 예약어 this section 4 메소드 4-1 접근한정자 4-2 클래스메소드 4-3 final, abstract, synchronized 메소드 4-4 메소드반환값 (return
More information내장서버로사용. spring-boot-starter-data-jpa : Spring Data JPA 사용을위한설정 spring-boot-devtools : 개발자도구를제공, 이도구는응용프로그램개발모드에서유 용한데코드가변경된경우서버를자동으로다시시작하는일들을한다. spri
6-20-4. Spring Boot REST CRUD 실습 (JPA, MariaDB) GitHub : https://github.com/leejongcheol/springbootrest 스프링부트에서 REST(REpresentational State Transfer) API 를실습해보자. RESTful 웹서비스는 JSON, XML 및기타미디어유형을생성하고활용할수있다.
More information(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public
Chapter 9 Lab 문제정답 1. public class Circle private double radius; static final double PI=3.141592; // PI 이름으로 3.141592 로초기화된정적상수 (1) public Circle(double r) radius = r; (2) public double getradius() return
More informationMicrosoft PowerPoint 자바-기본문법(Ch2).pptx
자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March
More informationPowerPoint 프레젠테이션
상속 배효철 th1g@nate.com 1 목차 상속개념 클래스상속 부모생성자호출 메소드재정의 final 클래스와 final 메소드 protected 접근제한자 타입변환과다형성 추상클래스 2 상속개념 상속 (Inheritance) 이란? 현실세계 : 부모가자식에게물려주는행위 부모가자식을선택해서물려줌 객체지향프로그램 : 자식 ( 하위, 파생 ) 클래스가부모 (
More information09-interface.key
9 Database insert(record r): boolean find(key k): Record 1 Record getkey(): Key * Record Key Database.? Key equals(key y): boolean Database insert(record r): boolean find(key k): Record * Database OK 1
More information[ 프로젝트이름 ] : Project_Car [ 프로젝트를만든목적 ] : 임의의자동차판매소가있다고가정하고, 고객이원하는자동차의각부분을 Java 를이용하여객 체로생성하고, 그것을제어하는메소드를이용하여자동차객체를생성하는것이목표이다. [ 프로젝트패키지와클래스의내용설명 ] [
[ 프로젝트이름 ] : Project_Car [ 프로젝트를만든목적 ] : 임의의자동차판매소가있다고가정하고, 고객이원하는자동차의각부분을 Java 를이용하여객 체로생성하고, 그것을제어하는메소드를이용하여자동차객체를생성하는것이목표이다. [ 프로젝트패키지와클래스의내용설명 ] [Car 패키지 ] : Body, Engine, Seat, Tire, SpeedGauge, Vendor,
More information쉽게
Power Java 제 4 장자바프로그래밍기초 이번장에서학습할내용 자바프로그램에대한기초사항을학습 자세한내용들은추후에. Hello.java 프로그램 주석 주석 (comment): 프로그램에대한설명을적어넣은것 3 가지타입의주석 클래스 클래스 (class): 객체를만드는설계도 ( 추후에학습 ) 자바프로그램은클래스들로구성된다. 그림 4-1. 자바프로그램의구조 클래스정의
More informationCluster management software
자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교최민 교재소개 http://www.forsamsung.co.kr 국제공인자바프로그래머 OCJP 실전가이드 2 예제 1-2-2 프로그램에서메인에서인수전달. public class BankAccount2 { String name; int accountnumber; void setinfo(string
More informationPowerPoint Presentation
Spring Framework 의이해 - 강사김현오 - 1. 스프링프레임워크개요 1.1 스프링프레임워크개요 1.2 스프링시작하기 스프링의등장배경 POJO 프레임워크 스프링프레임워크 스프링의등장배경 (1/2) 자바엔터프라이즈애플리케이션개발표준인 EJB EJB 를사용하면애플리케이션작성을쉽게할수있다. 저수준의트랜잭션이나상태관리, 멀티쓰레딩, 리소스풀링과같은복잡한저수준의
More information슬라이드 1
UNIT 12 상속과오버라이딩 로봇 SW 교육원 2 기 최상훈 학습목표 2 클래스를상속핛수있다. 메소드오버라이딩을사용핛수있다. 패키지선언과 import 문을사용핛수있다. 상속 (inheritance) 3 상속이란 기존의클래스를기반으로새로운클래스를작성 두클래스를부모와자식으로관계를맺어주는것 자식은부모의모든멤버를상속받음 연관된일렦의클래스에대핚공통적인규약을정의 class
More informationPowerPoint 프레젠테이션
@ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field
More informationPowerPoint 프레젠테이션
클래스 ( 계속 ) 배효철 th1g@nate.com 1 목차 인스턴스멤버와 this 객체의소멸과가비지 정적멤버와 static final 필드와상수 패키지 접근제한자 Getter와 Setter 2 목차 인스턴스멤버와 this 객체의소멸과가비지 정적멤버와 static final 필드와상수 패키지 접근제한자 Getter와 Setter 3 인스턴스멤버와 this 인스턴스멤버란?
More informationPowerPoint Template
16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //
More information12-file.key
11 (String).. java.lang.stringbuffer. s String s = "abcd"; s = s + "e"; a b c d e a b c d e ,., "910359,, " "910359" " " " " (token) (token),, (delimiter). java.util.stringtokenizer String s = "910359,,
More information4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편
4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편리한것들 1. slf4j 를활용한 Logger 생성을편리하게해보자 2. AOP 설정 JDBC
More informationMicrosoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]
- Socket Programming in Java - 목차 소켓소개 자바에서의 TCP 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 Q/A 에코프로그램 - EchoServer 에코프로그램 - EchoClient TCP Programming 1 소켓소개 IP, Port, and Socket 포트 (Port): 전송계층에서통신을수행하는응용프로그램을찾기위한주소
More information