IoC&DI
κΈ°μ‘΄ νλ‘μ νΈμ μ μ©ν΄λ³΄κΈ°
# IoC&DI λ Spring ν΅μ¬ κΈ°μ λ‘ κ°κ° μ€κ³ μμΉ, λμμΈ ν¨ν΄μ λ»νλ€.
μ μ΄κ²μ μ 곡νλκ°? μ’μ μ½λλ₯Ό μν΄ μ 곡νλ€.
<μ’μ μ½λλ?>
- λ Όλ¦¬κ° κ°λ¨ν΄μΌ νλ€.
- μ€λ³΅μ μ κ±°νκ³ ννμ λͺ ννκ² νλ€.
- μ½λλ₯Ό μ²μ 보λ μ¬λλ μ½κ² μ΄ν΄νκ³ μμ ν μ μμ΄μΌ νλ€.
- μμ‘΄μ±μ μ΅μνν΄μΌ νλ€.
- μλ‘μ΄ κΈ°λ₯μ μΆκ° νλλΌλ ν¬κ² ꡬ쑰μ λ³κ²½μ΄ μμ΄μΌ νλ€.
μ΄ ννΈμμ κ°μ₯ μ€μν ν€μλλ μμ‘΄μ±, μ£Όμ μ΄ λκ°μ§μ΄λ€!
κ°νκ²°ν©μΌμλ‘ μ½λ λ΄μμ μ΄λ€ λΆλΆμ λ³κ²½νλ €κ³ ν λ μ½λλ₯Ό λμμμ΄ μμ ν΄μΌ νλ€. (λΉν¨μ¨μ )
#μμ‘΄μ±
κ·Έλμ μ΄ κ°ν κ²°ν©μ μ½νκ² λ§λ€μ΄μΌνλ€.
interface λ€νμ±μ μ리λ₯Ό ν΅ν΄ μ½νκ² λ§λ€ μ μλ€!
- μΈν°νμ΄μ€ μμ±
- μΈν°νμ΄μ€μ μΆμ λ©μλλ₯Ό μ€λ²λΌμ΄λ©ν΄μ ꡬν체 λ§λ€κΈ°.
# μ£Όμ
- κ·Έλ κ² λ―Έλ¦¬ λ§λ€μ΄μ§ ꡬν체λ₯Ό μ λ§μ λ§κ² μμ λ£μ΄μ£ΌκΈ°λ§ νλ©΄ λ¨. (νΉμ κ°μ²΄μ νμλ‘ νλ κ°μ²΄λ₯Ό μ λ¬ν΄μ£Όλ κ².)
#μ μ΄μ μμ !
κ°ν κ²°ν© - κ°μ²΄μμ νΈμΆνλ λ΄μ©μ΄ λ¬λΌμ§ λλ§λ€ ν΄λΉ λ©μλμ λ΄μ©μ λμμμ΄ μμ ν΄μΌν¨.
μμ‘΄μ± μ£Όμ - 미리 λ§λ€μ΄λ κ²μ λμ λ§κ² λ£μ΄μ£ΌκΈ°λ§ νλ©΄ λλ κ²μ. λΆνμν μμ±μ΄λ λ©μλ λ΄μ© μμ μ μ ν΄λ λ¨!
κ²°κ΅ μ΄κ²λ
DIλ₯Ό ν΅ν΄ IoC μ€κ³ μμΉμ μ§μΌ°λ€. λΌκ³ μ΄μΌκΈ° ν μ μλ κ²!
<Ioc, DI μ§μ μ μ©ν΄λ³΄κΈ°!>
- μ μ©νκΈ° μ , 2-1 μμ Service, Controller κ°κ°μμ λ°λ³΅λλ μ½λλ₯Ό μ€μ¬λ³Ό κ²μ΄λ€.
MemoRepository memoRepository = new MemoRepository(jdbcTemplate);
- κ°μ²΄ μ€λ³΅ μμ± μ½λκ° λ°λ³΅λλ€!
# MemoService κ° μμ±λ λ MemoRepositoryλ₯Ό λ± νλ² μμ±ν΄μ κ³μ μ¬μ©νκ² λ§λ€μ΄λ³΄μ
public class MemoService {
// λ©€λ² λ³μ μ μΈ
private final MemoRepository memoRepository;
// μμ±μ: MemoService(JdbcTemplate jdbcTemplate)κ° μμ±λ λ νΈμΆλ¨
public MemoService(JdbcTemplate jdbcTemplate) {
// λ©€λ² λ³μ μμ±
this.memoRepository = new MemoRepository(jdbcTemplate);
}
public MemoResponseDto createMemo(MemoRequestDto requestDto) {
// RequestDto -> Entity
Memo memo = new Memo(requestDto);
// DB μ μ₯
Memo saveMemo = memoRepository.save(requestDto);
// Entity -> ResponseDto
MemoResponseDto memoResponseDto = new MemoResponseDto(saveMemo);
return memoResponseDto;
}
...
}
-> MemoServcieκ° μμ±μλ₯Ό ν΅ν΄ μμ±λ λ νλΌλ―Έν°λ‘ jdbc λ°μμ€κ³
μλ this. ~ μ½λλ₯Ό ν΅ν΄ Repository κ°μ²΄λ₯Ό λ± νλ λ§λ€μ΄μ€λ€.
μ΄λ κ² ν΄μ£Όλ©΄ λ©μλ νΈμΆν λλ§λ€ jdbc μμ±νμ§ μμλ λλ€!
# κ°ν κ²°ν© -> μ½ν κ²°ν©μΌλ‘ λ§λ€μ΄μ£ΌκΈ°
<T.S.2-1> μ½λμμ μ μ΄μ νλ¦μ Controller -> Repository λ°©ν₯μΌλ‘ νλ₯΄κ³ μλ€. (컨νΈλ‘€λ¬μμ μλΉμ€ μ§μ μμ±, μλΉμ€μμ λ ν¬
μ§ν 리 μ§μ μμ±)
μ΄ κ²½μ°μ λ¬Έμ μ
-> 미리 λ§λ€μ΄μ§ κ°μ²΄λ₯Ό λ°μμ μ¬μ©νλ λ°©μμΌλ‘ μμ ν΄λ³΄μ.
κ°μ²΄λ₯Ό new ν΄μ λ§λλ κ²μ΄ μλ κΈ°μ‘΄μ λ§λ€μ΄μ§ κ²μ λ°μμ μ¬μ©νκ²λ
Class Service1 {
private final Repository1 repitory1;
// repository1 κ°μ²΄ μ¬μ©
public Service1(Repository1 repository1) {
//this.repository1 = new Repository1(); μλμ κ°μ΄ λ³κ²½!!
this.repository1 = repository1;
}
}
// κ°μ²΄ μμ±
Service1 service1 = new Service1(repository1);
+ Controller λ λ§μ°¬κ°μ§! μ΄λ κ² λ³κ²½μ΄ λλ©΄
repository κ°μ²΄λ₯Ό μμ±ν λ DB μ μ id, pwλ₯Ό μμ±μ λΆλΆμ μΆκ°ν΄μ£Όλ©΄ λλ€!
public class Repository1 {
public Repository1(String id, String pw) { //μ΄λ κ²!
// DB μ°κ²°
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/memo", id, pw);
}
}
// κ°μ²΄ μμ±
String id = "root";
String pw = "1234";
Repository1 repository1 = new Repository1(id, pw);
μ΄λ κ² κ°νκ²°ν©μ μ½νκ²°ν©μΌλ‘!
μ΄μ Repositoryμ μμ±μ λ³κ²½μ λ€μ£½λ°μ£½ μμ μ λΆλ₯΄μ§ μλλ€!
-> μ μ΄μ νλ¦μ΄ λ°κΎΌ κ²μ λ³Ό μ μλ€! μμ‘΄μ± μ£Όμ μ ν΅ν΄ μ μ΄μ νλ¦μ μμ νλ€!
'Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
TIL Spring #2-4 (0) | 2023.12.12 |
---|---|
TIL Spring #2-3 (0) | 2023.12.12 |
TIL Spring 2-1 (1) | 2023.12.07 |
TIL Spring 1-3 (0) | 2023.12.06 |
TIL Spring 1-2 (0) | 2023.12.05 |