#1 μμ‘΄μ± κ·Έλν

μμ΄λ‘λ Dependency graphλ€. κ° λ Έλλ ν΄λμ€, νμ΄νλ ν΄λμ€ κ°μ μ’ μμ±μ λνλΈλ€.
κ·Έλν μ½λ λ²
μλ₯Ό λ€μ΄, μμ κ·Έλνμμμ Aλ Bμ μ’ μλλ€. μ’ μμ μ¬μ μ μλ―Έλ 'μμ£Όμ±μ΄ μμ΄ μ£Όκ° λλ κ²μ λΈλ € λΆμ'μ΄λ€. μ’ μμ 'μμμΌ νλ€'λΌλ λ§λ‘λ ννν μ μλ€. λ°λΌμ Aλ Bμ λν΄ μμμΌ νλ€. λ°λ©΄, Bλ Aλ₯Ό λͺ°λΌλ λλ€. Bλ₯Ό μ€κ³ν λ Aμμ λ μ΄λ»κ² ν μ§ μ ν μ κ²½ μ°μ§ μμλ λλ€λ κ²μ΄λ€ (λμ , Bλ Dμ λν΄ μ’ μμ μ΄λ―λ‘ Dλ₯Ό μ°Έμ‘°νλ©° μ€κ³ν΄μΌ νλ€). Aλ₯Ό μ€κ³ν λ Bλ₯Ό μμμΌ νλ€. 'μμμΌ νλ μͺ½'μμ 'λͺ°λΌλ λλ μͺ½'μΌλ‘ νμ΄νλ₯Ό μ΄μ κ²μ΄λ€.
μ½κ² μ½λ λ²

νμ΄νμ "depends on"μ΄λΌκ³ μ°μ¬ μλ€κ³ μμνκ³ κ·Έλλ‘ μ½μΌλ©΄ λλ€. "A depends on B" = "Aλ Bμ μμ‘΄νλ€."
#1-1 μμ
μμ‘΄μ± μ£Όμ (Dependency Injection)μ λν΄ λ€λ£¬ κ²μκΈμ μλ μ½λμ κ·Έλνλ₯Ό κ°μ Έμλ€.
μ½λ
class Car {
private val engine = Engine()
private val airbag = Airbag()
private val battery = Battery()
fun startCar() {
engine.startEngine()
airbag.startAirbag()
battery.startBattery()
println("${this::class.simpleName} is ready")
}
}
class Engine {
private val piston = Piston()
fun startEngine() {
piston.startPiston()
println("${this::class.simpleName} is ready")
}
}
class Airbag {
fun startAirbag() {
println("${this::class.simpleName} is ready")
}
}
class Battery {
fun startBattery() {
println("${this::class.simpleName} is ready")
}
}
class Piston {
private val crankshaft = Crankshaft()
private val cylinder = Cylinder()
fun startPiston() {
crankshaft.startCrankshaft()
cylinder.startCylinder()
println("${this::class.simpleName} is ready")
}
}
class Crankshaft {
fun startCrankshaft() {
println("${this::class.simpleName} is ready")
}
}
class Cylinder {
fun startCylinder() {
println("${this::class.simpleName} is ready")
}
}
μμ‘΄μ± κ·Έλν

#1-2 'μμ‘΄μ± μμ λ²μΉ'κ³Όμ μ°κ΄
SOLID μμΉ
#1 νλ‘κ·Έλ¨μ μ΄λͺ κ³Ό μ€κ³μΈκ°μ μ΄λͺ μ λͺ ννλ€. νΉμ΄μ μ΄ μ€μ§ μλλ€λ κ°μ νμ, μΈκ°μ μΈμ κ° λ°λμ μ£½λλ€. νλ‘κ·Έλ¨μ μ΄λͺ λ λͺ ννλ€. ν λ² κ°λ°λ νλ‘κ·Έλ¨μ, λ―Έλμ λ°λμ λ³
kenel.tistory.com
μμ‘΄μ± κ·Έλνμ μλ νμ΄νμ λ°©ν₯μ΄, 'μμ 'μ΄λΌλ λ¨μ΄μμ μ€λ λ¬μμ€λ₯Ό μ νννλ€κ³ μκ°νλ€ (μ κ²μκΈ μ DIPμ 'What (μ νν μ€λͺ )' μ°Έμ‘°).
#2 λ°μ΄ν° νλ¦λ

