- μμ ν΄λμ€μ ν
νλ¦Ώμ μν μ νλ ν
νλ¦Ώ λ©μλκ° μ μλλ€.
- μ΄ λ©μλ λ΄λΆμμ μΆμ λ©μλλ€μ νΈμΆνλ€.
- ν νλ¦Ώ λ©μλ λ΄λΆλ₯Ό 보면, μΆμ λ©μλλ€μ΄ μ΄λ€ μμλ‘ νΈμΆλλμ§λ μ μ μμΌλ, ꡬ체μ μΈ μ²λ¦¬κ° μ΄λ»κ² μ΄λ£¨μ΄μ§λμ§λ λͺ¨λ₯Έλ€.
- νμ ν΄λμ€λ μΆμ λ©μλλ₯Ό ꡬννλ€.
- νμ ν΄λμ€μμ μ΄λ€ ꡬνμ νλλΌλ, μ²λ¦¬μ νλ¦μ μμ ν΄λμ€κ° μ μνλλ‘ μ΄λ£¨μ΄μ§λ€.
abstract class HumanLifecycle {
// λ‘μ§μ 곡ν΅ν (template method)
fun humanLife() {
println("---μΆμ---")
μΆμ()
println("---μ λ
μμ ---")
μ λ
μμ ()
println("---μλ
μμ ---")
μλ
μμ ()
println("---μ²λ
μμ ---")
μ²λ
μμ ()
println("---μ₯λ
μμ ---")
μ₯λ
μμ ()
println("---μ¬λ§---")
μ¬λ§()
}
protected open fun μΆμ() {
println("μΆμ λ―Έμ")
}
protected abstract fun μ λ
μμ ()
protected abstract fun μλ
μμ ()
protected abstract fun μ²λ
μμ ()
protected abstract fun μ₯λ
μμ ()
protected open fun μ¬λ§() {
println("μ¬λ§ λ―Έμ")
}
}class SilverSpoonLifecycle: HumanLifecycle() {
override fun μΆμ() {
println("κ°λ¨ νμν°λ¦¬μ€μμ μΆμ")
}
override fun μ λ
μμ () {
println("λͺ
λ¬Έ μ¬λ¦½ μμ΄μ΄λ±νκ΅μ μ¬ν")
}
override fun μλ
μμ () {
println("λ―Έκ΅ μνλμμ€μ½λ‘ μ ν")
}
override fun μ²λ
μμ () {
println("UC λ²ν΄λ¦¬ μ¬ν")
}
override fun μ₯λ
μμ () {
println("λ―Έκ΅ S&P 100λ κΈ°μ
μμ΅λ μ°λ΄ μ¬μ§")
}
override fun μ¬λ§() {
println("μ μ© μνΈ λνλ‘ μ¬λ§")
}
}
class PlasticSpoonLifecycle : HumanLifecycle(){
override fun μΆμ() {
super.μΆμ()
println("μ΄λ¨Έλ κ°μΆ")
}
override fun μ λ
μμ () {
println("μλ²μ§ μ¬λ§")
println("ν λ¨Έλ μμμ μλ")
}
override fun μλ
μμ () {
println("μλ μννΈμ μ΄ μ’κ² λ€μ΄κ°μΌλ νμ°λ€μκ² ν΄λ¨Όμμ κ±°μ§λ‘ λλ¦Ό λ°μ")
}
override fun μ²λ
μμ () {
println("μΌμ©μ§μΌλ‘ μκ³ μ μ§")
}
override fun μ₯λ
μμ () {
println("λ°°λ¬μ
μΌλ‘ μκ³ μ μ§")
}
}fun main() {
val silverSpoonLifecycle = SilverSpoonLifecycle().humanLife()
println("")
val plasticSpoonLifecycle = PlasticSpoonLifecycle().humanLife()
}---μΆμ---
κ°λ¨ νμν°λ¦¬μ€μμ μΆμ
---μ λ
μμ ---
λͺ
λ¬Έ μ¬λ¦½ μμ΄μ΄λ±νκ΅μ μ¬ν
---μλ
μμ ---
λ―Έκ΅ μνλμμ€μ½λ‘ μ ν
---μ²λ
μμ ---
UC λ²ν΄λ¦¬ μ¬ν
---μ₯λ
μμ ---
λ―Έκ΅ S&P 100λ κΈ°μ
μμ΅λ μ°λ΄ μ¬μ§
---μ¬λ§---
μ μ© μνΈ λνλ‘ μ¬λ§
---μΆμ---
μΆμ λ―Έμ
μ΄λ¨Έλ κ°μΆ
---μ λ
μμ ---
μλ²μ§ μ¬λ§
ν λ¨Έλ μμμ μλ
---μλ
μμ ---
μλ μννΈμ μ΄ μ’κ² λ€μ΄κ°μΌλ νμ°λ€μκ² ν΄λ¨Όμμ κ±°μ§λ‘ λλ¦Ό λ°μ
---μ²λ
μμ ---
μΌμ©μ§μΌλ‘ μκ³ μ μ§
---μ₯λ
μμ ---
λ°°λ¬μ
μΌλ‘ μκ³ μ μ§
---μ¬λ§---
μ¬λ§ λ―Έμ
λͺ μλ ν΄λμ€μ non-abstract λ©μλ
java.io.InputStreamjava.io.OutputStreamjava.io.Readerjava.io.Writerjava.util.AbstractListjava.util.AbstractSetjava.util.AbstractMapjavax.suvlet.http.HttpServletμdoXXX()λ©μλ