[TIL] 2023.12.06

Gahyeon LeeΒ·2023λ…„ 12μ›” 6일
0

TIL

λͺ©λ‘ 보기
18/47
post-thumbnail

🍰 μ˜€λ²„λΌμ΄λ”©(Overriding)

1. μ˜€λ²„λΌμ΄λ”©μ΄λž€?

상속받은 λΆ€λͺ¨ 클래슀의 정보(ν”„λ‘œνΌν‹°)λ‚˜ ν–‰μœ„(λ©”μ†Œλ“œ)λ₯Ό μž¬μ„€κ³„λŠ” 것을 μ˜€λ²„λΌμ΄λ”©μ΄λΌκ³  ν•œλ‹€. 주둜 λΆ€λͺ¨ 클래슀의 ν–‰μœ„(λ©”μ†Œλ“œ)λ₯Ό μž¬μ„€κ³„ν•œλ‹€.

2. μ˜€λ°”λΌμ΄λ”©μ„ μ‚¬μš©ν•˜λŠ” 이유

  • 곡톡적인 λ‚΄μš©μ„ λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ κ΄€λ¦¬ν•˜λŠ”κ±΄ μ’‹μ§€λ§Œ, μžμ‹ 클래슀의 κ°œμ„±μ„ 살리고 싢을 λ•Œ μ˜€λ²„λΌμ΄λ”©μ„ μ‚¬μš©ν•œλ‹€.
  • OOPκ΄€μ μ—μ„œλŠ” ν΄λž˜μŠ€λ“€κ°„μ˜ 관계λ₯Ό λ§Œλ“€κ³ , 일관성을 μœ μ§€ν•˜λŠ” λͺ©ν‘œλ₯Ό κ°€μ§„λ‹€.
  • λ§Œμ•½ ν•„μš”ν•œ κΈ°λŠ₯이 μžˆμ„λ•Œλ§ˆλ‹€ λ³„λ„μ˜ μ΄λ¦„μœΌλ‘œ λ§Œλ“€κ²Œλœλ‹€λ©΄ 일관성을 ν•΄μΉœλ‹€.
  • ν”„λ‘œκ·Έλž¨μ— λ¬Έμ œκ°€ μƒκΈ°μ§€λŠ” μ•Šμ§€λ§Œ, μž¬μ‚¬μš©μ„±μ΄ λ–¨μ–΄μ Έ μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ ΅κ²Œ λœλ‹€.

3. μœ μš©ν•œ 단좕킀

상속받은 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•˜κ³  μ‹Άμ„λ•Œ μžμ‹ 클래슀 λ‚΄λΆ€μ—μ„œ 단좕킀 μž…λ ₯

[μ˜€λ²„λΌμ΄λ”© 단좕킀]
Control + O 

4. μ˜ˆμ‹œ μ½”λ“œ

  • λ‹­, μ°Έμƒˆ, λΉ„λ‘˜κΈ°λŠ” μƒˆλΌλŠ” λΆ€λͺ¨μ—μ„œ μΆœλ°œν–ˆλ‹€λŠ” 관계λ₯Ό λ§Œλ“€μž.
  • 각 κ°œμ²΄λ§ˆλ‹€ κ°œμ„±μ„ λ”ν•΄μ„œ λ‚ κ²Œν•˜κ³  μ‹Άμ§€λ§Œ, flyλ©”μ†Œλ“œλŠ” λͺ¨λ‘ λ™μΌν•œ μ½”λ“œλ₯Ό κ°€μ§„λ‹€.
fun main() {
    var bird = Bird("μƒˆ")
    var chicken = Chicken("λ‹­", 2)
    var sparrow = Sparrow("μ°Έμƒˆ", "κ°ˆμƒ‰")
    var pigeon = Pigeon("λΉ„λ‘˜κΈ°", "μ„œμšΈ")

    bird.fly()
    chicken.fly()
    sparrow.fly()
    pigeon.fly()
}

open class Bird(name:String) {
    var name: String = ""

    init {
        this.name = name
    }

    open fun fly() {	// fun() μ•žμ— open이 뢙은건 이 λ©”μ†Œλ“œλ₯Ό ν™•μž₯ν•΄μ„œ μžμ‹ν΄λž˜μŠ€κ°€ μ“Έ 수 있게(μ˜€λ²„λΌμ΄λ”©, μž¬μ„€κ³„ ν•  수 있게) ν•΄ μ£Όκ² λ‹€λŠ” 것!
        println("${name}λŠ” λ‚ μ•„μš”~")
    }

}

class Chicken(name: String, age: Int) : Bird(name) {
    var age:Int = 0

    init {
        this.age = age
    }

    override fun fly() {
//        super.fly()		// superκ°μ²΄λŠ” λΆ€λͺ¨μ˜ 객체λ₯Ό μ˜λ―Έν•˜λ©° μ˜€λ²„λΌμ΄λ”©μ„ ν•˜λ©΄ μžλ™μœΌλ‘œ 생성됨. 즉 λΆ€λͺ¨κ°μ²΄μ˜ flyλ©”μ†Œλ“œλ₯Ό λΆ€λ₯΄λŠ” ν–‰μœ„. μ§€κΈˆμ€ ν•„μš”μ—†μœΌλ‹ˆ μ£Όμ„μ²˜λ¦¬!
        println("${age}μ‚΄μ˜ ${name}이 λ‚ μ•„λ΄…λ‹ˆλ‹€~ 꼬끼였!")    // λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ 같은 μ΄λ¦„μœΌλ‘œ fly λ©”μ†Œλ“œλ₯Ό 써도 μž¬μ„€κ³„ ν•΄μ„œ λ‹€λ₯΄κ²Œ μ“Έ 수 있음
    }
}

