μ€νλ§ λΉκ³Ό μμ‘΄κ΄κ³
μ§κΈκΉμ§ νμ μλΉμ€λ₯Ό ν΅ν΄ νμ κ°μ κ³Ό μ‘°νλ₯Ό νμ¬ νμ 리ν¬μ§ν 리μ μ μ₯νκ³ λ€μ κΊΌλΌ μ μλλ‘ λ‘μ§μ λ§λ€μλ€. μ΄μ μΉμ 보μ΄λλ‘ νλ©΄μ λμμΌ νλλ°, μ΄ μμ μ μν΄μ Controllerμ Viewκ° νμνλ€.
μ¬κΈ°μ νμ 컨νΈλ‘€λ¬λ νμ μλΉμ€λ₯Ό ν΅ν΄ νμ κ°μ κ³Ό λ°μ΄ν° μ‘°νλ₯Ό νλ€.
μ΄λ¬ν κ΄κ³λ₯Ό μλ‘ μμ‘΄κ΄κ³κ° μλ€κ³ νννλλ°, μ¦ νμ 컨νΈλ‘€λ¬λ νμ μλΉμ€λ₯Ό μμ‘΄νκ³ μλ€.
νμ 컨νΈλ‘€λ¬κ° νμ μλΉμ€μ νμ 리ν¬μ§ν 리λ₯Ό μ¬μ©ν μ μκ² μμ‘΄κ΄κ³λ₯Ό μ€μ ν΄λ³΄μ.
μ€νλ§ λΉμ λ±λ‘νκ³ μμ‘΄κ΄κ³λ₯Ό μ€μ νλ 2κ°μ§ λ°©λ²
- μ»΄ν¬λνΈ μ€μΊκ³Ό μλ μμ‘΄κ΄κ³ μ€μ
- μλ° μ½λλ‘ μ§μ μ€νλ§ λΉ λ±λ‘νκΈ°
μ€νλ§ λΉ(Spring Bean)
- Spring IOC 컨ν μ΄λκ° κ΄λ¦¬νλ μλ° κ°μ²΄λ₯Ό λ§νλ€.
- IoC(Inversion of Control, μ μ΄μ μμ ): νλ‘κ·Έλ¨μ νλ¦μ κ°λ°μκ° μλ νλ μμν¬κ° μ£Όλνκ² λλ€. κ°μ²΄μ μμ±μμ μλ©ΈκΉμ§ νλ μμν¬κ° κ΄λ¦¬νλ€.
1. μ»΄ν¬λνΈ μ€μΊκ³Ό μλ μμ‘΄κ΄κ³ μ€μ
1) μ»΄ν¬λνΈ μ€μΊ
- μ€νλ§μ΄ μ²μμ λ° λ λΉ μ€νλ§ μ»¨ν μ΄λκ° μμ±λλλ°, κ·Έ μμ @Component μ΄λ Έν μ΄μ μ΄ μλ κ°μ²΄λ₯Ό μ€νλ§ λΉμΌλ‘ λ±λ‘νμ¬ μμ± λ° κ΄λ¦¬νλ€. μ΄λ¬ν λ°©μμ μ€νλ§ μ»¨ν μ΄λμμ μ€νλ§ λΉμ΄ κ΄λ¦¬λλ€κ³ νννλ€.
- μ€νλ§ λΉμ λλΆλΆ μ±κΈν€μΌλ‘ λ±λ‘λλ€. λ°λΌμ κ°μ μ€νλ§ λΉμ΄λ©΄ λͺ¨λ λμΌν μΈμ€ν΄μ€μ΄λ€.
- μ€νλ§ λΉμ μ€νλ§κ³Ό κ΄λ ¨λ κΈ°λ₯μ μνν μ μλ€.
- @Controller, @Service, @Repositoryλ λͺ¨λ @Componentλ₯Ό ν¬ν¨νκ³ μμ΄ μ€νλ§ λΉμΌλ‘ μλ λ±λ‘λλ€.
- μ€ν μ ν리μΌμ΄μ (@SpringBootApplication)μ νμ ν¨ν€μ§μ λ±λ‘λ κ°μ²΄μμλ§ μ»΄ν¬λνΈ μ€μΊμ μννλ€.
2) μλ μμ‘΄κ΄κ³ μ€μ
- μμ±μμ @Autowired μ΄λ Έν μ΄μ μ΄ μμΌλ©΄, κ°μ²΄ μμ± μμ μ μ€νλ§μ΄ μ°κ΄λ κ°μ²΄λ₯Ό μ€νλ§ μ»¨ν μ΄λμμ μ°Ύμμ λ£μ΄μ€λ€. (μμ±μκ° 1κ°λΌλ©΄ μλ΅ κ°λ₯)
- κ°μ²΄ μμ‘΄κ΄κ³λ₯Ό μΈλΆμμ λ£μ΄μ£Όλ κ²μ DI(Dependency Injection, μμ‘΄μ± μ£Όμ )λΌ νλ€.
- μ΄ κ΅¬μ‘°λ 컨νΈλ‘€λ¬μμ μΈλΆ μμ²μ λ°κ³ μλΉμ€μμ λΉμ¦λμ€ λ‘μ§μ λ§λ€κ³ 리ν¬μ§ν 리μμ λ°μ΄ν°λ₯Ό μ μ₯νλ μ ννλ ν¨ν΄μ΄λ€.
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;
@Autowired
public MemberController(MemberService memberService){
this.memberService = memberService;
}
}
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
@Repository
public class MemoryMemberRepository implements MemberRepository {}