오버라이드와 익스텐션

고성욱·2023년 3월 20일
0

안드로이드

목록 보기
16/26

오버라이드

코틀린에서 클래스 상속은 자바와 비슷한 방식으로 동작합니다. 자식 클래스는 부모 클래스의 메소드를 오버라이드할 수 있습니다. 이는 부모 클래스에 정의된 메소드를 자식 클래스에서 새로운 구현으로 대체하는 것을 의미합니다.

코틀린에서는 override 키워드를 사용하여 메소드를 오버라이드할 수 있습니다. 오버라이드된 메소드는 부모 클래스의 메소드와 이름, 매개변수, 반환 유형이 동일해야 합니다. 그러나 자식 클래스에서는 메소드 구현을 변경할 수 있습니다.

다음은 Animal 클래스를 상속받아 Cat 클래스에서 makeSound() 메소드를 오버라이드하는 예시 코드입니다.

open class Animal {
    open fun makeSound() {
        println("The animal makes a sound")
    }
}

class Cat : Animal() {
    override fun makeSound() {
        println("Meow")
    }
}

이 예시에서 Animal 클래스의 makeSound() 메소드는 open 키워드로 선언되었기 때문에, Cat 클래스에서 이를 오버라이드할 수 있습니다. Cat 클래스에서 오버라이드된 makeSound() 메소드는 "Meow"를 출력합니다.

오버라이드 주의 할 점

  • 부모 클래스의 메소드를 오버라이드할 때는 이름, 매개변수, 반환 유형이 모두 일치해야 합니다.
  • 자식 클래스에서 오버라이드된 메소드는 부모 클래스의 메소드를 대체합니다.
  • 하지만, 자식 클래스에서는 오버라이드된 메소드를 확장할 수 있습니다. 이때 super 키워드를 사용하여 부모 클래스의 메소드를 호출할 수 있습니다.
  • 자식 클래스에서 open 키워드를 사용하여 오버라이드할 수 있는 메소드를 선언해야 합니다. 만약 부모 클래스에서 메소드가 final로 선언되어 있다면, 오버라이드할 수 없습니다.

익스텐션

코틀린에서는 또한 익스텐션(Extension)이라는 기능이 있습니다. 익스텐션은 이미 존재하는 클래스에 새로운 기능을 추가합니다. 이를 통해 기존 클래스의 코드를 수정하지 않고도 새로운 기능을 추가할 수 있습니다.

익스텐션을 사용하려면 클래스 이름 뒤에 점(.)을 붙이고, 새로운 메소드 이름을 정의합니다. 이를 활용하여 기존 클래스에 새로운 메소드를 추가할 수 있습니다. 새로운 메소드는 클래스 내부의 다른 메소드와 같은 방식으로 작동합니다.

코틀린의 오버라이드와 익스텐션은 각각 클래스 상속과 클래스 확장을 위한 강력한 기능입니다. 코드의 재사용성을 높이고, 새로운 기능을 추가하거나 기존 기능을 수정할 수 있는 유연성을 제공합니다.

다음은 String 클래스에 addExclamation() 메소드를 추가하는 익스텐션 예시 코드입니다.

fun String.addExclamation(): String {
    return "$this!"
}

이 예시에서 String 클래스에 addExclamation() 메소드를 추가하고 있습니다. addExclamation() 메소드는 문자열 뒤에 느낌표를 추가하여 반환합니다. 이제 String 클래스의 인스턴스에서 addExclamation() 메소드를 호출할 수 있습니다.

val greeting = "Hello"
println(greeting.addExclamation()) // 출력: "Hello!"

위 예시에서 addExclamation() 메소드를 사용하여 "Hello!"를 출력합니다.

익스텐션 주의 할 점

  • 익스텐션은 클래스의 기능을 수정하는 것이 아니라 기존 클래스에 새로운 함수를 추가하는 것입니다.
  • 익스텐션에서는 클래스의 프로퍼티에 접근할 수 없습니다.
  • 익스텐션 함수를 호출할 때, 클래스 내부의 멤버 함수와 같은 이름의 함수가 있다면, 멤버 함수가 호출됩니다.
  • 익스텐션 함수는 클래스 내부의 private 멤버에 접근할 수 없습니다.
  • 뷰- 액티비티를 연결해 뷰를 바로 쓸수 있다는 장점이 있지만 안드로이드 스튜디오 4.1 버전 이후 부터는 추천을 안하고 있습니다. 뷰를 바로 사용하고 싶다면, DataBinding을 이용하는것이 좋습니다.
profile
안드로이드, 파이썬 개발자

0개의 댓글