์ค๋์ ์์กด๊ด๊ณ์ ๋ํด์ ๋ฐฐ์ ๋ค!
์ผ๋ฅธ ๋ค์์ฃผ ์์ ์ง๊ธ ๋ฃ๊ณ ์๋ ์ ๋ฌธ ๊ฐ์๋ฅผ ๋๋ด์ผ๊ฒ ๋ค,,,๏ฝก๏พ(๏พ´ω`๏พ)๏พ๏ฝก
์คํ๋ง ๋น์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
- ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
- ์๋ฐ ์ฝ๋๋ก ์ง์ ๋ฑ๋กํ๊ธฐ
์คํ๋ง๋น์ ์ฝ๊ฒ๋งํด์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ด์ผ๊ธฐ ํ๋ค.
์ปดํฌ๋ํธ ์ค์บ์ ์ด์ฉํด์ ์๋์ ์ผ๋ก ์์กด๊ด๊ณ ์ค์
1. ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ ์์ฑ
package hello.hellospring.controller;
import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
์์ฑ์์ @Autowired๊ฐ ์๋ค๋ฉด ์คํ๋ง์ด ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฃ์ด์ค๋ค.
์ฆ, ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๋ฐ ๋ ์์ฑ์๋ฅผ ํธ์ถํ๋๋ฐ, ์์ฑ์์ @Autowired๋ผ๊ณ ์ฐ์ฌ์์ผ๋ฉด ๋ฉค๋ฒ์๋น์ค๋ฅผ ์คํ๋ง์ด ์คํ๋ง ์ปจํ ์ด๋์ ์๋ ๋ฉค๋ฒ์๋น์ค๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๊ฒฐ์์ผ ์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ DI(Dependency Injection)์ด๋ผ๊ณ ํ๋ค.
2. ํ์ ์๋น์ค ์คํ๋ง๋น ๋ฑ๋ก
3. ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์คํ๋ง๋น ๋ฑ๋ก
@Autowired๊ฐ ๋์ด์์ผ๋ฉด ์คํ๋ง์ด ๋ฑ ์์ฑ์ ํ ๋, @service๋ฅผ ๋ณด๊ณ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก์ ํ๋ค. ๊ทธ๋ฌ๊ณ ์์ฑ์๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ๋ @Autowired๊ฐ ์์ผ๋ฉด ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ํ์ํ ๊ฒ์ ์์์ฑ๊ณ ์คํ๋ง ์ปจํ ์ด๋์ ์๋ ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ฃ์ด์ค๋ค. (๊ตฌํ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๋์ด์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์๋น์ค์ ์ฃผ์ ํด์ค๋ค)
์คํ๋ง๋น์ด ์ ๋ฑ๋ก ๋์๋ค๋ฉด
์คํ๋ง ์ปจํ ์ด๋
memberController ---> memberService ---> memberRepository
์ด๋ ๊ฒ ๋ฉค๋ฒ์๋น์ค์ ๋ฉค๋ฒ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์คํ๋ง์ปจํ ์ด๋์ ์คํ๋ง๋น์ผ๋ก ๋ฑ๋ก๋์๋ค!
๋ฉ์ธ ๋ฉ์๋๋ฅผ ์คํํ์๋ ํฐ์บฃ8080์ด ์ ๋ฌ๋ค๋ฉด ์คํ๋ง์ด ์ปจํ ์ด๋๋ฅผ ๋ง๋ค ๋ ๋ฌธ์ ๊ฐ ์์ด ์ ๋์๋ค๋ ๊ฒ์ด๋ค!
์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋ก
** ์๋ฐ ์ฝ๋๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํ๊ธฐ ์ ์ ์ ์ ์์ฑํ๋ @Service, @Autowired, @Repository๋ฅผ ์ ๊ฑฐํด์ผ๋๋ค. **
1. service์ SpringConfig ์๋ฐ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
package hello.hellospring.service;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean // spring bean์ ๋ฑ๋กํ ๊ฑฐ์ผ!
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
์์ ํ๋ ๋ฐฉ๋ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ด๋ฒ ๋ฐฉ๋ฒ์ ๊ทธ๋ฅ ํ ์๋ฐ ํ์ผ์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค!
๋ฉค๋ฒ ์๋น์ค์ ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ ๋ค ์คํ๋ง ๋น์ ๋ฑ๋กํ๊ณ , ์คํ๋ง๋น์ ๋ฑ๋ก๋์ด์๋ ๋ฉค๋ฒ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ฉค๋ฒ์๋น์ค์ ๋ฃ์ด์ค๋ค.
์คํ๋ง์ด ์ฌ๋ผ์ฌ ๋ ๋น์ ๋ณด๊ณ ์คํ๋ง๋น์ ๋ ๋ค ์ฌ๋ ค์ค๋ค. ๊ทธ๋ฌ๋ฉด์ ๋ฉค๋ฒ ์๋น์ค๋ ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ํ๋ค. ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํธ์ถํ๊ณ ์ ์ ํ๋ ๊ฒ์ฒ๋ผ ์คํ๋ง๋น์ ๋ฉค๋ฒ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ฃ์ด์ค๋ค.
DI์๋ ํ๋ ์ฃผ์ , ์์ฑ์ ์ฃผ์ , setter ์ฃผ์ ์ ๋ฐฉ๋ฒ์ด ์๋ค.
- ํ๋์ฃผ์
ex) @Autowired private MemberService memberService; ์ด๋ฐ์์ผ๋ก ๋ฐ๋ก ์ฃผ์ ์ ํด์ฃผ๋ ๊ฑด๋ฐ ๋ณ๋ก ์ข์ง ์๋ค๊ณ ํ๋ค.
- ์์ฑ์ ์ฃผ์ (์ง๊ธ ์ฐ๊ณ ์๋ ๋ฐฉ๋ฒ)
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
- setter ์ฃผ์
@Autowired
public void setMemberService (MemberService memberService){
this.memberService = memberSevice;
}
setter ์ฃผ์ ์ ๋จ์ : setter์ฃผ์ ์ ๋๊ตฐ๊ฐ๊ฐ ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ์ ๋ ์ด๊ฒ ํผ๋ธ๋ฆญ์ผ๋ก ์ด๋ ค์์ด์ผ๋๋ค. ๋ฉค๋ฒ์๋น์ค๋ฅผ ์ค๊ฐ์ ๋ฐ๊ฟ์น๊ธฐ ํ ํ์๊ฐ ์๋๋ฐ ์ด๊ฒ ํผ๋ธ๋ฆญํ๊ฒ ๋ ธ์ถ์ด ๋๋ค. ์ด๊ฑธ ์ค๊ฐ์ ๋ฐ๊พธ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
ํ๋ฒ ์ธํ ์ด ๋ ๊ฑด ๋ฐ๊ฟ์ผ์ด ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์ setter์ฌ์ฉ์ ์ ํ์ง ์๋๋ค.
spring ๊ด๋ จ ํฌ์คํ ์ ๋๋ถ๋ถ ์ธํ๋ฐ์ ๊น์ํ ๊ฐ์ฌ๋ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ๋ ๊ธ์ด๋ค!!
์ด๋ฒ์ ๊ฐ์๊ฐ ๋ ์๋ก ์ฌ๋ผ์๋ค. ์ผ๋ฅธ ๊ฒฐ์ ํด์ผ์ง!!! ๊ทธ ๊ฐ์๋ฅผ ๋ค์ผ๋ ค๋ฉด ํ์ฐธ ๋จ์์ง๋ง...ํ์ดํ ์ด๋คูฉฬ(ห•อ ๊ด •อห)ู
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
H2 DB ๋ค์ด๋ก๋ [์ค์น / ์๋ฒ ์คํ] (0) | 2021.06.27 |
---|---|
Spring [ ํ์ ๋ฑ๋ก/์กฐํ/ํ์ ๊ด๋ฆฌ ์์ /์คํ๋ง] (0) | 2021.06.25 |
Spring [ํ์ ๊ด๋ฆฌ / ๋ฐฑ์๋] (0) | 2021.06.21 |
Spring ๊ธฐ์ด๋ค์ง๊ธฐ [์ ์ ์ปจํ ์ธ / MVC / API] (0) | 2021.06.10 |
Spring ํ๋ก์ ํธ ํ๊ฒฝ์ค์ [ํ๋ก์ ํธ ์์ฑ / ๋น๋ ์คํ] (0) | 2021.06.05 |