DI (dependency injection)

 

인터페이스가 요구하는 명세를 구현한 클레스라면 어떤 클레스가 와도 결합이 가능한 점을 이용해

코드 작성부의 객체 간의 생성과 결합을 모두 외부 또는 수정이 용이한 곳으로 집중해 변경시마다 일일히

코드를 수정해야 하는 수고로움과 낭비를 줄이고 손쉽게 모듈(클레스)간의 변경,해제,결합,생성이 가능하게 한다

 

xml과 annotation을 사용한 injection 방법이 주가 되며, 오래된 프로그램의 경우 xml 방식인 경우가 많다

 

xml의 사용 방법은 html, el 등과 유사하며 객체 생성시에는 <bean> 태그를 속성으로는 id(변수명) class(클레스경로) 등을 사용한다. 객체 내부에 다른 객체를 결합시키는 경우 <property> 태그를 사용하고 속성으로는 name="setter", ref="참조변수" or value="값" 등을 사용한다. name의 경우에는 set 메소드가 EL처럼 set은 떼고 첫글자는 소문자로 변경되어 들어가니 헷갈리지 않아야 한다(클레스 내부에 setter는 당연히 작성해 둬야함)

이외 namespace를 설정해 처리기의 역할을 나누어 생성자 오버로드에 인자를 쉽게 넣어주거나 객체에 삽입하는 참조객체나 값을 <list> 로 넣는 등의 방법들이 있다.

 

annotation의 경우 MVC Model2을 참조해 내부적으로 계층이 나뉘어져 있으며 멤버객체의 선언부, 생성자, setter 메소드 등에 annotation을 붙일 수 있다. java config class를 생성해 component annotation을 지정해주면 해당 인터페이스에 결합된 하위 annotation 들은 자동으로 scan 범위에 포함되기 때문에 xml 설정 파일이 없이도 DI를 할 수 있다

 

 

 

AOP (Aspect Oriented Programming)

 

로그출력, 쓰레드 처리 속도나 예외처리 확인 같은 사용자가 아닌 개발자나 운영자가 필요로 하는 메인 서비스 외적인 측면의 코드들을 외부로 나누는 개념이다

 

기존에는 클래스 내부의 서비스 메소드 안에서 실행되야할 메인 기능의 위 아래에, 개발자나 운영자가 확인하고 싶은 내용을 구현하는 코드를 작성해, 확인하고 싶을 때는 주석을 해제하고 사용한 뒤, 사용이 끝난 뒤에는 다시 주석을 해두는 방법을 사용했다고 한다.

 

기존 Java에서 AOP를 구현하려면 Proxy 객체를 이용해 구현하려는 방식에 따라 인터페이스의 하위 객체들을 가져다 쓰면 된다.

 

Spring에서도 AOP 구현을 도와주는 라이브러리들이 있는데, AOP를 위한 Cross-cutting 클레스 몇개를 한번만 작성(로그확인, 소요시간확인 코드 등)해두면 DI와 맞물려 원본 클레스의 소스를 하나도 건드리지 않고 AOP 구현을 원하는 객체에 모듈처럼 삽입하고 빼는 형식으로 쉽게 사용할 수 있게된다.

+ Recent posts