Spring 에서 사용되는 애노테이션들

Seong Hyeon Kim·2024년 7월 24일
0

스프링

목록 보기
6/9

1. @Component 와 그 변형들

@Component

@Component

설명: @Component는 Spring이 관리하는 일반적인 빈(Bean)을 정의하는 데 사용됩니다.

특징:

  • 모든 빈에 사용할 수 있습니다.
  • 자동으로 빈으로 등록됩니다.

사용법:

@Component
public class MyComponent {
    // 클래스 내용
}

장단점:

  • 장점: 모든 타입의 빈을 쉽게 정의할 수 있습니다.
  • 단점: 구체적인 역할을 나타내기 어렵습니다.

@Service, @Repository, @Controller

@Service, @Repository, @Controller

설명 : @Component의 특화된 형태로, 역할에 따라 구분됩니다.

특징:

  • @Service: 서비스 레이어를 나타냅니다.
  • @Repository: 데이터 접근 레이어를 나타냅니다.
  • @Controller: 프레젠테이션 레이어를 나타냅니다.

사용법:

@Service
public class MyService {
    // 클래스 내용
}

@Repository
public class MyRepository {
    // 클래스 내용
}

@Controller
public class MyController {
    // 클래스 내용
}

장단점:

  • 장점: 역할을 명확히 구분하여 코드의 가독성을 높입니다.
  • 단점: 특정 역할에 맞게 사용해야 합니다.



2. 의존성 주입(DI)을 위한 애노테이션

@Autowired

@Autowired

설명: Spring이 자동으로 빈을 주입하도록 하는 애노테이션입니다.

특징:

  • 필드, 생성자, 메서드에 사용할 수 있습니다.
  • 생성자 주입, 필드 주입, 세터 주입을 지원합니다.

사용법:

필드 주입:

@Autowired
private MyService myService;

생성자 주입:

@Autowired
public MyClass(MyService myService) {
    this.myService = myService;
}

세터 주입:

@Autowired
public void setMyService(MyService myService) {
    this.myService = myService;
}

장단점:

  • 장점: 자동으로 빈을 주입해주므로 코드가 간결해집니다.
  • 단점: 순환 의존성 문제를 일으킬 수 있습니다.

@RequiredArgsConstructor (Lombok)

@RequiredArgsConstructor (Lombok)

설명: final 필드와 @NonNull 필드에 대한 생성자를 자동으로 생성합니다.

특징:

  • Lombok 라이브러리가 필요합니다.
  • 생성자를 자동으로 생성합니다.

사용법:

@RequiredArgsConstructor
public class MyClass {
    private final MyService myService;
}

장단점:

  • 장점: 생성자 주입을 간편하게 사용 가능합니다.
  • 단점: Lombok 라이브러리에 의존합니다.



3. 웹 애플리케이션을 위한 애노테이션

@RestController와 @RequestMapping

@RestController와 @RequestMapping

설명: @RestController는 JSON/XML 형식으로 응답을 반환하는 컨트롤러를 정의합니다. @RequestMapping은 요청 URL을 매핑합니다.

특징:

  • @RestController@Controller@ResponseBody를 합친 형태입니다.
  • @RequestMapping은 HTTP 메서드(GET, POST 등)와 URL을 매핑합니다.

사용법:

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

장단점:

  • 장점: RESTful 웹 서비스를 쉽게 개발할 수 있습니다.
  • 단점: 단순한 웹 페이지를 반환할 때는 @Controller@ResponseBody를 사용하는 것이 더 적합할 수 있습니다.



4. 추가적인 유용한 애노테이션

@Configuration

@Configuration

설명: Spring 설정 파일을 정의합니다.

특징:

  • 빈 정의와 설정을 포함합니다.

사용법:

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

장단점:

  • 장점: 설정을 명확히 정의할 수 있습니다.
  • 단점: XML 설정보다 덜 직관적일 수 있습니다.


@Bean

@Bean

설명: 메서드에서 반환된 객체를 빈으로 등록합니다.

특징:

  • @Configuration 클래스 내에서 사용됩니다.

사용법:

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

장단점:

  • 장점: 메서드 수준에서 빈을 정의할 수 있습니다.
  • 단점: XML 설정보다 덜 직관적일 수 있습니다.



요약

  1. @Component와 그 변형들: 빈을 정의하고, 역할에 따라 구분.
  2. 의존성 주입을 위한 애노테이션: @Autowired, @RequiredArgsConstructor를 사용하여 빈을 주입.
  3. 웹 애플리케이션을 위한 애노테이션: @RestController, @RequestMapping을 사용하여 RESTful 웹 서비스 개발.
  4. 추가적인 유용한 애노테이션: @Configuration, @Bean을 사용하여 설정과 빈 정의.
profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 개발자

0개의 댓글