본문 바로가기
Language/Java

자바와 코를린에서 Annotation(어노테이션) 정리

by 카프리썬 2022. 2. 10.
728x90

자바, 코틀린으로 개발을 하다가 @ 표시를 많이 봤는데, 어떤 의미인지 몰라서 정리해보는 글이다. 

 

반응형

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

 

[Spring] Annotation 정리

Annotation(@)은 사전적 의미로는 주석이라는 뜻이다. 자바에서 사용될 때의 Annotation은 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다.

velog.io

 

참고 : @ScheduerlLock

https://sg-choi.tistory.com/602

 

[Spring] Scheduler Lock

들어가며 설명 같은 작업을 수행하는 스케줄러가 각각 다른 서버 인스턴스에서 실행되고 있을 때 중복해서 실행할 필요 없이 한 인스턴스에서만 실행해야할 경우가 있을 수 있다. 이에 대한 처

sg-choi.tistory.com

 

반응형