본문 바로가기
Programming Languages/Java

Chapter 15. 의존성 주입(Dependency Injection)

by 더 이프 2023. 1. 13.
728x90

목차

    1. 의존성 주입(Dependency Injection)

    ■ 의존성 주입이란?

    • 의존성 주입은 객체가 의존하는 또 다른 객체를 외부에서 선언하고 이를 주입하는 것을 의미
    • 의존 관계는 사용할 객체에 대한 레퍼런스를 외부에서 제공함으로써 만들어짐

    ■ 장점

    • 재사용성이 높은 코드임
    • 가독성이 높아짐
    • 확장성을 가짐

     

    2. 예시

    ■ Test_A

    package j12_배열.di;
    
    public class Test_A {
    	// setter를 통해 바뀌면 안될때는 final을 넣어서 상수로 만듬
    	private Test_B tb;
    
    	// 생성자를 매개변수로 주는 방법
    	// RequiredArgsConstructor
    	public Test_A(Test_B tb) {
    		this.tb = tb; // 의존성이 높음, 결합도가 높다
    	}
    
    	// Set을 이용해서 주는 방법
    	public void setTb(Test_B tb) {
    		this.tb = tb;
    	}
    
    	public void testA1() {
    		System.out.println("테스트A1 메소드 호출!!");
    
    		tb.testB1();
    	}
    
    	public void testA2() {
    		System.out.println("테스트A2 메소드 호출!!");
    
    		tb.testB1();
    	}
    }

    ■ Test_B

    package j12_배열.di;
    
    public class Test_B {
    
    	private Test_C tc;
    
    	public Test_B(Test_C tc) {
    		this.tc = tc;
    	}
    
    	public void testB1() {
    		System.out.println("\t테스트B1 메소드 호출");
    		Test_C tc = new Test_C();
    
    		tc.testC1();
    	}
    
    }

    ■ Test_C

    package j12_배열.di;
    
    public class Test_C {
    
    	public void testC1() {
    		System.out.println("\t테스트C1 메소드 호출");
    	}
    
    }

    ■ Main

    package j12_배열.di;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Test_C tc = new Test_C();
    		Test_C tc2 = new Test_C();
    
    		Test_B tb = new Test_B(tc2);
            
    		// Dependency injection
    		// 객체 주입은 외부에서 일어나야 함
    		Test_A ta = new Test_A(tb);
            
    		// 기존 것에서 다른 부품으로 갈아 끼울 때
    		ta.setTb(tb); 
    
    		ta.testA1();
    		ta.testA2();
    	}
    
    }