ํ๋ฉด ๊ตฌ์ถ์ ์ํด์๋ Controller์ View Template์ด ํ์ํ๋ค. ๊ทธ๋ฌ๋ฌ๋ฉด MemberController๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ, MemberController๋ MemberService๋ฅผ ํตํด์ ํ์๊ฐ์ ๊ณผ ๋ฐ์ดํฐ ์กฐํ๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค. ์ด๋ฌํ ๊ด๊ณ๋ฅผ MemberController๊ฐ MemberService์ ์์กดํ๋ค๊ณ ํํํ๋ค.
๐ ์คํ๋ง ๋น
์คํ๋ง์ด ์ฒ์์ ๋ฐ ๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์๊ธฐ๋๋ฐ, ๊ฑฐ๊ธฐ์ @Controller์ด ์์ผ๋ฉด MemberController ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฃ์ด๋๋ค. ์ด๋ ๊ฒ ์ปจํ ์ด๋์ ๋ฃ์ด๋๋ฉด ์คํ๋ง์ด ๊ด๋ฆฌํ๊ฒ ๋๋ฉฐ, ์ด ๊ณผ์ ์ ์คํ๋ง ์ปจํ ์ด๋์์ ์คํ๋ง ๋น์ด ๊ด๋ฆฌ๋๋ค๊ณ ํํํ๋ค.
@Controller
public class MemberController {
private final MemberService memberService; //์คํ๋ง ์ปจํ
์ด๋์์ ๋ฐ์์จ์ผ ํ๋ ์
์ฅ
@Autowired
public MemberController(MemberService memberService) { //์์ฑ์
this.memberService = memberService;
}
}
๐ @Autowired
์์ฑ์์ @Autowired
๊ฐ ์์ผ๋ฉด ์คํ๋ง์ด ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ
์ด๋์์ ์ฐพ์์ ๋ฃ์ด์ค๋ค. ์ด๋ ๊ฒ ๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ DI(Dependency Injection), ์์กด์ฑ ์ฃผ์
์ด๋ผ ํ๋ค. ์ด์ ํ
์คํธ์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฃผ์
ํ๊ณ , ์ฌ๊ธฐ์๋ @Autowired
์ ์ํด ์คํ๋ง์ด ์ฃผ์
ํด์ค๋ค.
๐ ์ค๋ฅ ๋ฐ์
MemberService๊ฐ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์์ง ์๋ค๋ ์ค๋ฅ์ด๋ค.
MemberController์ @Autowired
๋ฅผ ํตํด ์คํ๋ง ์ปจํ
์ด๋์์ memberService๋ฅผ ๊ฐ์ ธ์์ผ ํ๋๋ฐ, memberService๊ฐ ์์ํ ์๋ฐ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์คํ๋ง์ด ์ธ์ํ์ง ๋ชปํ๋ค.
@Service
public class MemberService {}
@Repository
public class MemoryMemberRepository implements MemberRepository {}
โ MemberService์ @Service๋ฅผ ์ ์ธํ๊ณ , MemoryMemberRepository์ @Repository๋ฅผ ์ ์ธํ๋ฉด ๊ฐ๊ฐ์ด ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋์ด ์๋ฌ๊ฐ ํด๊ฒฐ๋๋ค.
โ ์คํ๋ง์ ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น์ ๋ฑ๋กํ ๋, ๊ธฐ๋ณธ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๋ฑ๋กํ๋ค(์ ์ผํ๊ฒ ํ๋๋ง ๋ฑ๋กํด์ ๊ณต์ ํ๋ค) ๋ฐ๋ผ์ ๊ฐ์ ์คํ๋ง ๋น์ด๋ฉด ๋ชจ๋ ๊ฐ์ ์ธ์คํด์ค๋ค. ์ค์ ์ผ๋ก ์ฑ๊ธํค์ด ์๋๊ฒ ์ค์ ํ ์ ์์ง๋ง, ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๋ฉด ๋๋ถ๋ถ ์ฑ๊ธํค์ ์ฌ์ฉํ๋ค.
๐ ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
@Component
์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
@Controller
๊ฐ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋ ์ด์ ๋ ์ปดํฌ๋ํธ ์ค์บ ๋๋ฌธ์ด๋ค.
@Component
๋ฅผ ํฌํจํ๋@Controller
,@Service
,@Repository
์ด๋ ธํ ์ด์ ๋ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
๐ ์คํ๋ง ๋น ์๋ ๋ฑ๋ก ์ ์์ฌํญ
โ ์คํ๋ง ๋น ์๋ ๋ฑ๋ก์ ํ์ ํจํค์ง์ ๋ํด์๋ง ์ด๋ฃจ์ด์ง๋ค.
MemberService์ MemberRepository์ @Service, @Repository, @Autowired ์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐํ๊ณ ์งํ
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
์ด๋ ๊ฒ ํ๋ฉด ์คํ๋ง์ด ๋ฐ ๋ SpringConfig๋ฅผ ์ฝ๊ณ @Bean ์ด๋ ธํ ์ด์ ์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์คํ๋ง ๋น์ ๋ฑ๋ก๋๊ณ , ์คํ๋ง ๋น์ ๋ฑ๋ก๋์ด ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ค์ MemberService์ ๋ฃ์ด์ค๋ค.
๐ ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ์ ๋์ ์ฅ์
์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ๋ค๊ฐ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ค๊ฑฐ๋ ํ๋ ๋ณ๋ ์ฌํญ์ด ์๊ธฐ๋ฉด, ์ฌ๋ฌ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ @Configuration์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ค๋ฅธ ๊ฒ์ ์์ ํ ํ์์์ด ์ด ํ์ผ๋ง ์์ ํ๋ฉด ๋๋ค๋ ๊ฒ์ด ์ฅ์ ์ด๋ค. ์๋ฅผ ๋ค์ด DB๋ฅผ ์ฐ๊ฒฐํ DbMemberRepositroy๋ก ๋ณ๊ฒฝํ๋ค๊ณ ํ๋ฉด, SpringConfig ํด๋์ค์์ return ๊ฐ์ DbMemberRepository๋ก ๋ณ๊ฒฝ๋ง ํ๋ฉด ๋๋ค.
๐ ์์กด์ฑ ์ฃผ์ (DI) 3๊ฐ์ง ๋ฐฉ๋ฒ
์์กด์ฑ ์ฃผ์
(DI)์๋ ํ๋ ์ฃผ์
, setter ์ฃผ์
, ์์ฑ์ ์ฃผ์
์ด๋ ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
ํ๋ ์ฃผ์
: ๋ณํ์ ์์ ๋กญ๊ฒ ํ ์ ์๋ค
setter ์ฃผ์
: public์ผ๋ก ์ด๋ ค์์ด์ผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ public์ผ๋ก ๋
ธ์ถ๋์ด ์์ด์ผ ํด์ ์ํํ๋ค
์์ฑ์ ์ฃผ์
: ์กฐ๋ฆฝ ์์ ์ ์์ฑ์๋ก ํ ๋ฒ๋ง ์กฐ๋ฆฝํด๋๊ณ ์ดํ๋ก๋ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ๋ง์ ์ ์๋ค
์์กด๊ด๊ณ๊ฐ ์คํ์ค์ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ผ๋ฏ๋ก ์์ฑ์ ์ฃผ์ ์ ๊ถ์ฅํ๋ค.
์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์