320x100
320x100

데코레이터 (Decorator)

: 선언된 함수에 내용을 덧붙이지 않고 기능을 추가하는 파이썬의 기법

: @ 기호를 앞에 붙혀서 사용

: JAVA의 어노테이션과 비슷하지만 다른 개념

def decorate(func):
    def func_wrapper():
        print "welcome to"
        func()
        print "with python"
    return func_wrapper
 
@decorate
def function():
    print "hello world"
 
function()

# outputs
# welcome to
# hello world
# with python
def p_decorate(func):
   def func_wrapper(name):
       return "<p>{0}</p>".format(func(name))
   return func_wrapper
 
@p_decorate
def get_text(name):
   return "lorem ipsum, {0} dolor sit amet".format(name)
 
print get_text("John")
 
# Outputs <p>lorem ipsum, John dolor sit amet</p>

: @ 기호 뒤에 데코레이트할 함수의 이름을 정의하면 됨

 

 

 

 

 

어노테이션 (Annotation)

: 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종

: @ 기호를 앞에 붙혀서 사용하며 JDK 1.5 버전 이상 부터 지원

: JAVA의 어노테이션은 클래스 파일에 임베드 되어 컴파일러에 의해 생성된 이후 JVM에 포함되어 동작함

 

- 기능

: 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공

: 소프트웨어 개발 환경에게 빌드나 배포 시 코드를 자동으로 생성할 수 있도록 정보 제공

: 런타임에 특정 기능을 실행하도록 정보 제공

 

 

 

 

JAVA 빌트인 어노테이션

- @Override

@Override
public void getInfo() {
  System.out.println("test");
}

: 메서드를 오버라이드 하겠다는 의미

: 상속 받은 부모 클래스 또는 구현해야할 인터페이스에서 해당 메서드가 없으면 컴파일 오류가 발생

 

- @Deprecated

@Deprecated
public void deprecatedMethod() {
  System.out.println("test");
}

: 메서드를 Deprecated 시키겠다는 의미

: 이 메서드를 사용하는 애플리케이션을 컴파일 할 경우 컴파일 경고가 발생

: 하위 호환을 위해 메서드 자체를 없에지는 못하지만 사용하지 말 것을 경고 하기 위함

 

- @SpperessWarnings

: 컴파일러 경고를 출력하지 않도록 설정

: all, cast, dep-ann, deprecation 등의 파라미터를 사용

ex) @SpperessWarnings("all")

 

- @SafeVarargs

: 제너릭 같은 가변인자 매개변수를 사용할 때 경고를 무시

 

- @FunctionInterface

: JAVA에서 람다 함수를 위한 인터페이스를 지정

: 함수형 인터페이스에 사용하기 적합하지 않은 경우 (메서드가 없거나 두 개 이상인 경우)에 컴파일 에러 발생

 

 

 

 

JAVA 메타 어노테이션

- @Retention

: 어노테이션의 리텐션 기간 명명

ex) @RetensionPolicy.Class

 

- @documented

: JAVA 문서에도 어노테이션 정보를 표현

 

- @Target

: 생성할 어노테이션이 적용될 수 있는 위치를 나열

ex) @ElementType.TYPE

 

- @Inherited

: 자식 클래스가 어노테이션을 상속 받을 수 있음

 

- @Repeatable

: 반복적으로 어노테이션을 선언할 수 있음

 

 

 

 

 

 

JAVA 커스텀 어노테이션

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
        String value() default "MyAnnotation : default value"
}


class MyObject {
    @MyAnnotation
    public void testMethod1() {
        System.out.println("This is testMethod1");
  }

    @MyAnnotation(value = "My new Annotation")
    public void testMethod1() {
        System.out.println("This is testMethod1");
  }
}


public class MyMain {
    public static void main(String[] args) {
        Method[] methodList = MyObject.class.getMethods();

        for (Method method : methodList) {
            if(method.isAnnotationPresent(MyAnnotation.class)) {
                MyAnnotation annotation=method.getDeclaredAnnotation(MyAnnotation.class);
                String value=annotation.value();
                System.out.println(method.getName() + ":" + value);
            }
        }
    }
}

 

 

 

 

 

 

 

 

Reference

 

Python 데코레이터(Decorator)

파이썬에서 가장 중요한 구문중 하나인 데코레이터 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 데코레이터를 쓸때 사용하는 키워드인 @ @를쓰는 파이썬의 데코레이터는 자바의 어노테이

hackersstudy.tistory.com

 

[Java] 자바 어노테이션(Annotation) 사용법 및 예제 - 커스텀 어노테이션 만들기

스프링 프레임워크 기반의 작업을 많이 하는 개발자라면 '어노테이션(Annotation)'을 자주 사용할 것이다. (어노테이션, 애너테이션 등으로 발음하지만 본 포스트에서는 어노테이션으로 명명하겠

hbase.tistory.com

300x250
728x90