처음 어노테이션을 클래스에 붙이기 시작했을 때 왜 붙여야 하는지 이해가 가지 않았어서 정리하고자 글을 적는다.
스프링 어노테이션은 스프링이 코드를 해석하고 실행하는 방식을 제어하고, 동작을 구성하고 관리하는 데 도움을 준다.
좀 더 구체적인 사용 이유로 4가지만 들어보자면 아래와 같다!
1. 가독성과 의미 부여
어노테이션을 사용하면 코드에 의미를 부여할 수 있다. 특정 기능을 수행하는 어노테이션은 해당 기능이 무엇을 하는지를 명확하게 표현해 줘서 코드의 가독성까지 높인다.
2. 빈 관리
'@Component', '@Service', '@Repository', '@Controller'과 같은 어노테이션은 스프링에게 해당 클래스가 빈으로 등록되어야 함을 알려준다. 그래서 스프링은 이를 통해 빈을 생성하고 관리할 수 있다.
3. 의존성 주입
스프링은 '@Autowired', '@Inject'와 같은 어노테이션을 참고하여 빈을 주입해서 객체 간의 의존성을 해결한다.
다만 최근에는 '@Autowired'를 남발하면 클래스 간의 의존성이 명시적으로 드러나지 않고, 코드를 읽거나 유지보수 할 때 해당 빈이 어떤 의존성을 가지고 있는지 알기 어려워 가능한 한 사용하지 않거나 필요한 경우에만 사용하는 추세가 있다고 한다. 또한 테스트할 때는 목(Mock) 객체(=가짜 객체를 주입하여 의존성을 분리하는 것이 효과적인데, '@Autowired'를 많이 사용하게 되면 빈들을 명시적으로 주입하는 게 아니라 컨테이너에서 자동으로 주입되기 때문에 테스트가 어려워진다.
하여 최근에는 생성자 주입(Constructor Injection)을 선호한다고 한다. 생성자 주입은 필요한 의존성을 클래스 생성 시점에 명시적으로 전달하는 방식으로, 코드의 가독성을 높이고 의존성을 명확하게 표현할 수 있는데다, 테스트도 쉽기 때문이다.
4. HTTP 요청 매핑
'@RequestMapping', '@GetMapping', '@PostMapping' 등의 어노테이션들은 웹 요청과 컨트롤러의 매핑을 지정한다. 이런한 어노테이션들을 통해 특정 URL에 대한 요청을 처리할 메서드를 지정하고, 요청과 응답을 처리한다.
'Study > Back' 카테고리의 다른 글
2023.Dec.26.Tue [Java] JPA와 Mybatis의 차이 (1) | 2023.12.26 |
---|---|
2023.Dec.25.Mon [Java] Optional 클래스와 메서드들 (1) | 2023.12.25 |
Oct.20.Fri.2023 Java 수업 34일차 sc.next(); 와 sc.nextLine(); (7) | 2023.10.20 |
Sep.21.Thu.2023 Java 수업 19일차 JUnit (20) | 2023.09.21 |
Sep.20.Wed.2023 Java 수업 18일차 Network / TCP & UDP / Server Socket (55) | 2023.09.20 |