앞서 우리는 DI는 생성자를 기반으로 하는 생성자 인젝션과 setter를 기반으로 하는 setter인젝션이 있다고 배웠습니다.
그럼 중간에 다중변수나 의존관계주입은 뭐냐 라고 하실수 있는데, 그건 DI를 할 수 있도록 방법입니다.
방법이라는 말이 안맞긴 하지만, DI를 할때 하나의 생성자만 만들거나? 아니면 하나의 값만 인자로 넘기는것이 아니죠?
여러 생성자를 만들어야하고, 다양한 데이터값을 인자로 전달을 하기위한 방법을 소개한것입니다.
그리고 오늘 DI setter를 기반으로 하는 setter인젝션을 배워볼거예요.
기본적으로 setter인젝션을 하기위해 setter메소드를 추가 하도록 하겠습니다.
코드를 설명하기 앞서 유사한 코드는 지우고 시작하시는게 좋아요.
우리는 크게 powerOn,powerOff,volumeUp,volumeDown 4개의 기본 메소드를 가지고있고, SamsungTV()기본 메소드 하나 총 5개를 기본으로 쓴다고 생각하시면 됩니다.
그럼 위의 2개 메소드 까지 합치면 총 7개의 메소드가 존재하게 돼요.
다시 본론으로 넘어와, 위의 두개 메소드를 잘보시면 메소드명 앞에 set이 붙습니다.
set메소드명() 이렇게요.
set메소드는 컨테이너가 <bean>객체를 생성하고 난 후 자동으로 호출합니다.
=> 이말은 객체를 생성해야하기때문에 기본적으로, 기본 생성자도 반드시 존재해야 합니다.
그리고 우리가 항상 하던 패턴 기억하시나요? 코드를 수정하면 xml까지 수정을 해줘야하죠?
setter는 엘리먼트를 <property>를 사용합니다.
기존에는 <constructor-arg>를 썼지만, 그 자리가 <property>로 바뀌어 있습니다.
<property>는 name이라는 속성값을 갖는데, name은 호출하고자 하는 메소드 이름을 씁니다.
우리는 아까 setSpeaker와 setPrice를 썼기 때문에 name에는 speaker와 price가 오게 된것 입니다.
어? 앞에는 setS 대문자인데 왜 name은 s소문자로 시작하지..? 라고 의문이 드실수있어요!
사람은 대문자와 소문자가 같다고 인지가 되지만, 컴퓨터는 대소문자를 구분할수도 있고? 안할수도 있거든요.
왜인지는 아스키코드라는걸 보시면 이해갈거예요!(이부분에 대해서 나중에 cs기본으로 설명해 드릴께요.)
잡담은 그만하고, setter라는걸 set이 붙었다고 알아채는것이 아니라 set이 붙고 첫글자가 대문자인 걸 호출 합니다.
그 뒤 ref와 value는 다른 엘리먼트와 똑같이 사용하시면 됩니다.
'JavaScript > Spring' 카테고리의 다른 글
[Spring Framework] 스프링 p: (네임스페이스) 사용 방법 (0) | 2022.02.02 |
---|---|
[spring framework 기초] spring 컨테이너의 종류(spring 기본 및 이론) (0) | 2022.01.30 |
[Spring framework] 스프링 프레임워크 - 의존관계 변경_의존성 주입(3) (0) | 2022.01.29 |
[spring framework]스프링 프레임워크 DI_의존성주입_다중 변수 맵핑(3) (0) | 2022.01.28 |
[spring framework]스프링 프레임워크 DI_의존성주입_생성자 인젝션 (2) (0) | 2022.01.27 |