상세 컨텐츠

본문 제목

Spring Framework DI (Dependency Injection) 스프링 DI

Platform/Spring

by Computer_x86_64 2021. 8. 27. 11:14

본문

 

Spring에서 중요한 개념이 입니다.

IoC(Inversion of Control) Container = 소프트웨어를 부품을 담아 객체화시키는 그릇같은 것이며 개발자가 객체를 관리하지 않고 스프링 프레임워크에 관리권한을 넘겨 제어의 역전 이라합니다.

 

DI (Dependency Injection) 종속성 주입 

종속성 말부터 어렵습니다.

예를 들면....데스크탑을 구매하려고 알아보고 이것저것 샀는데 (메인보드, CPU, RAM, POWER....등등등)

메인보드는 AMD Ryzen 소켓 AMD-소켓AM4 을 사용하는데 

(소켓이란 메인보드와 CPU를 연결하는 핀의 모양으로 생각하면 될 것 같습니다.)

 

그런데 Intell제품 CPU를 사려고 하면 .... 안됩니다.

지금 메인보드는 AMD Ryzen 소켓 AMD-소켓AM4를 지원하기 때문입니다.

해당 소켓을 지원하는 Ryzen CPU를 사용할수 이는 메인보드인 것입니다.

 

그래서 일단 아래 소스를 보시면 DI를 적용하지않은 코드입니다. 

package blogTeest.Stream;
@FunctionalInterface
interface Math2 {
	public int add(int num);
}

class Seedadd2 implements Math2 {
	int count;
	
	public int add(int num) {
		for(int i =0; i <= num; i++) {
			count+=i;
		}
		return count;
	}
}

class countadd2 implements Math2 {
	int count;
	
	public int add(int num) {
		return count+=num;
	}
}

public class nodiTest {
	public static void main(String[] args) {
		
		//나 단순 덧셈만 필용해
		countadd2 ca2 = new countadd2();
		System.out.println(ca2.add(6));
		
		//
		Seedadd2 sa2 = new Seedadd2();
		System.out.println(sa2.add(6));
	}

}

인터페이스를 생성해 각 클래스별로 상속해 주었고 각자 원하는 기능을 구현했다. 

 

클라이언트가 원하는 기능을 변경시 그때마다 객체를 생성해 만들어주고 생성해야한다. 

 

package blogTeest.Stream;
@FunctionalInterface 
interface Math{
	public int add(int num);
}
class Add implements Math {
	private Math math;
	
	public Add (Math math) {
		this.math=math;
	}
	@Override
	public int add(int num) { return math.add(num); }
}


class Countadd implements Math {
	int count=0;

	@Override
	public int add(int num) { return count +=num; }
}

class Seedadd implements Math {
	int count;
	@Override
	public int add(int num) { 
		for(count=0; count < num; count++) {
			count+=count;
		}
		return count;
	}
}


public class diTest {
	public static void main(String[] args) {
		
		Add a = new Add(new Seedadd()); //필요시 매개변수에 new Countadd()하면 변경
		System.out.println(a.add(4));
	
	}

}

 

위에는 메인 에 있는 매개변수의 생성자만 변경해주면 그때마다 원하는 기능으로 교체할수 있습니다.

 

최소작업 최대효율...이미만... 이렇게 설계하려고 얼마나...노력했을지...

 

해당 내용을 이해하는데 객체지향 그중에서 다형성 개념을 알시면 이해가능합니다. 

 

 

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

Spring IoC(Inversion of Container)  (0) 2021.08.30

관련글 더보기

댓글 영역