자바와 코를린에서 Annotation(어노테이션) 정리
자바, 코틀린으로 개발을 하다가 @ 표시를 많이 봤는데, 어떤 의미인지 몰라서 정리해보는 글이다.
Annotation(어노테이션)이란?
사전적인 의미로 '주석'이라는 뜻으로, 자바와 코틀린에서 사용한다.
자바에서 어노테이션은 코드사이에서 주석처럼 쓰이면서 특별한 기능을 수행하도록 하는 기술이라고 볼 수 있다.
또한 kotiln docs에서는 메타데이터를 코드에 비침추적으로 추가할 수 있는 수단이라고 설명했다.
즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다.
어노테이션은 멤버변수, 함수,클래스 등 다양한 곳에 있을 수 있다.
문법체크, 코드자동생성, 기능실행 등 다양한 기능을 가진 어노테이션이 존재할 뿐만 아니라 커스텀 어노테이션도 만들어서 사용할 수 있다.
기본제공 Annotation(어노테이션)
@Override
선언한 메소드가 오버라이드 되었다는 걸 나타낸다. 만약 부모클래스에서 메소드를 찾을수 없으면 컴파일에러
@Deprecated
해당메소드가 더이상 사용되지 않다는걸 나타낸다. 만약 사용할경우 컴파일 경고
@SuppressWarngins
선언한 곳의 컴파일 경고 무시한다는걸 나타낸다.
@Component
개발자가 직접 작성한 class를 bean으로 등록한다는걸 나타낸다.
하지만 @Bean과 다르게 name이 아닌 value로 Bean이름을 지정한다.
@Component(value="mystudent")
public class Student {
public Student() {
System.out.println("hi");
}
}
@Bean
개발자가 직접 제어가 불가능한 외부라이브러리 등을 Bean으로 만들려고 할때 사용한다.
ArrayList같은 라이브러리등을 Bean으로 등록하기 위해서는 별도로 해당 라이브러리 객체를 반환하는 Method를 만들고 @Bean Annotation을 사용할 수 있다.
2하지만 @Bean에 name로 Bean이름을 지정한다.
@Configuration
public class ApplicationConfig {
@Bean(name="myarray")
public ArrayList<String> array(){
return new ArrayList<String>();
}
}
@Configuration
configuration class에 쓰이며, 해당 클래스의 method에 @Bean을 선언하면 @Autowired로 bean을 부를수 있다.
@Service
service class에 쓰이며, 비즈니스 로직을 수행하는 class를 나타내는 용도로 사용한다.
@Repository
DAO class에 쓰이며, database에 접근한느 method를 가지고 있는 class를 나타내는 용도로 사용한다.
@Autowired
속성(field), setter method, 생성자에서 사용하며 type에 따라 알아서 Bean을 주입해줄 때 사용한다.
무조건적인 객체에 대한 의존성을 주입시키고, 스프링이 자동적으로 값을 할당한다.
Controller 클래스에서 DAO나 Service에 관한 객체들을 주입 시킬 때 많이 사용한다.
Type을 먼저 확인한 후 못 찾으면 Name에 따라 주입한다.
@Qualifier
같은 타입의 Bean객체가 있을때 해당아이디를 적어 원하는 bean을 주입해줄때 사용한다.
같은 타입이 두개이상 존재할 경우, spring이 어떤 Bean객체를 주입해야하는지 알수 없어서
@Qualifier와 @Autowired를 같이 사용해서 정확히 어떤 Bean객체를 사용해야할지 지정해준다.
@PostConstruct (후) / @PreConstruct
의존하는 객체를 생성한 이후 초기화작업을 위해 객체 생성 전/후에 실행해야할 메소드앞에 붙인다.
@PreDestroy
객체를 제거하기 전에 해야할 작업을 수행하기 위해 사용한다.
@Scheduled
linux의 crontab처럼 주기적인 작업을 동작시키기 위한 스케쥴링 어노테이션
@SchedulerLock
같은 작업을 수행하는 스케쥴러가 중복해서 실해될 필요없이 한 인스턴스에서만 실행되도록 설정하는 어노테이션
인스턴스의 스케쥴이 실행될때 다른 스케쥴을 실행하지 못하도록 락을 걸어 처리하는데 사용한다.
참고 : 자주사용하는 기본 어노테이션 정리
https://velog.io/@gillog/Spring-Annotation-%EC%A0%95%EB%A6%AC
참고 : @ScheduerlLock
https://sg-choi.tistory.com/602