μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€ 클래슀λ₯Ό μž¬μ‚¬μš©ν•˜λŠ” 상속

2022. 12. 5. 14:09ㆍ_Study/AndroidStudio

728x90

πŸ”₯ 상속과 μƒμ„±μž πŸ‡¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*• πŸ”₯


 

μ½”ν‹€λ¦°μ—μ„œ μ–΄λ–€ 클래슀λ₯Ό μƒμ†λ°›μœΌλ €λ©΄ 선언뢀에 μ½œλ‘ (:) κ³Ό ν•¨κ»˜ 상속받을 클래슀 이름을 μž…λ ₯ν•œλ‹€.

μ½”ν‹€λ¦°μ˜ ν΄λž˜μŠ€λŠ” 기본적으둜 λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ 상속할 수 μ—†λ‹€.

λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ 상속할 수 있게 μ„ μ–Έν•˜λ €λ©΄ open ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

μƒμœ„ 클래슀λ₯Ό 상속받은 ν•˜μœ„ 클래슀의 μƒμ„±μžμ—μ„œλŠ” μƒμœ„ 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Όν•œλ‹€.

 

 

package com.example.ch3

open class Super{
}

class Sub: Super(){
}

//맀개 λ³€μˆ˜κ°€ μžˆλŠ” μƒμœ„ 클래슀의 μƒμ„±μž 호좜
open class Super2(name: String){
}
class Sub2(name: String): Super2(name){
}

//ν•˜μœ„ ν΄λž˜μŠ€μ— 보쑰 μƒμ„±μžλ§Œ μžˆλŠ” 경우 μƒμœ„ 클래슀의 μƒμ„±μž 호좜
open class Super3(name: String){
}
class Sub3 :Super3{
    constructor(name: String): super(name){
    }
}

fun main(){

}

 

μ˜€λ²„λΌμ΄λ”© - μž¬μ •μ˜

μƒμœ„ ν΄λž˜μŠ€μ— μ •μ˜λœ 멀버 (λ³€μˆ˜, ν•¨μˆ˜)λ₯Ό ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ μžμ‹ μ˜ λ©€λ²„μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€. 이λ₯Ό 톡해 μƒμœ„ ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ₯Ό κ°™μ€ μ΄λ¦„μœΌλ‘œ ν•˜μœ„ν΄λž˜μŠ€μ— λ‹€μ‹œ μ„ μ–Έν•˜λŠ”λ° 이λ₯Ό μ˜€λ²„λΌμ΄λ”© μ΄λΌκ³  ν•œλ‹€. μƒμ†ν•˜κΈ° μœ„ν•œ μƒμœ„ν΄λž˜μŠ€λ₯Ό open으둜 μ—΄κ³  λ°›λŠ” κ³³μ—μ„œ overrideλ₯΄ μž‘μ„±ν•˜λ©΄ λœλ‹€.

 

package com.example.ch3

open class Super{
    open var superData =10
    open fun superFun(){
        println(" i am superFun $superData")
    }
}
class Sub : Super()

fun main(){
    var obj = Sub()
    obj.superData = 30 
    obj.superFun()
}

 

ν•œ λ§ˆλ””λ‘œ μž¬μ‚¬μš©

package com.example.ch3

open class Super{
    open var superData =10
    open fun superFun(){
        println(" i am superFun $superData")
    }
}
class Sub : Super(){
    override var superData = 20
    override fun superFun() {
    println("i am sub class function : ${superData}")
    }
}

fun main(){
    var obj = Sub()
    obj.superFun()
}

 

 

μ ‘κ·Ό μ œν•œμž

클래슀의 멀버λ₯Ό μ™ΈλΆ€μ˜ μ–΄λŠ λ²”μœ„κΉŒμ§€ μ΄μš©ν•˜κ²Œ ν•  것인지 κ²°μ •ν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€.

 

μ ‘κ·Ό μ œν•œμž μ΅œμƒμœ„μ—μ„œ 이용 클래슀 λ©€λ²„μ—μ„œ 이용
public λͺ¨λ“  νŒŒμΌμ—μ„œ κ°€λŠ₯ λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ κ°€λŠ₯
internal 같은 λͺ¨λ“ˆλ‚΄μ—μ„œ κ°€λŠ₯ 같은 λͺ¨λ“ˆλ‚΄μ—μ„œ κ°€λŠ₯
protected μ‚¬μš© λΆˆκ°€ 상속 κ΄€κ³„μ˜ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯
private 파일 λ‚΄λΆ€μ—μ„œλ§Œ 이용 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ 이용

 

데이터 클래슀 : dataν‚€μ›Œλ“œλ‘œ μ„ μ–Έ

VO(value-object) 클래슀λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ΄μš©ν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•œλ‹€.

 

 

equals() ν•¨μˆ˜λŠ” μ£Ό μƒμ„±μžμ— μ„ μ–Έν•œ 멀버 λ³€μˆ˜μ˜ λ°μ΄ν„°λ§Œ 비ꡐ λŒ€μƒμœΌλ‘œ μ‚ΌλŠ”λ‹€. 즉, 보쑰 μƒμ„±μžμ— 좔가적인 μ •λ³΄λŠ” λΉ„κ΅ν•˜μ§€ μ•ŠλŠ”λ‹€. lateinit var도..

 

 

객체의 데이터λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λŠ” toSring() ν•¨μˆ˜μ΄λ‹€. 이 ν•¨μˆ˜λ‘œ 데이터 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ 객체가 κ°€μ§€λŠ” 값을 확인해야 ν•  λ•Œ 이λ₯Ό μ΄μš©ν•œλ‹€.

 

 

 

였브잭트 클래슀

 

였브잭트 클레슀 : 읡λͺ… 클래슀λ₯Ό λ§Œλ“€ λͺ©μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

μ„ μ–Έκ³Ό λ™μ‹œμ— 객체λ₯Ό μƒμ„±ν•œλ‹€λŠ” μ˜λ―Έμ—μ„œ objectλΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ Any νƒ€μž…μœΌλ‘œ μ·¨κΈ‰λ˜λ©°  객체 멀버가 μ—†μ–΄ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

 

였브젝트 클래슀 νƒ€μž…μ€ object 뒀에 콜둠(:)을 μž…λ ₯ν•˜κ³  κ·Έ 뒀에 클래슀의 μƒμœ„ 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μž…λ ₯ν•˜μ—¬ μ§€μ •ν•œλ‹€. λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

package com.example.ch3

open class Super{
    open var data =10
    open fun some(){
        println("i am super some() $data")
    }
}

val obj = object :Super(){
    override var data =20
    override fun some(){
        println("i am object some() $data")
    }
}

fun main() {
    obj.data =30
    obj.some()
}

 

 

 

μΊ νŒ¨λ‹ˆμ–Έ 클래슀

 

μΊ νŒ¨λ‹ˆμ–Έ ν΄λž˜μŠ€λŠ” 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  멀버 λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ₯Ό 클래슀 μ΄λ¦„μœΌλ‘œ μ ‘κ·Όν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•˜λ©° companion μ΄λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œλ‹€.

package com.example.ch3

class MyClass{
    companion object{
        var data =10
        fun some() {
            println(data)
        }
    }
}

fun main() {
    MyClass.data = 20
    MyClass.some()
}