
객체지향 프로그래밍의 특징 중 하나인 다형성(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
'Computer Science🔎' 카테고리의 다른 글
[CS] 네트워크 통신 @GET, @POST 차이 (0) | 2022.06.28 |
---|---|
[CS] 오픈 소스와 오픈 API (0) | 2022.06.11 |
[CS] 동기, 비동기 특징 및 차이점 (0) | 2022.06.03 |
[CS] MVP 패턴 - (Model View Presenter) (0) | 2022.05.28 |