Spring - 의존성주입

Hwawon_2·2022년 3월 24일
0

의존성 주입

의존성이란 하나의 객체가 다른 객체 없이는 제대로 된 역할을 할 수 없음을 의미 합니다.
예를 들어, 음악프로그램에서 백댄서가 없이는 가수만이라도 있다면 어찌저찌 무대를 구성하는것은 가능합니다.
그런데 가수가 없고 백댄서만 있는 상황이라면 어떨까요? 이 경우는 무대 자체가 성립하지 않습니다.
이 경우는 무대가 성힙하기 위해 반드시 필요한 것이 가수이므로 무대는 가수에 의존한다 라고 표현할 수 있습니다.

com.ict.controller - 우클릭 new - package - com.ict.controller.di 생성

com.ict.controller.di - 우클릭 new - class - DiMainJavaver 생성(메인메서드 체크)

의존성 주입 test를 하기 위해서 패키지 하나 더 생성
com.ict.controller.di - 우클릭 new - package - com.ict.controller.di.classfile 생성

가수랑 무대를 만들어 주겠습니다.
com.ict.controller.di.classfile - 우클릭 new - clss - Singer 생성
com.ict.controller.di.classfile - 우클릭 new - class - Stage 생성

Singer
Singer 는 내부에다가 노래하는 기능만 넣습니다.
public void sing(){
System.out.println("가수가 노래를 합니다.");

//가수는 무대가 있건 없건 노래를 할 수 있기 때문에
// 다른 어떤 요서 없이 오직 노래기능만 넣어둡니다.

Stage
Stage는 멤버 변수로 Singer를 가집니다.
(생성자에서 Singer가 있어야만 쓸수 있게 )
// 무대는 가수가 있어야 성립하며, 그때그때 다른 가수를 세울수도 있습니다.
private Singer singer; // 가수 멤버 변수

public Stage(Singer singer){ // 생성자(싱어타입을 넣어줘야 한다)
this.singer = singer; // 무대에 설 가수를(싱어) 입력해야 생성자가 호출되도록처리
}

public void perform(){
System.out.println("무대에서 ")
this.singer.sing();
}

의존 상황을 만들어 보겠습니다.
DiMainJavaver
// 가수, 무대를 생성한 다음
Singer singer = new Singer(); // (임폴트)
Stage stage = new Stage(singer); // (임폴트)
ㄴ>stage 안에 아무것도 요구하지앟은 stage는 정의한적이 없어서 singer를 넣어줘야 합니다.
ㄴ>위에서 생성자를 만들때 public Stage(Singer singer) 이렇게 만들었음
ㄴ> singer가 없으면 stage도 없다.

// 무대의 공연(perform)메서드를 호출
stage.perform();
// 그냥 가수가 노래하는것도 가능한지 테스트 해주세요.
singer.sing();

그림판으로 그려보면

stage로 넘어갈때 singer에는 100번지가 전달 되었기 때문에
100번지 라는 주소를 this.singer 에다가 singer를 대입 해줘라
그럼 200번지 안에 있는 singer이 100번지 singer이랑 연결이 된다.

실행 해보면

무대에서 = "perform"
가수가 노래를 합니다. = "sing"
가수가 노래를 합니다. = "singer.sing"

= stage가 singer에게 의존한다.

profile
코딩 일기장

0개의 댓글