์คํ๋ง ๋น์ ๋ฑ๋กํ๊ณ , ์์กด๊ด๊ณ ์ค์ ํ๊ธฐ
* ํ์ ์ปจํธ๋กค๋ฌ์ ์์กด๊ด๊ณ ์ถ๊ฐ
package hello.hello_spring.controller;
import hello.hello_spring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
//์์ฑ์ ์์ฑ ๋จ์ถํค : alt + Insertํค
@Autowired // ์์กด๊ด๊ณ ์ฃผ์
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
์ด์ ์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ new ..ํด์ ์ฃผ์ ํ๋ค๋ฉด, ์ด๋ฒ์๋ @Autowired์ ์ํด ์คํ๋ง์ด ์ฃผ์ ํด์ค๋ค.
์์ฑ์์ @Autowired ๊ฐ ์์ผ๋ฉด ์คํ๋ง์ด ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ
์ด๋์์ ์ฐพ์์ ๋ฃ์ด์ค๋ค. ์ด๋ ๊ฒ
๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ DI (Dependency Injection), ์์กด์ฑ ์ฃผ์
์ด๋ผ ํ๋ค.
* ํ์ ์๋น์ค ์คํ๋ง ๋น ๋ฑ๋ก
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired //์์กด๊ด๊ณ ์ฃผ์
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
....์๋ต...
}
์ฐธ๊ณ ) ์์ฑ์์ @Autowired ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์์ฑ ์์ ์ ์คํ๋ง ์ปจํ ์ด๋์์ ํด๋น ์คํ๋ง ๋น์ ์ฐพ์์ ์ฃผ์ ํ๋ค. ์์ฑ์๊ฐ 1๊ฐ๋ง ์์ผ๋ฉด @Autowired ๋ ์๋ตํ ์ ์๋ค.
* ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์คํ๋ง ๋น ๋ฑ๋ก
@Repository
public class MemoryMemberRepository implements MemberRepository{ //alt+Enter ๋๋ฌ์ ์๋์ผ๋ก ๋ฉ์๋ ๊ตฌํ
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
...์๋ต...
}
์คํ๋ง ๋น ๋ฑ๋ก ๊ณผ์
memberController > memberService > memberRepository
"memberService ์ memberRepository ๊ฐ ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์๋ค."
์คํ๋ง ๋น์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
- ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ (์์์ ํ ๋ฐฉ๋ฒ) : @Component๋ @Controller,@Service..๋ฑ์ ๋ดํฌ๋์ด์๋ค.
- ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
* ํ์ ์๋น์ค์ ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ @Service, @Repository, @Autowired ์ด๋ ธํ ์ด์ ์ ๊ฑฐ ํ ์งํ
package hello.hello_spring;
import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
import hello.hello_spring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
* DI์๋ ํ๋ ์ฃผ์ , setter ์ฃผ์ , ์์ฑ์ ์ฃผ์ ์ด๋ ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
์์กด๊ด๊ณ๊ฐ ์คํ์ค์ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ผ๋ฏ๋ก ์์ฑ์ ์ฃผ์ ์ ๊ถ์ฅํ๋ค.
@Controller
public class MemberController {
// ์์กด๊ด๊ณ ์ฃผ์
(ํ๋ ์ฃผ์
)
// @Autowired private MemberService memberService;
private MemberService memberService;
@Autowired // ์์กด๊ด๊ณ ์ฃผ์
(์์ฑ์ ์ฃผ์
)
public MemberController(MemberService memberService) { //์์ฑ์ ์์ฑ ๋จ์ถํค : alt + Insertํค
this.memberService = memberService;
}
}
*** ์ค๋ฌด์์๋ ์ฃผ๋ก ์ ํํ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ ๊ฐ์ ์ฝ๋๋ ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ํํ ๋์ง ์๊ฑฐ๋, ์ํฉ์ ๋ฐ๋ผ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ฉด ์ค์ ์ ํตํด ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
//return new MemoryMemberRepository();
return new DBMemberRepository(); // ๋์ค์ DB ์ฐ๊ฒฐ ํ์๋ ์ฌ๊ธฐ๋ง ์์ ํ๋ฉด ๋จ.
}
}
'๋ฐฑ์๋(Back-End) ๊ฐ๋ฐ > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBoot] 6.1_์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ (H2) (0) | 2025.02.26 |
---|---|
[SpringBoot] 5_ํ์๊ด๋ฆฌ-์น MVC ๊ฐ๋ฐ (0) | 2025.02.26 |
[SpringBoot] 3.3_ํ์ ์๋น์ค ๊ฐ๋ฐ ๋ฐ ํ ์คํธ (0) | 2025.02.25 |
[SpringBoot] 3.2_ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ํ ์คํธ ์ผ์ด์ค ์์ฑ (0) | 2025.02.25 |
[SpringBoot] 3.1_ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ตฌํ (0) | 2025.02.25 |