Spring DI 예시
kr·@deathnote9·
0.000 HBDSpring DI 예시
안녕하세요. @deathnote9 입니다. 이번 포스팅은 Spring DI에 대해서 알아보고자 합니다. <p> </p> <p>Spring 중요한 부분은 DI / IOC 가 90% 구성 되어있고<br> 웹 구성부분 10% 구성 되어있다. 둘다 합쳐서 AOP (proxy패턴)으로 구성 되어 있다.<br> EJB - Enterprise Java Bean<br> => Java에서 제공하는 기업용 솔루션 프레임 워크 불필요한 요소가 많아지게 되어서<br> Spring FrameWork를 사용하게 되었는데, 스프링은 경량 Container 로 필요한 객체간의 의존관계를 설정 할 수 있도록 되어, 객체를 생성하거나 검색할 필요가 없다.<br> 밑에는 UserDao를 예로 만들어서 DI를 설명하려고 합니다.</p> <p><strong>UserDao 안좋은 exam 1</strong><br> </p> https://steemitimages.com/DQmVLb2prUct1pwR1ZDmrsd8rjLhsAnyKeZEFV8dHUB7bvj/1.png <p>UserDao.java</p> https://steemitimages.com/DQmdkkDH8fGbg5a7dCki9cL8QGKMjxsxWjdqQVjFTvHFcLv/2.png <p>UserDao.java</p> <p>UserDao.java 에서 Class.forName 과 Connection<br> 중복된 코드가 많기 때문에 하나의 함수를 만들어서 사용하는 것이 효율 적이다.<br> https://steemitimages.com/DQmNvVg2eUKsAXEajhqHBsHiffvL3swUY8JpiRY1sVwGh2v/3.png </p> <p>그래서 Connection 메소드를 따로 만들고 다른메소드에서 호출만 해서 사용한다.<br> 하지만 Dao 는 Data Access Object로 데이터베이스에 접근해서 쿼리만 실행 하는것이다.<br> <br> 연결까지 Dao에서 하는것은 좋지 않다.<br> * 클래스는 독립적인 것이 좋다.</p> <p><strong>UserDao 안좋은 exam2</strong></p> https://steemitimages.com/DQmPEe3KN4yPzR4jxgqpkTqk8f2kTYMN8SFpPZWPBikmnJG/4.png https://steemitimages.com/DQmQ6ESZwNktYHxRkX8E73MD33VYyGQqecYEWmEHEBkSkWa/5.png <p>따라서 클래스를 독립적으로 하기 위해서 SimpleConnectionMaker를 새로 만들어서 Connection을 작성하고 UserDao에서 사용 할 수 있게 한다. 하지만 </p> https://steemitimages.com/DQmUxcwqCRLULGhivNBVpGcg4yVTGxzXoTd4w1vqUnytkLR/6.png <p>관심사 분리(Connection 분리)만 일어나면서<br> <br> UserDao class에서 어떠한 연결 클래스가 만들어지는지 알고 있다. >> 실패한 패턴<br> <br> 따라서 인터페이스를 이용해 어떤한 클래스가 만들어지는지 몰라야한다.<br> <br> <br> <br> 결론적으로 명시적인 클래스를 가지고 있으면 안된다. >> 클래스의 이름을 알고 있으면 안된다<br> 따라서 Exam2 도 좋지 않은 UserDao이다.<br> </p> <p><strong>좋은 UserDao Exam3</strong></p> https://steemitimages.com/DQmdX67B66yXNN9sVe5iRpigk1H4HAvYHVkcfH65AnV4koB/7.png <p>스프링은 의존관계가 중요하다. 따라서 ConnectionMaker [interface]를 만들어서 UserDao 가 의존할 수 있게 하고 ConnectionMaker를 이용해서 확장이 가능하므로 UserDao와 ConnectionMaker는 의존 관계이다. 스프링은 OCP, 높은 응집도, 낮은 결합도, 전략패턴에 나타난 장점을 개발자들이 활용 하는데, 전략패턴에서 인터페이스를 통째로 외부로 분리하여 인터페이스를 구현한 구체적인 클래스를 필요에 따라서 바꿔서 사용 할 수 있게 함으로, 독립적인 책임으로 분리가 가능하다.</p> https://steemitimages.com/DQmPPH2Va2UzuUMX93C3xdvf5dfDqT1F9FmDLja9gjQRRWs/8.png <p> https://steemitimages.com/DQmQhewmyiJDiqEjcB7jtaAvTh9jeyeJg1L3jsgHx52hJi9/9.png </p> <p> https://steemitimages.com/DQmWMaTwQsur4PXiwUT4eW8ZFCKv9txDNvW7PwatpN3fCg9/10.png </p> <p>그래서 중복 제거, 관심사의 분리, 인터페이스 구현을 통하여 Exam3 를 만든것이다.</p>