Spring DI 예시

in #kr7 years ago (edited)

안녕하세요. @deathnote9 입니다.
이번 포스팅은 Spring DI에 대해서 알아보고자 합니다.

 

Spring 중요한 부분은 DI / IOC 가 90% 구성 되어있고
                         웹 구성부분 10% 구성 되어있다. 둘다 합쳐서 AOP (proxy패턴)으로 구성 되어 있다.
EJB - Enterprise Java Bean
=> Java에서 제공하는 기업용 솔루션 프레임 워크 불필요한 요소가 많아지게 되어서
Spring FrameWork를 사용하게 되었는데, 스프링은 경량 Container 로 필요한 객체간의 의존관계를 설정 할 수 있도록 되어, 객체를 생성하거나 검색할 필요가 없다.
밑에는 UserDao를 예로 만들어서 DI를 설명하려고 합니다.

UserDao 안좋은 exam 1

UserDao.java

UserDao.java

UserDao.java 에서 Class.forName 과 Connection
중복된 코드가 많기 때문에 하나의 함수를 만들어서 사용하는 것이 효율 적이다.

그래서 Connection 메소드를 따로 만들고 다른메소드에서 호출만 해서 사용한다.
하지만 Dao 는 Data Access Object로 데이터베이스에 접근해서 쿼리만 실행 하는것이다.

연결까지 Dao에서 하는것은 좋지 않다.
        * 클래스는 독립적인 것이 좋다.

UserDao 안좋은 exam2

따라서 클래스를 독립적으로 하기 위해서 SimpleConnectionMaker를 새로 만들어서 Connection을 작성하고 UserDao에서 사용 할 수 있게 한다. 하지만 

관심사 분리(Connection 분리)만 일어나면서

UserDao class에서 어떠한 연결 클래스가 만들어지는지 알고 있다. >> 실패한 패턴

따라서 인터페이스를 이용해 어떤한 클래스가 만들어지는지 몰라야한다.



결론적으로 명시적인 클래스를 가지고 있으면 안된다. >> 클래스의 이름을 알고 있으면 안된다
따라서 Exam2 도 좋지 않은 UserDao이다.

좋은 UserDao Exam3

스프링은 의존관계가 중요하다. 따라서 ConnectionMaker [interface]를 만들어서 UserDao 가 의존할 수 있게 하고 ConnectionMaker를 이용해서 확장이 가능하므로 UserDao와 ConnectionMaker는 의존 관계이다. 스프링은 OCP, 높은 응집도, 낮은 결합도, 전략패턴에 나타난 장점을 개발자들이 활용 하는데, 전략패턴에서 인터페이스를 통째로 외부로 분리하여 인터페이스를 구현한 구체적인 클래스를 필요에 따라서 바꿔서 사용 할 수 있게 함으로, 독립적인 책임으로 분리가 가능하다.

그래서 중복 제거, 관심사의 분리, 인터페이스 구현을 통하여 Exam3 를 만든것이다.

Sort:  

안녕하세요.
스팀에서 이런 토픽을 접할줄은 몰랐습니다. 감사합니다.

몇가지 제안을 드리려고 합니다.

  1. DI 가 무엇인지 잘 모르는 분들이 많을 것 같습니다. (저는 물론 ^^)
    DI 가 무엇인지 왜 좋은지 이정도 설명이 우선 필요할 것 같고요...
  2. 코드를 이미지 캡춰해서 보면 모바일에서는 물론 PC에서도 보기가 쉽지 않습니다. Markdown 문법을 사용하면 소스코드를 보기쉽게 작성할 수 있습니다.

아 좋은 말씀 감사합니다^^ 다음에 더 자세하게 하도록 노력하겠습니다.

스프링 공부해야되는데 도움이 될 것 같네요~

Congratulations @deathnote9! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of comments received

Click on any badge to view your own Board of Honnor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Coin Marketplace

STEEM 0.25
TRX 0.25
JST 0.040
BTC 94487.77
ETH 3419.70
USDT 1.00
SBD 3.51