본문 바로가기

Server-DB/Spring Boot

XML와 Annotation, 왜 Annotation을 사용하는가

XML

- 결합도를 낮추고 유지보수성을 높이기 위해 xml로 설정하였으나 xml이 너무 많아지면 오히려 유지보수성이 낮아지는 아이러니한 상황 발생
- 유지보수성에 방점
- 시스템 전체에 영향을 주고 이후에 변경 가능성이 있는 것은 xml로 설정.(DBCP 등)

 

 

Annotation

Annotation의 정의
정의 : 주석이 선언적 프로그래밍 모델( 메타데이터) 을 지원하는 기술. 컴파일, 런타임시에 반영한다. 
※ 메타데이터 : 데이터의 데이터. 데이터를 설명하기 위한 데이터 (설정 정보)
ex) @Repository, @Service, @Controller, @Autowired, @Resource

Annotation이 나온 이유
IT가 발전하면서 프로그램의 규모가 방대해지면서 XML이 가지는 설정정보의 양이 많아진다
--> Annotation은 직관적인 메타데이터 설정이 가능. 왜냐하면 소스코드와 같이 쓰기 때문에 
      (소스코드와 메타데이터가 결합되는 형태)
--> 시스템 전반에 영향을 주는 메타데이터는 XML로 설정하여 코드로부터 독립적으로 분리되는 것이 바람직하다. 그래서 변경사항이 있을 때 유지보수성이 높아진다. 
설계시 확정되는 부분은 Annotation 기반 설정으로 개발의 생산성을 향상 시키는 것이 바람직함

 

 

자주 쓰이는 Annotation

 

컴포넌트 계열 어노테이션

기본 스테레오타입 어노테이션. 이 어노테이션들을 붙인 클래스는 빈 객체가 된다. 클래스에 붙여서 해당 클래스가 컴포넌트 스캐닝의 대상이고, 스프링에 의해서 관리될 것임을 표시한다. 즉 <bean> XML 설정파일에서 <bean>으로 선언한 것과 같은 효과를 낸다.
1) @Repository : 영속성 계층에서 사용
2) @Service : 비즈니스 계층에서 사용
3) @Controller : 프리젠테이션 계층에서 사용

의존성 주입 어노테이션
1) @Autowired : 의존대상 객체를 타입으로 검색해서 주입. 만약에 동일한 타입의 객체가 여러개일 경우 Exception 발생
2) @Resource : 의존 대상 객체를 타입으로 검색해 주입
3) @Resource(name="bean id") : 의존 대상 객체를 이름으로 주입. 그래서 Autowired의 단점을 보완할 수 있다.
4)@Inject : 의존 대상 객체를 타입으로 검색해 주입  
    @Named("bean id") : @Inject와 @Named를 함께 명시하면 이름으로 주입

 

 

출처: https://blog.naver.com/wwwkang8/220994093310