티스토리 뷰

Framework/Spring

[Spring] DI & AOP 개념

annajinee 2017. 7. 21. 15:33

DI (Dependency Injection)란,

객체간의 의존 관계를 객체 자신이 아닌 외부 조립기가 수행 해 준다는 개념입니다. 


DI 패턴을 적용할 경우 클래스는 의존하는 객체를 전달받기 위한

설정 메서드 (setter method)나 생성자를 제공 할 뿐, 직접 의존하는 클래스를 찾지 않습니다. 

의존(Dependency)하는 객체를 조립기가 삽입(Injection)해주기 때문에 이 방식을 DI 패턴이라고 합니다. 


DI 패턴 사용 시 단위테스트가 가능합니다. 

단위 테스트는 코드의 품질을 향상시키고 개발 속도를 증가시키는 데 도움되기 때문에

DI 패턴이 단일 테스트를 진행하는데 도움줍니다. 


DI 패턴에는 아래와 같이 2가지 방식이 존재합니다. 

1. 생성자 (Constructor-arg)

2. 메소드 (property)




AOP (Aspect-Oriented Programming)란,

공통의 관심사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소해 주는 프로그래밍 기법입니다.

OOP를 사용하다 보면 inter-object message가 너무 많아 코드 변경이 어렵고, 그로 인해 코드 재사용이 불가능한 경우가 발생하는데 이를 해결하기 위해 AOP가 생겨 났습니다. 

Aspect-Oriented Programming = 관점 지향 프로그래밍의 약자로 

AOSD (Aspect-Oriented Software Development)의 한 측면을 표현합니다. 


대부분의 소프트웨어 개발 프로세스에서 사용하고 있는 방법론은 OOP일 것입니다. 

흔히 OOP(Object-Oriented Programming)라 하면 관심사가 같은 기능과 데이터를 한데 모아서 객체지향 설계 원칙에 따라 분리하고, 서로 낮은 결합도를 가진채 독립적이고 유연하게 확장할 수 있는 모듈로 캡슐화 하는 것을 일컫습니다. 


하지만 대부분의 프로젝트에서는 메소드의 호출 전후의 데이터 확인을 위한 로깅이나 예외 처리, 데이터 검증과 관련된 코드가 클래스 전반에 걸쳐서 쓰여지고 있습니다. 도메인 로직, 핵심 기능에 꼭 필요하다고 볼 수는 없지만 그렇다고 없어서도 안되는 이러한 코드 때문에 OOP의 모듈화를 방해하곤 합니다. 핵심기능을 보완하고자 사용했으나 정작 클래스 여기저기에 반복적으로 나타나서 핵심 로직 코드의 가독성이나 확장성, 유지보수 등의 효율을 떨어뜨리곤 합니다. 

이렇게 핵심 기능은 아니지만 이를 보완해주는 추가 기능으로, 시스템 전반에 산재하여 같은 목적이나 용도로 쓰이고 있는 기능을 크로스 컷팅 컨선(Cross Cutting Concerns)이라 하며, 관련된 코드를 한데 모아 모듈화 하여 핵심 로직으로부터 분리하고 개발하는 방식을 Aspect-Oriented Programming, AOP라고 합니다. 


AOP를 적용한다면 아래의 그림처럼 구성이 가능합니다. 


출처 : http://blog.naver.com/PostView.nhn?blogId=tmondev&logNo=220556587811


AOP는 아래와 같은 장점을 가지고 있습니다. 

1. 중복되는 코드 제거

2. Unit Testing의 편의성

3. 유지 보수성 향상




'Framework > Spring' 카테고리의 다른 글

[Spring] 스프링 프레임워크란? (Spring Framework)  (0) 2017.07.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함