DI

DI 원칙

  • 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다.
  • 둘 다 추상화에 의존해야 하며, 이때 추상화는 세부사항에 의존하지 말아야 한다.

의존성 주입과 의존관계역전원칙

  • 의존성주입이란 메인모듈이 ‘직접’ 다른 ‘하위 모듈’ 에 대한 의존성을 주기보다는 중간에 DI가
    이부분을 가로채 메인 모듈이 ‘간접적’ 으로 의존성을 주입하는 방식

의존한다?

  • A가 B에 의존한다. => B가 변하면 A가 영향을 미치는 관계
  • A -> B

NEST JS에서의 의존성 주입


CODE

class Animal{
	private cat: Cat;
	getCrying():string{
		this.cat = new cat()
		return this.cat.Meow()
	}
}

class Cat {
	crying() : string{
		return '야옹'
	}
}
interface Cry{
	crying() : string;
}

class Animal {
	private animal: Animal;
	getCrying(animal: Animal): string {
		this.animal=animal;
		return this.animal.crying()
	}
}



class Cat implements Cry {
	crying(): string{
		return '야옹'
	}
}

class Dog implements Cry {
	crying(): string {
		return '멍멍'
	}
}
# cat.interface.ts

export interface Cat {
	name : string ;
	age: string ;
}
# cat.service.ts

@Injectable
export class CatService {
	private readonly cats: Cat[]=[];
	createCat(cat: Cat) {
		this.cats.push(cat);
	}
	findAll(): Cat[] {
		return this.cats;
	}
}
# cat.controller.ts

@Controller('cat')
export class catController {
	constructor(private readonly catService: CatService){
	}
	@Post('makeCat')
	makeCat(@Body() cat: Cat){
		return this.catService.createCat(cat)
	}
	@Get('findCat')
	findCat(): Cat[] {
		return this.catservice.findAll()
	}
}