Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Latest commit

Β 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 

README.md

ν…œν”Œλ¦Ώ λ©”μ†Œλ“œ νŒ¨ν„΄

μ •μ˜

  • μƒμœ„ ν΄λž˜μŠ€μ— ν…œν”Œλ¦Ώμ˜ 역할을 ν•˜λŠ” ν…œν”Œλ¦Ώ λ©”μ†Œλ“œκ°€ μ •μ˜λœλ‹€.
    • 이 λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ 좔상 λ©”μ†Œλ“œλ“€μ„ ν˜ΈμΆœν•œλ‹€.
    • ν…œν”Œλ¦Ώ λ©”μ†Œλ“œ λ‚΄λΆ€λ₯Ό 보면, 좔상 λ©”μ†Œλ“œλ“€μ΄ μ–΄λ–€ μˆœμ„œλ‘œ ν˜ΈμΆœλ˜λŠ”μ§€λŠ” μ•Œ 수 μžˆμœΌλ‚˜, ꡬ체적인 μ²˜λ¦¬κ°€ μ–΄λ–»κ²Œ μ΄λ£¨μ–΄μ§€λŠ”μ§€λŠ” λͺ¨λ₯Έλ‹€.
  • ν•˜μœ„ ν΄λž˜μŠ€λŠ” 좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•œλ‹€.
    • ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ–΄λ–€ κ΅¬ν˜„μ„ ν•˜λ”λΌλ„, 처리의 흐름은 μƒμœ„ ν΄λž˜μŠ€κ°€ μ •μ˜ν•œλŒ€λ‘œ 이루어진닀.

μ˜ˆμ‹œ

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.InputStream
  • java.io.OutputStream
  • java.io.Reader
  • java.io.Writer
  • java.util.AbstractList
  • java.util.AbstractSet
  • java.util.AbstractMap
  • javax.suvlet.http.HttpServlet의 doXXX() λ©”μ†Œλ“œ