Spring(2023-05-03)

권단비·2023년 5월 3일
0

IT

목록 보기
130/139

[의존성 주입]

의존성 주입 3가지
DI (Dependency Injection) = 의존성 주입
IOC = Inversion of control(제어의 역전) = 개발자 마다 사이트마다 설명 다 다름
IOC container = 스프링

방법1 : 완제품
방법2 : 조립품

1. 다이렉트 new 방법(주입 아님)
2. 생성자를 통해서 (외부 객체에서 넣는 방법) = 주입
3. Setter 함수를 통해서 = 주입
-------------------------------------------------------------------------------

class Human{ // 사람은 심장에게 의존한다.
private Heart heart = new 강심장(); // 1. 다이렉트 new 방법(주입 아님)
private Eyes eyes;
...
}

-------------------------------------------------------------------------------

class Computer{
// private CPU cpu = new Intel(); // 컴퓨터와 CPU는 의존관계 | 1. 다이렉트 new 방법(주입 아님)
private CPU cpu; // 컴퓨터와 CPU는 의존관계

Computer(CPU cpu){ // 2.생성자를 통한 주입
this.cpu = cpu;
	}
}

public class GetPresenter{
	public static void main(String[] args){
    	Intel intel = new Intel();
        Intel amd = new Amd();
       
        Computer computer = new Computer(intel); // 2.생성자를 통한 주입
        computer.setCpu(amd); // 2.생성자를 통한 주입
        }
}

-------------------------------------------------------------------------------
class Chip{
	Chip(){ // 2.생성자를 통한 주입
	this.cpu = cpu;
	}
}

class Cpu{
	private Chip chip;
}

class Computer{
	private CPU cpu;
    
	Computer(CPU cpu){ // 2.생성자를 통한 주입
	this.cpu = cpu;
	}
}

public class GetPresenter{
	public static void main(String[] args){
    Chip chip = new Chip();
    Cpu cpu = new Cpu(chip); // 주입
    // 객체 호출 순서 : chip → cpu → computer(IOC 제어의 역전)
    }
}

⇒ Spring에서는 @Autowired로 주입한다.

・사용안함 : private final BoardMapper mapper = new BoardMapper()
・사용 : @Autowired private final BoardMapper mapper;

IoC컨테이너에 들어있는 객체를 @Autowired를 통해 스프링이 알아서 주입함


[Lambda 람다]

Ioc에 대한 개념
java 1.0 = 1994년
java 5 = 크게 업데이트(Generic, 열거형(enum), @..)
java 8 = 람다, 스트림(IO 스트림 아님)

좀 더 간편하고 쉽게(코딩 수를 줄이자)
[lambdaExample.java]
interface Printable {
	public abstract void print(String s);
}

//class Printer implements Printable {
//
//	@Override
//	public void print(String s) -> {
//		System.out.println(s);
//	}
//}

public class lambdaExample {
	public static void main(String[] args) {
		Printable prn = (s) -> {System.out.println(s);}; // print(String s)와 동일
		prn.print("니노");
		System.out.println("최강아이돌");
	}
}

0개의 댓글