μμ΄λ‘λ Data-flow diagramμ΄λ€. λκ° λͺ¨μμ΄ λν΄ν κ² κ°μ§λ§ μ ν μ κ²½μ°μ§ μμλ λλ€.
κ·Έλν μ½λ λ²
νμ΄νκ° λ°μ΄ν°κ° μ΄λνλ κ²½λ‘λΌλ κ²λ§ μλ©΄ λλ€. κ·Έ μΈμλ λ±ν μ νμκ° μλ€. λ μμΈν μ 보λ μν€λ°±κ³Όμμ μ½μ.
#2-1 μμ

κ΅¬κΈ κ³΅μμ (λ°μ΄ν° νλ¦ μΈμλ μ¬λ¬ μ λ³΄κ° μ§¬λ½ λ) 'λ°μ΄ν° νλ¦λ'(?)λ€. μ μ μ΄ λ°μ΄ν°μ νλ¦(λ°μ΄ν° 보λ΄λ μͺ½μμ λ°λ μͺ½μΌλ‘ μ΄μ)μ΄κ³ μ€μ μ μ΄λ²€νΈμ νλ¦(μ΄λ²€νΈ μμ²νλ μͺ½μμ μμ²μ μννλ μͺ½μΌλ‘ μ΄μ)μ΄λ€. κ·Έλ λ€. μ΄ λ°μ΄ν° νλ¦λμ μ‘΄μ¬λ, μμμ κ·Έλν μ½λ λ²μ λ±ν μ νμκ° μλ€κ³ λ§ν μ΄μ λ€. μ°λ¦¬κ° λ°μ΄ν° μ¬μ΄μΈν°μ€νΈλ μλκΈ° λλ¬Έμ νμμ μ½λ§€μΌ νμκ° μ ν μλ€. λ§μ½ ꡬκΈμ λ§μμ΄ κ°μκΈ° λ°λμ΄, νλ¦λ μ λ°μ΄ν°μ νλ¦μ λ μ€ μ μ μΌλ‘ νκΈ°νκ³ μ΄λ²€νΈλ μ§κ·Έμ¬κ·Έ μ μΌλ‘ νκΈ°νλ μ λ°μ΄νΈλ₯Ό ν΄λ μ무λλ μ’λ€λ κ²μ΄λ€.
κ·Έλμ μ¬μ€ λͺ μμ μΌλ‘ "μ΄λ° κ² λ°λ‘ λ°μ΄ν° νλ¦λμ λλ€!"λΌκ³ μ€λͺ ν κ°μΉλ μλ€κ³ μκ°νλ€. λ€λ§, ꡬνμ¬ κ·Έλ κ² ν μ΄μ λ μλμ μλ μ£Όμν μ λλ¬Έμ΄λ€.
#2-2 μ£Όμν μ
μμ‘΄μ± κ·Έλνλ₯Ό λ³΄κ³ λ°μ΄ν° νλ¦μ μΆμΈ‘νκ±°λ, μμΌλ‘ λ°μ΄ν° νλ¦λλ₯Ό λ³΄κ³ μμ‘΄μ± κ΄κ³λ₯Ό μΆμΈ‘ν΄μ μ λλ€. λ κ·Έλνμμ λ€λ£¨λ λ Έλμ μ’ λ₯λ λ°°μΉλ μλ‘ λΉμ·νμ§λ§, μμ°ν λ€λ₯Έ μ±κ²©μ κ·Έλνλ€. κ°λ Ή #2-1μ μλ λ°μ΄ν° νλ¦λλ₯Ό λ€μ 보μ. DataSource → RepositoryλΌλ λ°μ΄ν° νλ¦μ λ³΄κ³ , Repository → DataSourceλΌλ μμ‘΄μ± κ΄κ³λ₯Ό μΆμΈ‘νλ κ² μ³μ μΌμΌκΉ? μλλ€. μλμ κ°μ΄,

μ΄λ° μμ‘΄μ± κ΅¬μ‘°μΌμ§λ μ무λ λͺ¨λ₯Έλ€.
'κΉ¨μ κ°λ π > κΈ°ν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Gradle] Type-safe Project Accessors λμ λ°°κ²½ λ° μ¬μ©λ² (0) | 2025.12.30 |
|---|---|
| SCSSμ μλν (0) | 2025.12.23 |
| SOLID μμΉ (0) | 2025.12.01 |
| Gradle, λ²μ μΉ΄νλ‘κ·Έ (0) | 2025.11.26 |
| Maven, Artifact, GAV (0) | 2025.11.25 |