어떠한 행사에서 이벤트 작업을 관리하는 데 사용하는 포스트잇 정도를 프로그래밍에서의 어노테이션이라고 생각을 할 수 있습니다!
이 포스트잇은 실제로 작업을 하진 않지만 중요한 세부 사항 또는 해야할 일을 상기시켜 주거나 다른 사람에게 알려줄 수 있는 수단이 될 수 있습니다.
위 설명에서의 포스트잇과 비슷하지만 코드에 사용되며, 코드에 직접 추가하는 특별한 메모? 정도입니다.
이러한 메모는 코드가 수행하는 작업의 일부가 아니라 코드 관리에 도움이 되는 지침이나 특별한 주의가 필요한 사항에 대한 알림 등을 코드에 추가 정보로 제공할 수 있습니다!
유지 관리 단순화 : Java 프로젝트 내 코드의 구조와 동작을 명확하게 하여 이해하고 유지 관리하기 쉽게 만듭니다.
코드 가독성 : 필요한 곳에 메타 정보를 직접 제공하여 코드의 가독성을 향상시킵니다.
예를 들어, @Override
를 사용하면 메서드가 다른 메서드를 대체한다는 신호를 보내 컴파일러와 다른 개발자가 의도를 이해하는 데 도움이 됩니다.
보일러 플레이트 코드 자동화 : 어노테이션은 상용구 코드를 자동으로 생성하는데에도 도움이 되는데,
예를 들어 @Entity
, @Column
, @Table
등으로 어노테이션이 달린 클래스에선 쿼리가 자동으로 생성할 수 있도록 됩니다.
개발 도구 활용 : 많은 개발 도구와 IDE는 어노테이션을 사용하여 코드 린트, 구문 강조, 자동화된 리팩토링 지원과 같은 추가 기능을 제공하는데, 이는 개발 속도를 높이며 오류를 줄이는 데 큰 도움을 줍니다 !
런타임 동작 조정 : 일부 어노테이션은 특정 조건에 따라 런타임 시 동작을 변경할 수 있습니다 !
예를 들어, JUnit
과 같은 테스트 프레임워크에서 @Test
를 사용하여 어떤 메서드가 테스트로 실행되어야 하는 지 알려줍니다.
프레임워크 및 라이브러리 호환성 : 프레임워크 및 라이브러리는 통합 및 구성을 단순화하기 위해 어노테이션에 크게 의존을 하게 되는데, 예를 들면 Spring Framework
에서 @Autowired
와 같은 어노테이션은 종속성의 자동 연결을 용이하게 하여 애플리케이션 구성 요소의 설정 및 연결을 단순화합니다.
@interface
를 사용하여 어노테이션을 정의합니다.RetentionPolicy.RUNTIME
을 사용하면 리플렉션을 통해 런타임에 주석을 사용 가능RetentionPolicy.CLASS
(컴파일 시 컴파일러에 의해 유지되지만 JVM에서는 무시됨)RetentionPolicy.SOURCE
(컴파일러에 의해 삭제됨)@Target
을 사용하여 적용할 수 있는 위치(메서드, 필드, 클래스 등)를 지정합니다.ElementType.METHOD
, ElementType.FIELD
, ElementType.TYPE
등@Documented
를 사용할 수 있습니다.@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String helloWorld() default "Hello, world";
}
프로젝트 기획 중에서도 기능별로 누가 만들지, 어떤 내용인지, 우선순위 등으로 나누곤 하는데, 이 부분을 커스텀 어노테이션을 사용하여 해당 메서드에 대해서 향후 작업을 나타낼 수 있는 간단한 Todo
어노테이션을 만들어보려고 합니다 !
어노테이션 정의
작성자, 작업 내용 및 우선순위에 대한 정보를 포함하는 Todo
어노테이션을 정의하였습니다.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Todo {
public enum Priority {LOW, MEDIUM, HIGH}
String author() default "no_name";
String description();
Priority priority() default Priority.LOW;
}
어노테이션 사용
public class TodoService {
@Todo(
author = "dongdong",
description = "Todo 생성하기",
priority = Priority.MEDIUM
)
public void createTodo() {
// 대충 Todo 생성하는 로직...
}
@Todo(
author = "donghyeun",
description = "Todo 삭제하기",
priority = Priority.MEDIUM
)
public void deleteTodo() {
// 대충 Todo 삭제하는 로직...
}
}
이렇게 커스텀 어노테이션을 생성하여 코드를 효과적으로 관리할 수 있으며, 애플리케이션을 더 쉽게 유지 관리가 가능하며 일관성을 유지할 수도 있습니다 !