티스토리 뷰
안녕하세요.
여러 예제들이나 프로젝트를 진행할때 어노테이션을 사용해 본 경험이있습니다.
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에서 사용할 파라미터를 표시 |
@Aspect | Spring은 자동적으로 @Aspect 어노테이션을 포함한 클래스를 검색하여 Spring AOP 설정에 반영 |
@Pointcut | pointcut은 결합점(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 |
@Transactional | DB 트랜잭션관리를 위해 사용
@Transactional 을 붙였는 데 사용하지 못하는 경우, 1. innoDB 가 아닌 경우, 2. interface 가 없는 경우, 3. method 에 사용하였는 데, 해당 method를 같은 class 내부에서 호출하는 경우, 2, 3번 -> @Transactional을 사용하면 해당 class를 spring에서 다시 proxy 형태로 실행/관리 하기 때문. |
오늘은 자바에서 유용하게 사용되는 자바 어노테이션에 대해서 알아보았습니다. 위의 표는 프로젝트에서 사용되는 어노테이션을 정리해서 올렸으며
추후에 더 많은 자바 어노테이션을 정리하고 업데이트 하겠습니다. 자바 어노테이션의 포스팅을 마치도록하겠습니다 :)
- Total
- Today
- Yesterday