- Today
- Total
- λ°±μ€
- leetcode
- java
- μλ°
- tree
- PS
- λ€μ΅μ€νΈλΌ
- Algorithm
- array
- λ°±μλ
- 그리λ
- νλ‘κ·Έλλ¨Έμ€
- CS
- dp
- μλ°μμ μ
- MST
- Graph
- μ‘Έμ μν
- 벨λ§ν¬λ
- spring
- λ¬Έλ²
- ꡬν
- μΈν΄
- λ°μ΄ν°λ² μ΄μ€
- μμμ λ ¬
- database
- BFS
- OOP
- pytorch
- μλ£κ΅¬μ‘°
Partially Committed
[Spring] Spring κ³Ό OOP λ³Έλ¬Έ
Spring κ³Ό OOP
A. μ€νλ§ νλ μμν¬μ μ€νλ§ λΆνΈλ?
μ€νλ§ νλ μμν¬λ μλμ κ°μ΄ μ 리ν μ μλ€.
- ν΅μ¬ κΈ°μ : μ€νλ§ DI 컨ν μ΄λ, AOP, μ΄λ²€νΈ, κΈ°ν
- μΉ κΈ°μ : μ€νλ§ MVC, μ€νλ§ WebFlux
- λ°μ΄ν° μ κ·Ό κΈ°μ : νΈλμμ , JDBC, ORM μ§μ, XML μ§μ
- κΈ°μ ν΅ν© : μΊμ, μ΄λ©μΌ, μ격μ κ·Ό, μ€μΌμ€λ§
- ν μ€νΈ : μ€νλ§ κΈ°λ° ν μ€νΈ μ§μ
- μΈμ΄ : μ½νλ¦°, 그루λΉ
- μ΅κ·Όμλ μ€νλ§ λΆνΈλ₯Ό ν΅ν΄μ μ€νλ§ νλ μμν¬λ₯Ό νΈλ¦¬νκ² μ¬μ©ν μ μλ€. (볡μ‘ν μ΄κΈ° μ€μ X )
μ€νλ§ λΆνΈλ μλμ κ°μ΄ μ 리ν μ μλ€.
- μ€νλ§μ νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ μ§μν΄μ€λ€.
- Tomcat κ³Ό κ°μ web server κ° λ΄μ₯λμ΄ μμ΄μ λ³λλ‘ μ€μΉνμ§ μμλ λλ€.
- starter μ’ μμ±μ μ 곡νμ¬ λΉλ ꡬμ±μ μ½κ² ν μ μλ€.
- μ€νλ§κ³Ό μλνν° λΌμ΄λΈλ¬λ¦¬λ₯Ό μλμΌλ‘ ꡬμ±ν΄μ€λ€.
- λ©νΈλ¦, μν νμΈ, μΈλΆ ꡬμ±κ³Ό κ°μ νλ‘λμ μ€λΉ κΈ°λ₯μ μ 곡ν΄μ€λ€.
- κ΄λ‘μ μν κ°κ²°ν μ€μ μ΄ κ°λ₯νλ€.
" Spring μ java κΈ°λ°μ νλ μμν¬λ‘μ’μ κ°μ²΄ μ§ν₯ μ΄ν리μΌμ΄μ μ κ°λ°ν μ μλλ‘ λμμ£Όλ νλ μμν¬μ΄λ€."
B. κ°μ²΄ μ§ν₯μ κ°λ κ³Ό μ’μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ΄λ?
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄μ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄λμ μ¬λ¬ κ°μ λ 립 λ¨μ(κ°μ²΄)λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ΄μ μΌλ‘, κ°κ°μ κ°μ²΄λ λ©μΈμ§λ₯Ό μ£Όκ³ λ°κ³ μ΄λ₯Ό μ²λ¦¬ν μ μλ€.(νλ ₯) μ΄λ¬ν κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ½κ² λ§λ€κΈ° λλ¬Έμ λκ·λͺ¨ μννΈμ¨μ΄ κ°λ°μ λ§μ΄ μ¬μ©λλ€. μ£Όμν νΉμ§μ μΆμν, μΊ‘μν, μμ, λ€νμ±μ΄λ©° κ°μ₯ ν΅μ¬μ μΈ κ°λ μ λ€νμ±(Polymorphism) μ΄λ€.
μν κ³Ό ꡬνμΌλ‘ μΈμμ ꡬλΆνμμ λ, μλμ°¨λΌλ μν μ΄ μμΌλ©΄ μ΄κ²μ λν ꡬν체λ K3, μλ°λΌ, ν μ¬λΌ λͺ¨λΈ3 κ° μμ κ²μ΄κ³ λ‘λ―Έμ€μ μ€λ¦¬μ£μ΄λΌλ μν μ΄ μλ€λ©΄ μ΄κ²μ λν ꡬν체λ μ₯λ건, μλΉ, κΉνν¬, μ‘νκ΅κ° μμ κ²μ΄λ€. μ΄μ κ°μ΄ λͺ¨λ κ°λ μ μν κ³Ό ꡬνμΌλ‘ ꡬλΆνμ¬ λ³΄λ€ λ¨μνκ² μ€κ³κ° κ°λ₯νκ³ , λ³κ²½μ΄ νΈλ¦¬ν΄μ§λ€.
- ν΄λΌμ΄μΈνΈλ λμμ μν (Interface)λ§ μλ©΄ λλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ ꡬ쑰λ₯Ό λͺ°λΌλ λλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λμ΄λ μν₯μ λ°μ§ μλλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμ μ체λ₯Ό λ³κ²½ν΄λ μν₯μ λ°μ§ μλλ€.
μλ° μΈμ΄μμ μν μ Interface μ΄κ³ ꡬνμ Interface λ₯Ό ꡬνν Class, object κ° λλ€. κ°μ²΄λ₯Ό μ€κ³ν λ μν κ³Ό ꡬνμ λͺ νν λΆλ¦¬νλ κ²μ΄ μ€μνλ€.
κ°μ²΄λ νΌμ μ‘΄μ¬νμ§ μλλ€. κ°μ²΄λ νλ ₯νλ κ΄κ³κ° μ‘΄μ¬νλ€. ν΄λΌμ΄μΈνΈ(μμ²), μλ²(μλ΅) μλ§μ κ°μ²΄ ν΄λΌμ΄μΈνΈμ κ°μ²΄ μλ²λ μλ‘ νλ ₯νλ κ΄κ³λ₯Ό κ°μ§λ€. μλ° μΈμ΄μμμ λ€νμ±μ μ€λ²λΌμ΄λ©(Overriding ; λΆλͺ¨ ν΄λμ€λ‘λΆν° μμλ°μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μνμ¬ μ¬μ©νλ κ²)μΌλ‘ ꡬννλ€. μ€λ²λ‘λ©(Overloading)μ 1 κ°μ ν΄λμ€μμ λμΌν μ΄λ¦μ λ©μλ λλ μμ±μλ₯Ό μ¬λ¬ κ° μ μνλ κ²μ΄λ€.
μ€λ²λΌμ΄λ©μ μ΄μ©νλ©΄ λ€νμ±μΌλ‘ μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄λ₯Ό μ€ν μμ μμ μ μ°νκ² λ³κ²½ν μ μλ€. ν΄λμ€ μμ κ΄κ³λ λ€νμ±, μ€λ² λΌμ΄λ©μ μ μ©ν μ μλ€. μ μ°νκ² νμμ λ°λΌ κ°μ²΄λ₯Ό λ³κ²½ν μ μλ€λ κ²μ΄ μ€μνλ€.
λ€νμ±μ λ³Έμ§μ μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ€ν μμ μ μ μ°νκ² λ³κ²½ν μ μλ€λ κ²μ΄κ³ λ€νμ±μ λ³Έμ§μ μ΄ν΄νκΈ° μν΄μλ κ°μ²΄ κ° νλ ₯ κ΄κ³λ₯Ό λ μ¬λ €μΌ νλ©°, ν΄λΌμ΄μΈνΈλ₯Ό λ³κ²½νμ§ μκ³ μλ²μ ꡬν κΈ°λ₯μ μ μ°νκ² λ³κ²½ κ°λ₯νλ€λ κ²μ΄λ€.
μ€νλ§μ λ€νμ±μ κ·Ήλνν΄μ μ΄μ©ν μ μλλ‘ λμμ€λ€. IoC, DI λ±μ λ€νμ±μ νμ©ν΄μ μν κ³Ό ꡬνμ νΈλ¦¬νκ² λ€λ£° μ μλλ‘ μ§μν κ²μ΄λ€. μ€νλ§μ μ΄μ©νμ¬ κ΅¬νμ νΈλ¦¬νκ² λ³κ²½ κ°λ₯νλ€.
C. κ°μ²΄ μ§ν₯ μ€κ³μ μμΉ SOLID
ν΄λ¦°μ½λλ‘ μ λͺ ν λ‘λ²νΈ λ§ν΄μ΄ μλμ μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉμ μ 리νμλ€.
(1) SRP : λ¨μΌ μ± μ μμΉ(Single responsibility principle)
- νλμ ν΄λμ€λ νλμ μ± μλ§μ κ°μ ΈμΌ νλ€.
- νλμ μ± μμ΄λΌλ κ°λ μ΄ λ€μ λͺ¨μνλ°, λ¬Έλ§₯κ³Ό μν©μ λ°λΌμ λ¬λΌμ§κΈ° λλ¬Έμ΄λ€.
- μ€μν κΈ°μ€μ λ³κ²½μ΄λ€. λ³κ²½ μ¬νμ΄ λ°μνμμ λ, νκΈ ν¨κ³Όκ° μ μΌλ©΄ λ¨μΌ μ± μ μμΉμ μ λ°λ₯Έ κ²μ΄λ€.
(2) OCP : κ°λ°©-νμ μμΉ(Open/Closed principle)
- μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ € μμ§λ§ λ³κ²½μλ λ«νμμ΄μΌ νλ€.
- λ€νμ±μ νμ©ν κ°λ μ΄λ€.
- μΈν°νμ΄μ€λ₯Ό ꡬνν μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€μ΄μ μλ‘μ΄ κΈ°λ₯μ ꡬννλ€κ³ κ°μ νμ.
public class MemberService {
// private MemberRepository memberRepository = new MemoryMemberRepository();
private MemberRepository memberRepository = new JdbcMemberRepository();
}
μ€μ λ‘ μμ κ°μ΄ ꡬννλ©΄ μλμ λ¬Έμ κ° λ°μνλ€.
1. memberService ν΄λΌμ΄μΈνΈκ° ꡬν ν΄λμ€λ₯Ό μ§μ μ νν΄μΌ νλ€.
2. ꡬν κ°μ²΄λ₯Ό λ³κ²½νλ €λ©΄ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό λ³κ²½ν΄μΌ νλ€.
3. λ€νμ±μ μ΄μ©νμ§λ§ OCP μμΉμ μ§ν¬ μ μλ€.
"μμν μλ° μΈμ΄λ‘λ μ΄λ₯Ό ν΄κ²°ν μ μκ³ , κ°μ²΄λ₯Ό μμ±νκ³ μ°κ΄κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ λ³λμ 쑰립, μ€μ μκ° νμνλ° μ΄λ¬ν μν μ μ€νλ§μ΄ ν΄μ£Όλ κ²μ΄λ€."
(3) LSP : 리μ€μ½ν μΉν μμΉ(Liskov subsitution principle)
- νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€.
- λ€νμ±μμ νμ ν΄λμ€λ μΈν°νμ΄μ€ κ·μ½μ λ€ μ§μΌμΌ νλ€.
- λ€νμ±μ μ§μνκΈ° μν μμΉ, μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ₯Ό λ―Ώκ³ μ¬μ©νκΈ° μν μμΉμ΄λ€.
- λ¨μν μ»΄νμΌμ μ±κ³΅ μ¬λΆλ₯Ό λ°μ§λ κ²μ΄ μλλ€. μλ₯Ό λ€μ΄ μλμ°¨μ μΈν°νμ΄μ€μμ μμ κΈ°λ₯μ μμΌλ‘ κ°λ κ²μ 보μ₯νλ€. λ€λ‘ κ°λ©΄ LSP λ₯Ό μλ°ν κ²μ΄λ€. μ무리 λ리λλΌλ μμΌλ‘ κ°κΈ΄ κ°μΌν κ².
(4) ISP : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ(Interface segregation principle)
- νΉμ ν΄λΌμ΄μ΄λλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ μ’λ€.
- μλμ°¨ μΈν°νμ΄μ€λ μ΄μ μΈν°νμ΄μ€, μ λΉ μΈν°νμ΄μ€μ κ°μ΄ λΆλ¦¬νλ κ²μ΄ μ’λ€.
- λΆλ¦¬νμμ λ μ€μνκ²μ μΈν°νμ΄μ€ μμ²΄κ° λ³ν΄λ μ΄μ μ ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μμμΌ νλ€λ κ²μ΄λ€.
- μ΄λ κ² νλ©΄ μΈν°νμ΄μ€κ° λͺ νν΄μ§κ³ , λ체 κ°λ₯μ±μ΄ λμμ§λ€.
(5) DIP : μμ‘΄κ΄κ³ μμ μμΉ(Dependency inversion principle)
- ꡬ체νμ μμ‘΄νμ§ μκ³ μΆμνμ μμ‘΄νλ€.
- ꡬν ν΄λμ€μ μμ‘΄νλ κ²μ΄ μλλΌ μΈν°νμ΄μ€μ μμ‘΄νλ€λ κ²μΌλ‘ μν (Role) μ μμ‘΄ν΄μΌ νλ€λ κ²κ³Ό κ°λ€.
- κ°μ²΄ μΈμλ ν΄λΌμ΄μΈνΈκ° μΈν°νμ΄μ€μ μμ‘΄ν΄μΌ μ μ°νκ² κ΅¬ν체λ₯Ό λ³κ²½ν μ μλ€.
- ꡬν체μ μμ‘΄νκ² λλ©΄ λ³κ²½μ΄ νλ€μ΄μ§λ€.
- OCP μμ μ€λͺ ν MemberService λ Interface μ μμ‘΄νμ§λ§ ꡬν ν΄λμ€μλ λμμ μμ‘΄νλ€. μλλ©΄ MemberService ν΄λΌμ΄μΈνΈκ° MemberRepository m = new MemoryMemberRepository(); μ κ°μ΄ ꡬν ν΄λμ€λ₯Ό μ§μ μ ννκΈ° λλ¬Έμ΄λ€. μ΄λ DIP λ₯Ό μλ°νλ μ¬νμΌλ‘ μμ μλ° μΈμ΄λ§μΌλ‘λ μ΄λ₯Ό ν΄κ²°ν μ μλ€.
D. Spring κ³Ό κ°μ²΄μ§ν₯μ€κ³
- κ°μ²΄ μ§ν₯μ ν΅μ¬μ λ€νμ±μ΄λ€.
- λ€νμ±μ μ§ν€λ©΄ λΆνμ κ°μλΌμ°λ― κ°λ°μ΄ κ°λ₯νλ€.
- νμ§λ§ λ€νμ± λ§μΌλ‘λ ꡬν κ°μ²΄λ₯Ό λ³κ²½ν λ ν΄λΌμ΄μΈνΈ μ½λλ ν¨κ» λ³κ²½λλ λ± OCP, DIP λ₯Ό μ§ν¬ μ μλ€.
- μ΄λ₯Ό ν΄κ²°ν΄μ£Όλ κ²μ΄ μ€νλ§μ΄λ€.
- DI(Dependency Injection ; μμ‘΄κ΄κ³, μμ‘΄μ± μ£Όμ ) κ³Ό DI 컨ν μ΄λλ₯Ό μ 곡νμ¬ λ€νμ± + OCP, DIP κ° κ°λ₯νλλ‘ μ§μνλ€.
- ν΄λΌμ΄μΈνΈ μ½λμ λ³κ²½ μμ΄ κΈ°λ₯μ νμ₯ν μ μκ² λλ€.
(μ 리)
- λͺ¨λ μ€κ³μμ μν κ³Ό ꡬνμ λΆλ¦¬νλ κ²μ΄ μ’μΌλ©° μ΄μμ μΌλ‘ λͺ¨λ μ€κ³μ μΈν°νμ΄μ€λ₯Ό λΆμ¬νλ κ²μ΄ μ’λ€.
- νμ§λ§ μ΄λ μΆμνλΌλ λΉμ©μ λ°μμν¨λ€.
- κ·Έλμ μ€μ μ 무 μμμλ κΈ°λ₯μ νμ₯ν κ°λ₯μ±μ΄ μλ€λ©΄ ꡬ체 ν΄λμ€λ₯Ό μ§μ μ¬μ©νλ κ²μ΄ μ’μΌλ©°, ν₯ν νμ₯μ΄ νμν κ²½μ° λ¦¬ν©ν°λ§μ ν΅ν΄μ μΈν°νμ΄μ€λ₯Ό λμ νλ κ²μ΄ λ°©λ²μ΄λ€.
References
1. μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ (κΉμν)
'π» Study ! > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μΈν 리μ μ΄μμ κ°μκΈ° μ€νλ§ νλ‘μ νΈμ λΉ¨κ°μ€μ΄ λ무νλ€λ©΄?! (0) | 2023.08.05 |
---|---|
JSP MVC ν¨ν΄ (0) | 2023.05.14 |
[Spring] λΉ μλͺ μ£ΌκΈ° μ½λ°±, λΉ μ€μ½ν (0) | 2023.01.18 |
[Spring] μμ‘΄κ΄κ³ μλ μ£Όμ (0) | 2023.01.16 |
[Spring] μ±κΈν€ 컨ν μ΄λ (0) | 2023.01.12 |