[인프런 워밍업 클럽 0기] BE 1일차 과제

[인프런 워밍업 클럽 0기] BE 1일차 과제

어노테이션을 사용하는 이유 (효과) 는 무엇일까?

  1. 간결성 및 가독성 향상: 어노테이션을 사용하면 XML 구성 파일에 비해 코드가 간결해지고 가독성이 향상됨(설정 정보가 코드에 직접 포함되어 있기 때문에 빠르게 파악 가능)

     

  2. 코드의 모듈화: 어노테이션을 사용하면 특정 기능이나 역할을 수행하는 코드를 모듈화할 수 있다.

     

    1. @Controller, @Service, @Repository와 같은 어노테이션을 사용하여 각각의 역할을 하는 컴포넌트를 명확히 구분 가능

  3. 의존성 주입 및 스프링 빈 설정: @Autowired@ComponentScan과 같은 어노테이션을 사용하여 의존성 주입(Dependency Injection)을 간단하게 설정 가능. 이로써 개발자는 더 적은 코드로 높은 수준의 추상화를 이용.

  4. AOP(Aspect-Oriented Programming) 지원: Spring은 AOP를 효과적으로 지원.
    어노테이션을 사용하여 메소드나 클래스에 특정 기능(로깅, 트랜잭션 처리 등)을 적용 가능.

  5. RESTful 웹 서비스 개발: Spring MVC에서 @RequestMapping, @GetMapping, @PostMapping과 같은 어노테이션을 사용하여 간단하게 RESTful 웹 서비스를 구축 가능.

  6. 검증(Validation): @Valid 어노테이션을 사용하여 입력 값의 유효성을 검증.

  7. 이벤트 처리: Spring에서는 이벤트 기반 프로그래밍을 지원하며, @EventListener와 같은 어노테이션을 통해 이벤트를 처리.

  8. 테스트 용이성: 어노테이션을 사용하면 테스트 코드를 작성하거나 모의 객체(Mock Objects)를 사용하기가 훨씬 용이해짐.

    이러한 이유들로 인해 Spring 어플리케이션 개발에서는 어노테이션을 적극적으로 사용하게 되며, 이는 개발 생산성과 코드의 가독성, 유지보수성을 향상시키는 데 기여함.

주석(//)과 어노테이션(@)의 차이

  1. 주석

// 이 메서드는 두 수를 더하는 기능을 수행합니다.
public int add(int a, int b) {
    return a + b;
}
  1. 어노테이션

    @Service
    // 클래스에 @Service 어노테이션을 붙여서 Spring이 이 클래스를 빈으로 등록하도록 지시함
    public class MyService {
        // ...
    }
  • 어노테이션은 주석과 유사하게 코드에 부가적인 정보를 제공하지만, 주석과 달리 런타임에 코드에 대한 메타데이터로 활용.

  • 주로 프레임워크나 라이브러리에서 사용되며, 컴파일러나 런타임 시에 어떤 특별한 작업을 수행하도록 지시할 때 활용.

 

나만의 어노테이션은 어떻게 만들 수 있을까?

  1. 어노테이션 정의: 나만의 어노테이션을 만들려면 우선, Java의 어노테이션을 정의하는 인터페이스를 작성해야 함.
    Java의 어노테이션은 @interface키워드를 사용하여 정의됨.

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME) // 어노테이션 정보를 유지하는 기간 (런타임까지 유지)
@Target(ElementType.METHOD) // 어노테이션을 어디에 적용할 수 있는지 지정 (메소드에 적용)
public @interface MyCustomAnnotation {
    // 어노테이션 멤버 정의
    String value() default ""; // 기본값을 설정할 수 있는 멤버
    int priority() default 0;
}
  1. 어노테이션 사용하기: myMethod() 메소드에 @MyCustomAnnotation 어노테이션을 적용하여 컴파일된 클래스 파일을 사용할 때 리플렉션을 이용하여 어노테이션 정보를 읽을 수 있다.

public class MyClass {
    @MyCustomAnnotation(value = "Custom Annotation Example", priority = 1)
    public void myMethod() {
        // 메소드 내용
    }
}
채널톡 아이콘