티스토리 뷰

Java

자바 어노테이션 정리

토마's 2016. 9. 24. 11:01

안녕하세요.

여러 예제들이나 프로젝트를 진행할때 어노테이션을 사용해 본 경험이있습니다. 

Annotation을 공부하면서 Java에서 제공하는 Annotation만으로도 효율적으로 사용할 수 있다는 것이 좋았습니다.

따라서 오늘은 자바 어노테이션(Java annotation)에 대해서 포스팅해보려고 합니다. 


1. 어노테이션(@, Annotation)이란?


Annotation은 JEE5부터 새롭게 추가된 문법요소입니다. 사전적으로는 "주석"이라는 의미를 가지고 있으며, 의미대로

자바 코드에 주석처럼 달아 특수한 의미를 부여해줍니다. 이 특별한 의미는 컴파일 타임 또는 런타임에 해석될 수 있습니다.

아래와 같이 클래스 내부 또는 클래스 바로 위에 '@'와 함께 시작하는 것이 어노테이션입니다.

@Controller
@RequestMapping(value = "/test")
public class testController {
    // 내용
}


2. 어노테이션을 사용했을때 장점


메타데이터를 프로그램 요소(클래스, 인터페이스, 메소드 등)에 연결하는 방법을 제시하고, 어노테이션을 사용하면 코드가

깔끔해지고 어노테이션을 재사용이 가능합니다. 또한 데이터의 유효성 검사조건을 어노테이션으로 사용하여 Model 클래스

에 직접 명시함으로써 해당 데이터들에 대한 유효 조건을 쉽게 파악할 수 있게 됩니다.



3. 어노테이션의 종류


아래의 표와 같이 어노테이션은 많은 종류를 가지고 있습니다. 모두 다 알 필요는 없고 "이런게 있구나" 정도로 알고 나중에 필요할때

찾아서 쓰면 유용하게 코드를 작성할 수 있습니다. 


어노테이션

설명

@SuppressWarnings

컴파일러가 일반적으로 경고하는 내용   내용은 제외시킬  사용

@Entity

퍼시스턴스화  클래스를 선언

@Table

DB 있는 테이블과 맵핑 시킨다.

@Data

 필드의 setter, getter 자동 생성

@EqualsAndHashCode

Equals  hashCode 함수를 만들어 

@JsonIgnoreProperties

클래스 내에 없는 필드가 json 존재할  에러 방지 설정 

@GeneratedValue

primary 컬럼에 고유값을 자동으로 생성 부여

@Id

 클래스의 어느 속성이 유일한 식별자 인지를 가리킴

@Enumerated

Java Enum class를 표현

@Column

컬럼 길이 제약과 같은 세부사항을 지정할  있게 

@Repository

해당 클래스에서 발생하는 DB 관련 예외를 spring DAOException으로 전환

@Service

비즈니스 로직이 들어가는 Service 등록이 

@Autowired

Spring 의존관계(DI) 자동으로 설정타입(by type)으로 연결

@Qualifier

동일한 타입의  객체들 중에서 특정 빈을 사용하도록 설정

@PostConstruct

의존하는 객체를 설정한 이후에 초기화 작업을 수행할 메서드에 수행

@PreDestory

컨테이너에서 객체를 제거하기 전에 호출  메서드에 적용

@Target

어디에 어노테이션을 넣을  있는지를 서술

@Retention

지속성을 설정어떻게 저장할 것인지

@Documented

어노테이션이 기본으로 javadoc  유사한 툴에 의해 문서화 되는 것을 나타냄

@AllArgsConstructor

모든 인자의 생성자를 자동으로 생성

@NoArgsConstructor

인자 없는 생성자를 생성

@MappedSuperclass

해당 어노테이션이 정의된 class 상속받은 entity에는 해당 컬럼이 자동으로 생성/매핑

@JsonSerialize

Annotation use for configuring serialization aspects, by attaching to "getter" methods or fields, or to value classes

@Value

프로퍼티값을 파라미터에 적용

@Configuration

스프링 IoC 컨테이너가 해당 클래스를  정의의 소스로 사용

@EnableAsync

스프링 XML 설정의 <task:annotation-driven> 대신해서 자바에 설정

@EnableScheduling

스프링 스케줄 task 실행을   있게 

@EnableTransactionManagement

스프링 XML 설정의 <tx:annotation-driven/> 대신해서 자바에 설정

@PropertySource

Property 파일을 Environment로 로딩

@EnableJpaRepositories

JPA repositories   있게 

@EnableAspectJAutoProxy

스프링 XML 설정의 <aop:aspectj-autoproxy/> 대신해서 자바에 설정

@ComponentScan

스프링 XML 설정의 <context:component-scan> 대신해서 자바에 설정

@Resource

어플리케이션에서 필요로 하는 자원을 자동 연결할  사용이름(by name)으로 연결

@Bean

스프링 XML 설정의 <bean /> 동일한 기능을 제공

@EnableTransactionManagement

스프링의 annotaion-driven 트랜잭션 관리기능을   있게 

@MapperScan

Mybatis mapper 등록을 자바에 설정

@ControllerAdvice

예외 발생시 작업을 처리할  있게 스프링 프레임워크 3.2에서 추가

@Controller

Spring MVC Controller 클래스 선언을 단순화 시켜줌

@RequestMapping

Url class 또는 method 맵핑 시켜주는 역할

@ResponseBody

HTTP body 부분만 전달 XML, JSON으로 출력   사용

@Api

Api 어떤 역할을 하는  표시

@ApiOperation

Api 기능을 표시

@ApiParam

Api에서 사용할 파라미터를 표시

@AspectSpring은 자동적으로 @Aspect 어노테이션을 포함한 클래스를 검색하여 Spring AOP 설정에 반영
@Pointcutpointcut은 결합점(Join points)을 지정하여 충고(Advice)가 언제 실행될지를 지정하는데 사용 @Pointcut 어노테이션을 사용
@Before메소드가 수행 전에 수행 된다.Before advice는 @Before 어노테이션을 사용
@After메소드 수행 후 무조건 수행된다. After (finally) advice는 @After 어노테이션을 사용
@AfterThrowing메소드가 수행 중 예외사항을 반환하고 종료하는 경우 수행된다. After throwing advice는 @AfterThrowing 어노테이션을 사용
@RestController@Controller + @ResponseBody *http://spring.io/guides/gs/rest-service/
@JsonInclude@JsonInclude(JsonInclude.Include.NON_EMPTY) 필드가 empty이거나 null 일 때 json으로 변환되지 않도록 함 *http://fasterxml.github.io/jackson-annotations/javadoc/2.0.5/com/fasterxml/jackson/annotation/JsonInclude.Include.html
@TransactionalDB 트랜잭션관리를 위해 사용

 

@Transactional 을 붙였는 데 사용하지 못하는 경우,

1. innoDB 가 아닌 경우,

2. interface 가 없는 경우,

3. method 에 사용하였는 데, 해당 method를 같은 class 내부에서 호출하는 경우,

2, 3번 -> @Transactional을 사용하면 해당 class를 spring에서 다시 proxy 형태로 실행/관리 하기 때문.


오늘은 자바에서 유용하게 사용되는 자바 어노테이션에 대해서 알아보았습니다. 위의 표는 프로젝트에서 사용되는 어노테이션을 정리해서 올렸으며

추후에 더 많은 자바 어노테이션을 정리하고 업데이트 하겠습니다. 자바 어노테이션의 포스팅을 마치도록하겠습니다 :)