[국비학원 기록/Spring] 의존성 주입, setter, 생성자 예제
my code archive
article thumbnail
반응형
의존성 주입

 

1. 의존성 주입

1)개발자가 직접 코딩을 통해 컴포넌트(클래스)에 부여하는 것이 아니라

컨테이너가 연관 관계를 직접 규정하는 것.

2)각 클래스들의 변경이 자유로워짐(loosely coupled, 약한 결합)

 

3) 예

-쇼핑몰의 경우

상품 관리, 주문 관리, 회원 관리, 게시판 관리 등 구성.

-서로 관련 있는 기능들은 강하게 결합(tightly coupled)하고,

관련이 없는 기능들은 약하게 결합(loosely coupled)해야 좋은 프로그램.

 

2. 의존성 주입 장점

1)코드를 단순화할 수 있다.

2)애플리케이션 더 쉽게 유지 및 관리 가능

3)기존 구현 방법은 개발자가 직접 코드 안에서 객체의 생성과 소멸을 제어했지만

의존성 주입은 객체의 생성, 소멸과 객체간의 의존 관계를 컨테이너가 제어함.

 

3. 스프링 의존성 주입 방법

1)setter에 의한 주입

2)생성자에 의한 주입

 

예제

추가 라이브러리

member.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
       "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
       
<beans>
    <!-- id가 memberService인 빈을 MemberServiceImpl 이용해 만듦.
        빈을 만들면서 setter 주입 방식으로 id가 memberDAO인 빈을 자신의 속성에 주입함 -->
    <bean id="memberService" class="kr.co.ezenac.di03.MemberServiceImpl">
        <property name="memberDAO" ref="memberDAO" />    <!-- ref (주입되는 데이터가 기본형이 아닌 참조형인 경우) -->
    </bean>
    
    <!-- id가 memberDAO인 빈을 MemberDAOImpl 이용해 만듦 -->
    <bean id="memberDAO" class="kr.co.ezenac.di03.MemberDAOImpl"/>
</beans
cs

MemberDAO.java

1
2
3
4
5
public interface MemberDAO {
    
    public void listMembers();
 
}
cs

MemberDAOImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MemberDAOImpl implements MemberDAO{
 
    private MemberDAO memberDAO;
      
     public void setMemeberDAO(MemberDAO meb) { this.memberDAO = meb; }
     
     public void setMemberDAO(MemberDAO meb) {
         this.memberDAO=meb;
     }
    
    @Override
    public void listMembers() {
        System.out.println("listMembers 호출");
        System.out.println("회원 정보를 조회합니다.");
        
    }
 
}
 
cs

MemberService.java

1
2
3
4
public interface MemberService {
 
    public void listMembers();
}
cs

MemberServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//MemberServiceImpl : setter로 주입되는 빈을 받을 MemberDAO 타입의 속성과 setter를 이용해 구현함
public class MemberServiceImpl implements MemberService{
 
    //주입되는 빈을 저장할 MemberDAO 타입의 속성 선언
    private MemberDAO memberDAO;
    
    //설정 파일에서 memberDAO 빈을 생성 후
    //setter로 속성 memberDAO에 주입함
    public void setMemeberDAO(MemberDAO meb) {
        this.memberDAO = meb;
    }
    
    public void setMemberDAO(MemberDAO meb) {
        this.memberDAO=meb;
    }
    
    @Override
    public void listMembers() {
        //주입된 빈을 이용해 listMembers() 메서드 호출함
        memberDAO.listMembers();
    }
 
}
cs

MemberTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
 
public class MemberTest {
    
    //member.xml을 읽어들인 후 빈을 생성함
    //setter 주입 방식으로 주입한 빈 id인 memberService로 접근하여 listMembers() 메서드 호출
    public static void main(String[] args) {
        //실행시 member.xml에 설정한대로 빈 생성후 주입함.
        BeanFactory factory = new XmlBeanFactory(new FileSystemResource("member.xml"));
        
        //id가 memberService인 빈을 가져옴
        MemberService service = (MemberService)factory.getBean("memberService");
        
        service.listMembers();
    }
 
}
cs

실행 결과 콘솔창

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형