확장(Extension)

이완희·2024년 6월 11일
0

코틀린 기초 타파

목록 보기
2/5

목적

기존 클래스 내용을 수정하지 않고도 추가 기능을 사용하기 위함이다.

상속 받거나 기존 클래스에 메소드 및 프로퍼티를 구현해도 될텐데 왜 확장을 사용하는 걸까?

수정할 수 없는 라이브러리를 만들때 유용하게 사용된다.

Extension Function

fun String.isPalindrome(): Boolean {
    val cleaned = this.replace(Regex("[^A-Za-z0-9]"), "").toLowerCase()
    return cleaned == cleaned.reversed()
}

val word = "A man, a plan, a canal, Panama"
println(word.isPalindrome())  // true

코드의 가독성 향상, 유연성, 재사용성이 좋다는 장점이 있다.

함수 앞에 클래스 이름과 .(온점)을 붙여서 사용할 수 있다.

정적 바인딩 된다는 특징이 있다.

만약 멤버 메서드 명과 확장 함수 이름이 같다면 멤버 메서드가 실행이 된다.

Extension Property

val String.wordCount: Int
    get() = this.split(Regex("\\s+")).size

val sentence = "This is a sample sentence."
println(sentence.wordCount)  // 5

실제 상태를 저장하진 않고 계산된 값을 반환한다. 메모리 사용이 효율적이란 의미다.

get()은 반드시 선언해야함에 명심하자.

결론

외부 라이브러리는 final이므로 상속을 통해 수정이 불가능하다. 이럴때 확장을 이용한다면 가독성이 좋고, 유지보수성이 높은 코드를 만들수 있게 도와준다. 특히 OCP원칙을 지키는 점에서 매력적이다.

profile
인생을 재밌게, 자유롭게

0개의 댓글