[Kotlin] 6. 코틀린 확장 함수와 표준 라이브러리 활용

2024. 11. 23. 16:30·프로그래밍 언어/Kotlin
728x90
반응형

1. 확장 함수(Extension Function)

확장 함수는 기존 클래스에 새로운 함수나 속성을 추가하는 방법입니다. 클래스 코드를 수정하지 않고도 메서드를 추가할 수 있어 매우 유용합니다.

(1) 확장 함수 정의

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

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

  • this는 확장 함수가 호출되는 객체를 나타냅니다.
  • 확장 함수는 기존 클래스의 멤버처럼 사용할 수 있습니다.

(2) 확장 함수 활용

문자열의 확장 함수

fun String.isEmail(): Boolean {
    return this.contains("@") && this.contains(".")
}

val email = "example@gmail.com"
println(email.isEmail()) // true

리스트의 확장 함수

fun List<Int>.sumOfSquares(): Int {
    return this.map { it * it }.sum()
}

val numbers = listOf(1, 2, 3)
println(numbers.sumOfSquares()) // 14 (1² + 2² + 3²)

 


2. 확장 속성(Extension Property)

확장 속성을 사용하면 클래스에 속성을 추가할 수 있습니다.

val String.firstChar: Char
    get() = this[0]

val word = "Kotlin"
println(word.firstChar) // 'K'


3. 표준 라이브러리 활용

코틀린은 많은 유용한 표준 라이브러리 함수들을 제공합니다. 대표적인 함수 몇 가지를 살펴보겠습니다.

(1) let

let은 특정 객체를 임시로 사용할 때 유용합니다.

val name: String? = "Alice"
name?.let {
    println("Name is $it")
} // "Name is Alice"

(2) run

run은 블록 내부에서 객체를 처리한 결과를 반환합니다.

val result = "Kotlin".run {
    println("String length: ${this.length}")
    this.uppercase() // 반환값
}
println(result) // "KOTLIN"

(3) apply

apply는 객체 설정에 사용됩니다. 반환값은 객체 자체입니다.

val person = Person().apply {
    name = "Bob"
    age = 25
}
println(person.name) // "Bob"

(4) also

also는 객체를 설정하면서 디버깅하거나 부가 작업을 할 때 유용합니다.

val numbers = mutableListOf(1, 2, 3).also {
    println("Original list: $it")
    it.add(4)
}
println(numbers) // [1, 2, 3, 4]

(5) with

with는 객체를 컨텍스트로 사용하여 여러 작업을 수행합니다.

val builder = StringBuilder()
with(builder) {
    append("Hello, ")
    append("Kotlin!")
}
println(builder.toString()) // "Hello, Kotlin!"

 


4. 예제: 확장 함수와 표준 라이브러리 결합

fun String.maskEmail(): String {
    val parts = this.split("@")
    return if (parts.size == 2) {
        parts[0].replace(Regex("."), "*") + "@" + parts[1]
    } else this
}

fun main() {
    val email = "example@gmail.com"
    val maskedEmail = email.maskEmail()
    maskedEmail.let {
        println("Masked email: $it")
    }
}


5. 확장 함수의 한계

  • 확장 함수는 클래스 내부의 private 또는 protected 멤버에 접근할 수 없습니다.
  • 멤버 함수와 이름이 같은 확장 함수가 있을 경우, 멤버 함수가 우선 호출됩니다.
728x90
반응형

'프로그래밍 언어 > Kotlin' 카테고리의 다른 글

[Kotlin] 8. 코틀린 DSL(Domain-Specific Language) 소개와 작성 방법  (0) 2024.11.25
[Kotlin] 7. 코틀린의 코루틴과 비동기 프로그래밍  (0) 2024.11.24
[Kotlin] 5. 컬렉션과 함수형 프로그래밍  (1) 2024.11.22
[Kotlin] 4. 클래스와 객체  (0) 2024.11.20
[Kotlin] 3. 조건문과 반복문  (0) 2024.11.19
'프로그래밍 언어/Kotlin' 카테고리의 다른 글
  • [Kotlin] 8. 코틀린 DSL(Domain-Specific Language) 소개와 작성 방법
  • [Kotlin] 7. 코틀린의 코루틴과 비동기 프로그래밍
  • [Kotlin] 5. 컬렉션과 함수형 프로그래밍
  • [Kotlin] 4. 클래스와 객체
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    단일 사이클
    42서울
    자바
    상속
    컴퓨터 구조 및 설계
    C++
    추가 문제
    백준
    컴공 포트폴리오
    티스토리챌린지
    오블완
    명령어
    메모리 계층 구조
    자료구조
    리눅스
    사설 문제
    코틀린
    반복자
    컴퓨터구조
    데이터패스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[Kotlin] 6. 코틀린 확장 함수와 표준 라이브러리 활용
상단으로

티스토리툴바