본문 바로가기
Study/Back

2023.Dec.24.Sun [Spring] Annotation 어노테이션

by Jobsoony 2023. 12. 24.
728x90
반응형

 처음 어노테이션을 클래스에 붙이기 시작했을 때 왜 붙여야 하는지 이해가 가지 않았어서 정리하고자 글을 적는다.

스프링 어노테이션은 스프링이 코드를 해석하고 실행하는 방식을 제어하고, 동작을 구성하고 관리하는 데 도움을 준다.

좀 더 구체적인 사용 이유로 4가지만 들어보자면 아래와 같다!

1. 가독성과 의미 부여
     어노테이션을 사용하면 코드에 의미를 부여할 수 있다. 특정 기능을 수행하는 어노테이션은 해당 기능이 무엇을 하는지를 명확하게 표현해 줘서 코드의 가독성까지 높인다.

2. 빈 관리
     '@Component', '@Service', '@Repository', '@Controller'과 같은 어노테이션은 스프링에게 해당 클래스가 빈으로 등록되어야 함을 알려준다. 그래서 스프링은 이를 통해 빈을 생성하고 관리할 수 있다.

3. 의존성 주입
     스프링은 '@Autowired', '@Inject'와 같은 어노테이션을 참고하여 빈을 주입해서 객체 간의 의존성을 해결한다.
     다만 최근에는 '@Autowired'를 남발하면 클래스 간의 의존성이 명시적으로 드러나지 않고, 코드를 읽거나 유지보수 할 때 해당 빈이 어떤 의존성을 가지고 있는지 알기 어려워 가능한 한 사용하지 않거나 필요한 경우에만 사용하는 추세가 있다고 한다. 또한 테스트할 때는 목(Mock) 객체(=가짜 객체를 주입하여 의존성을 분리하는 것이 효과적인데, '@Autowired'를 많이 사용하게 되면 빈들을 명시적으로 주입하는 게 아니라 컨테이너에서 자동으로 주입되기 때문에 테스트가 어려워진다.
     하여 최근에는 생성자 주입(Constructor Injection)을 선호한다고 한다. 생성자 주입은 필요한 의존성을 클래스 생성 시점에 명시적으로 전달하는 방식으로, 코드의 가독성을 높이고 의존성을 명확하게 표현할 수 있는데다, 테스트도 쉽기 때문이다.

4. HTTP 요청 매핑
     '@RequestMapping', '@GetMapping', '@PostMapping' 등의 어노테이션들은 웹 요청과 컨트롤러의 매핑을 지정한다. 이런한 어노테이션들을 통해 특정 URL에 대한 요청을 처리할 메서드를 지정하고, 요청과 응답을 처리한다. 

728x90
반응형