WordPress.com: 무료 웹사이트 또는 블로그 만들기

https://ko.wordpress.com/
WordPress.com에서 무료 웹사이트나 블로그를 쉽게 만들어 보세요. 사용자 정의가 가능하며 모바일을 지원하는 수백 개의 디자인과 테마가 무료로 제공됩니다.



AOP (Aspect Oriented Programming) - 관점지향프로그래밍

어떤 기능을 구현하기 위한 세부기능들을 분리하고, 각 세부기능 중에 특정기능을 위해 필요한 세부기능을 핵심관심사항

여러 기능구현에 필요한 세부기능들을 공통관심사항이라 정의,

세부기능들을 핵심관심사항과 공통관심사항으로 분리해서 공통관심사항으로 이뤄진 프레임에 핵심관심사항을 조립해서 기능구현을 달성



프록시패턴 (Proxy pattern)

일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다. 프록시는 어떠한 것(이를테면 네트워크 연결, 메모리 안의 커다란 객체, 파일, 또 복제할 수 없거나 수요가 많은 리소스)과도 인터페이스의 역할을 수행할 수 있다. --위키


프록시객체 : 내가 수행할 기능을 대신 수행해주는 객체

오리지널객체 : 내가 수행할 기능을 구현하는 클래스 객체


프록시패턴 구현 : :

오리지널 객체가 수행할 기능에 대한 껍데기를 인터페이스로 정의하고 구현

오리지널 객체가 구현한 인터페이스를 프록시객체도 구현

프록시 객체의 구현함수에서 오리지널객체의 구현함수를 호출


package pokemon;

public interface IPokemon {

public void fighting();     핵심관심사항

}

 public class Pikachu implements IPokemon{

@Override

public void fighting() {  핵심관심사항 

System.out.println("피카츄 백만볼트!!");

}

}

 public class PokemonProxy implements IPokemon {                        

IPokemon pokemon;


public void setPokemon(IPokemon pokemon) {

this.pokemon = pokemon;

}

@Override

public void fighting()

System.out.println("야생의 동휘몬을 조우하였다!!");  //before aspect 공통관심사항(핵심관심사항전에 수행돼야함)                                 

       try {

pokemon.fighting();   핵심관심사항 

System.out.println("효과는 탁월하였다!!");  //after-returning 공통관심사항(핵심이 잘 수행됐을때)                

} catch (Exception e) {

System.out.println("효과는 없었다..");    //after-throwing 공통관심사항(핵심 수행 중 에러발생)                     

}

System.out.println("가라 몬스터볼!!");          //after-returning 공통관심사항(핵심이 잘 수행됐을때)

}

}

 public class PokeTest {

public static void main(String[] args) {

IPokemon pokemon = new Pikachu();

PokemonProxy pokeProxy = new PokemonProxy();

pokeProxy.setPokemon(pokemon);

pokeProxy.fighting();

}

}

 

AOP 용어


• Target – 핵심사항(Core) 가 구현된 객체

• JoinPoint – 공통관심사항이 적용 될 수 있는 지점(ex:메소드 호출시, 객체생성시 등)

• Pointcut – JoinPoint 중 실제 공통사항이 적용될 대상을 지정.


• Advice

– 공통관심사항(Cross-Cutting) 구현 코드 + 적용시점.

– 적용 시점 : 핵심로직 실행 전, 후, 정상 종료 후, 비정상 종료 후, 전/후가 있다.


• Aspect – Advice + Pointcut

• Weaving – Proxy를 생성하는 것. (컴파일 시점, Class Loading 시점, Weaving 런타임 시점)




' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day60 Spring-AOP  (0) 2016.06.14
Day59 Spring-AOP  (0) 2016.06.13
Day57 MyBatis_Spring  (0) 2016.06.09
Day56 MyBatis-Spring  (0) 2016.06.08
Day55  (0) 2016.06.03

작성자 : 근육베이비

작성자 : 근육베이비

' IOT 기반 응용 SW과정 > Group Studying' 카테고리의 다른 글

5. 쓰레드  (0) 2016.06.17
은행 관리 프로그램  (0) 2016.06.14
4. 기본 API  (0) 2016.06.09
2. 클래스  (0) 2016.06.09
1. Java의 특징, 변수와 타입, 연산자  (0) 2016.06.09

형변환


부모클래스타입으로 자식객체를 참조했을때는 부모클래스에 존재하는 멤버변수와 멤버함수만 접근이 가능,자식영역에만 존재하는 멤버에 접근불가


자식클래스로의 형변환을 통해 자식에만 존재하는 멤버에 접근가능




* instanceof 연산자를 사용한다. *


[참조변수] instanceof [클래스명]   ->  참조변수가 실제 참조하고 있는 객체가 클래스명 타입의 변수로 참조가 가능하면 true 아님 false







추상클래스


추상메소드를 가지고있는 클래스

자바에서의 추상메소드는 abstract 키워드를 붙여준다.


(부모클래스일수록 개념이 추상적이고, 특정 기능이 어떻게 구현될지 애매하다.) 


추상클래스는 상속받으면 추상메소드를 구현해야만 하는 의무를 가지게 됨.

(추상메소드를 구현하던, 자기 자신이 추상클래스가 되던)


추상클래스는 미완성의 설계도 이기 때문에 객체를 만들 수 없을(객체화 할 수 없음)




내부클래스


클래스 안에 다른 클래스를 정의




//바깥 클래스

class A {

A(){System.out.println("A 객체가 생성됨");}

/**인스턴스 멤버 클래스**/

class B {

B(){System.out.println("B 객체가 생성됨");}

int field1;

//static int field2;

void method1(){}

//static void method2() {}

}

//정적 멤버 클래스

static class C {

C() {System.out.println("C 객체가 생성됨");}

int field1;

static int field2;

void method1(){}

static void method2(){}

}

void method(){

//로컬 클래스

class D {

D(){System.out.println("D 객체가 생성됨");}

int field1;

void method1(){}

}

D d = new D();

d.field1 = 3;

d.method1();

}

} 

 


public class Main {

public static void main(String[] args) {

A a = new A();

//인스턴스 멤버 클래스 객체 생성

A.B b = a.new B();

b.field1 = 3;

b.method1();

//정적 멤버 클래스 객체 생성

A.C c = new A.C();

c.field1 = 3;

c.method1();

A.C.field2 = 3;

A.C.method2();

//로컬 클래스 객체 생성을 위한 메소드 호출

a.method();

}

}







무명 클래스(anonymous class)


클래스 몸체는 정의되지만, 이름은 없는 클래스

객체를 생성하면서 클래스를 정의하는 방법(1회성 클래스 구현)


interface RemoteController

{

void turnOn();

void turnOff();

}

class TVRemoteController implements RemoteController{


@Override

public void turnOn() {

}


@Override

public void turnOff() {

}

}


public class AnnonymousTest {

public static void main(String[] args) {

RemoteController rc = new TVRemoteController();

}

}




인터페이스 타입의 참조변수는 자신 인터페이스를 implements한 클래스의 객체를 참조할 수 있음.


대신에 인터페이스 타입의 참조변수로 객체를 참조했을때는 인터페이스에 존재하는 메소드만 호출이 가능.









' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day16 패키지  (0) 2016.04.04
Day15 전략패턴  (0) 2016.04.01
Day13 상속  (0) 2016.03.30
Day12 변수  (0) 2016.03.29
Day11  (0) 2016.03.28

+ Recent posts