쉽지 않다. 자바에 어노테이션이라는 기능이 있는데 이게 대체 왜 있는지 이해가 안간다. 일단 정리해본다.
이런거 배울때 중요한건 파생된 용어 및 개념이 계속 나온다는 것이다.
자 일단 어노테이션은 주석이랑 비슷한거 같은데.. 기능이 있는 주석정도로 생각하면 될 듯하다.
이 어노테이션을 공부하다보면 관점 지향 프로그래밍(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어노테이션때문에 알게 됫다.
밤이 늦었으니 링크로 대체한다. 다음에 정리하자