class Sparrow(name: String, color: String) : Bird(name) {
    var color:String = ""

    init {
        this.color = color
    }

    override fun fly() {
//        super.fly()
        println("${color}의 ${name}κ°€ λ‚ μ•„λ΄…λ‹ˆλ‹€~ μ§Ήμ§Ή!")
    }
}

class Pigeon(name: String, address: String) : Bird(name) {
    var address: String = ""

    init {
        this.address = address
    }

    override fun fly() {
//        super.fly()
        println("${address} μ‚΄κ³ μžˆλŠ” ${name}κ°€ λ‚ μ•„λ΄…λ‹ˆλ‹€~ ꡬꡬ!")
    }
}

/*
--> κ²°κ³Ό
μƒˆλŠ” λ‚ μ•„μš”~
2μ‚΄μ˜ 닭이 λ‚ μ•„λ΄…λ‹ˆλ‹€~ 꼬끼였!
κ°ˆμƒ‰μ˜ μ°Έμƒˆκ°€ λ‚ μ•„λ΄…λ‹ˆλ‹€~ μ§Ήμ§Ή!
μ„œμšΈ μ‚΄κ³ μžˆλŠ” λΉ„λ‘˜κΈ°κ°€ λ‚ μ•„λ΄…λ‹ˆλ‹€~ ꡬꡬ!
*/

🍰 μ˜€λ²„λ‘œλ”©(Overloading)

μ˜€λ²„λΌμ΄λ”©κ³Ό μ „ν˜€ λ‹€λ₯Έ κ°œλ…!
λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό μ—¬λŸ¬ ν˜•νƒœλ‘œ λ§Œλ“€ 수 μžˆλ‹€.

1. μ˜€λ²„λ‘œλ”©μ΄λž€?

  • λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό μ—¬λŸ¬ ν˜•νƒœλ‘œ λ§Œλ“œλŠ” 것
  • λ§€κ°œλ³€μˆ˜μ˜ κ°―μˆ˜μ™€ λ§€κ°œλ³€μˆ˜μ˜ μžλ£Œν˜•μ„ λ‹€λ₯΄κ²Œν•˜λ©΄ λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μ—¬λŸ¬ 개의 λ©”μ†Œλ“œλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
  • λ°˜ν™˜μžλ£Œν˜•(λ°˜ν™˜ν˜•)은 μ˜€λ²„λ‘œλ”©μ— μ „ν˜€ 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€.

2. μ˜€λ²„λ‘œλ”©μ΄ ν•„μš”ν•œ 이유?

두 개의 μ •μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ λ”ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό addλΌλŠ” μ΄λ¦„μœΌλ‘œ λ§Œλ“€μ—ˆλ‹€κ³  ν•΄λ³΄μž. ν•˜μ§€λ§Œ 두 개의 μ‹€μˆ˜(μ†Œμˆ˜)λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ λ”ν•˜λŠ” λ©”μ†Œλ“œλ„ λ§Œλ“€μ–΄μ•Όν•œλ‹€. λ”ν•˜λŠ”κ±°λ‹ˆκΉŒ addλΌλŠ” 이름이 μ ν•©ν•œλ°.. addInt, addDouble μ΄λ ‡κ²Œ λ©”μ†Œλ“œλ₯Ό λ”°λ‘œ λ§Œλ“œλŠ”κ±΄ λ‚˜μ€‘μ— κ΄€λ¦¬ν•˜κΈ° νž˜λ“€μ–΄μ§„λ‹€.
이 μƒν™©μ—μ„œλŠ” λ”ν•΄μ•Όν•˜λŠ” μžλ£Œν˜•μ΄ μ •μˆ˜, μ‹€μˆ˜λ‘œ λ‹€λ₯΄λ‹ˆκΉŒ μ˜€λ²„λ‘œλ”©μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.

3. μ˜ˆμ‹œ μ½”λ“œ

μ •μˆ˜λ‚˜ μ‹€μˆ˜κ°’ λ‘κ°œλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„μ„œ λ§μ…ˆκ²°κ³Όλ₯Ό λ¦¬ν„΄ν•΄μ£ΌλŠ” addλ©”μ†Œλ“œλ₯Ό λ§Œλ“€μ–΄λ³΄μž.

fun main() {
    var calc = Calculator()
    
    var intResult = calc.add(1,2)    // λ§€κ°œλ³€μˆ˜λ‘œ μ •μˆ˜ 1κ³Ό 2λ₯Ό μ€¬μœΌλ‹ˆ μ»΄νŒŒμΌν•  λ•Œ 밑에 2개의 add  λ©”μ†Œλ“œ 쀑 Intλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” 첫 번째 λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰
    var doubleResult = calc.add(1.2, 2.2)
    
    println("μ •μˆ˜ λ§μ…ˆκ²°κ³Ό: ${intResult}")
    println("μ‹€μˆ˜ λ§μ…ˆκ²°κ³Ό: ${doubleResult}")
    
}

class Calculator {
    
    fun add(num1: Int, num2: Int): Int {
        return num1+num2
    }
    
    fun add(num1: Double, num2: Double): Double {
        return num1+num2
    }
}
profile
코린이 κ°•μ•„μ§€ μ§‘μ‚¬πŸΆ

0개의 λŒ“κΈ€