객체지향 프로그래밍의 특징 중 하나인 다형성(polymorphis)에 포함하는

Overide와 Overload이 있습니다 공통점은 상속입니다.

 

1. 상속을 통해 코드의 양이 감소합니다.

2. 메소드의 이름이 동일하여 가독성이 증가합니다

3. 새롭게 사용자 정의를 하여 로직을 구현 할 수 있습니다.

 

Override

1. 사용자가 작성한 클래스

2. 언어에서 제공하는 클래스, 오브젝트

3. 외부 라이브러리에서 가져온 클래스, 오브젝트

 

메소드를 재정의 합니다

 

Ex)

1. 사용자가 작성한 클래스 override

    open class Man { //부모클래스를 상속시 open 키워드
        open fun say() { //부모 클래스 내부에 메소드를 상속 시 open
            println("아이고난!")
        }
    }
    
    class human: Man() {
        override fun say() { //메서드 재정의
            println("뭉탱이!")
        }
    }
    
    var result = human()
    result.say() //결과값 : 뭉탱이!

 

2. 언어에서 제공하는 object override

emailEditTextView.addTextChangedListener(object : TextWatcher {
			//emailEditTextView 작성하기 전 로직
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
                check = false
            }
			//emailEditTextView 작성할 때 로직
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                if (s!!.contains("@", ignoreCase = true) && s.contains(".com", ignoreCase = true)) {
                    emailCheckTextView.visibility = View.GONE
            }
            //emailEditTextView 작성한 후 로직
            override fun afterTextChanged(s: Editable?) {
                val result1 = emailEditTextView.text.toString()
                if(result1.isEmpty()) {
                    check = false
                    regectbutton()
                }
            }
        })

 

3. 외부라이브러리에서 제공하는 object override

UserDB.child(userID!!).addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                val nickname = snapshot.child("nickname").value.toString()
                binding.userNameTextView.text = "${nickname.toString()}님 환영합니다!"
            }

            override fun onCancelled(error: DatabaseError) {
            }
        })

 

Overload

 

같은 메소드를 매개변수를 변경 혹은 데이터 타입을 달리하여 재정의

 

※주의점

파라미터 갯수가 달라야한다.

파라미터 갯수가 같을 시 데이터타입이 달라야 한다.

 

fun main() {
	val result = plus(5, 10)
    val result1 = plus(5, 10, 15)
    println(result) //15
    println(result1) //30
}


fun plus(a: Int, b: Int) = a + b
fun plus(c: Int, d: Int, e: Int) = c + d + e

 

복사했습니다!