자바 어노테이션(annotation)

국물빌런·2020년 2월 1일
0

쉽지 않다. 자바에 어노테이션이라는 기능이 있는데 이게 대체 왜 있는지 이해가 안간다. 일단 정리해본다.

이런거 배울때 중요한건 파생된 용어 및 개념이 계속 나온다는 것이다.

자 일단 어노테이션은 주석이랑 비슷한거 같은데.. 기능이 있는 주석정도로 생각하면 될 듯하다.

이 어노테이션을 공부하다보면 관점 지향 프로그래밍(aspect-oriented programming, AOP)이라는게 같이 나온다. 이것도 나중에 자세히 보도록 하자.

어노테이션은 클래스, 인터페이스, 메소드, 메소드 파라미터, 필드, 지역변수 위에 위치

할 수 있다. 그래서 실제로 주석 용도로 써도 된다. 그리고 함수처럼 파라미터를 받을 수도 있다. 파라미터를 어디다 쓰는지는 아래에..

일단 예제다.

@Entity
public class Vehicle {

    @Persistent
    protected String vehicleName = null;


    @Getter
    public String getVehicleName() {
        return this.vehicleName;
    }

    public void setVehicleName(@Optional vehicleName) {
        this.vehicleName = vehicleName;
    }

    public List addVehicleNameToList(List names) {

        @Optional
        List localNames = names;

        if(localNames == null) {
            localNames = new ArrayList();
        }
        localNames.add(getVehicleName());

        return localNames;
    }

}

자 그럼 이제 저 @가 주석이랑 뭐가 다른지 한번 보자

일단 자바에서 제공하는 어노테이션이 있는데 제공한다는건 기능이 있다는 의미겠지

살펴보자

자바에서 기본적으로 제공되는 어노테이션

@Deprecated

@Override

@SuppressWarnings

먼저 @deprecated

원래 뜻 자체가 it용어에 가까운데 더이상 사용되지 않는다는 뜻이다.

즉 쓰지 말라는것이지.

@Deprecated public class MyComponent { }

저렇게 어노테이션을 쓰면 MyComponent 메소드는 더이상 쓰지 않는다는 의미다.

더 좋은 방법이 있거나 만들어놓고 보니까 안쓰는게 낫다 싶을때 저렇게 해놓으면 저 메소드를 쓰면 컴파일레벨에서 워닝을 뱉어준다더라.

근데 애초에 안쓰는거면 지워버리면 되지 왜 저렇게 하나 의문임.

다음은 @Override

public class MySuperClass { 
public void doTheThing() { System.out.println("Do the thing"); } 
} 

public class MySubClass extends MySuperClass{ 
@Override 
public void doTheThing() { System.out.println("Do it differently"); } 
}

대충 감온다. 부모클래스로부터 오버라이드 되었다는것을 표시해주기 위해 사용하는 어노테이션이다. 부모클래스 인터페이스가 수정되었을때 자식클래스를 수정하지 않으면 지옥가는 경우가 있다. Override어노테이션을 쓰면 컴파일러가 에러를 내준다.

이건 좀 유용할듯

다음은 @SuppressWarnings

Suppress뜻을 찾아보니 숨기다라는 의미다.

말 그대로 해당 어노테이션이 있는 메쏘드,변수 등에대한 워닝을 숨겨준다.

워닝이 보기 싫을때 쓴댄다.

이 외에도 사용자가 어노테션 만들고 어노테이션이 살아있는 주기도 설정 할 수 있는데 너무 많다. 일단 링크만 첨부한다. 나중에 정리하겠다

https://hamait.tistory.com/314

스프링에서 제공하는 어노테이션도 있다.

애초에 어노테이션이라는 개념을 @AutoWired어노테이션때문에 알게 됫다.

밤이 늦었으니 링크로 대체한다. 다음에 정리하자

https://tbang.tistory.com/87

profile
국물을 달라

0개의 댓글