본문 바로가기
Blog/TIL

2025-03-18 (화)

by 코젼 2025. 3. 18.
728x90
반응형
  • require를 사용하면 입력 검증을 간결하게 처리할 수 있다.
  • filter는 결과 리스트 반환, any는 조건 만족 여부만 확인하므로 목적에 따라 선택해야 한다.
  • apply는 객체 설정, run은 연산 결과를 반환하는 용도로 구분하면 코드가 더 명확해진다.

1️⃣ require 사용법

require(condition)는 주어진 조건이 false일 경우 IllegalArgumentException을 발생시킨다.

이를 활용하면 함수의 입력 검증을 간결하게 처리할 수 있다.

fun createReport(name: String) {
    require(name.isNotBlank()) { "Report name must not be blank" }
    println("Report created: $name")
}

createReport("") // IllegalArgumentException 발생

✔ 핵심 정리

  • 조건이 false이면 IllegalArgumentException 발생
  • 입력 검증, 초기화 로직에서 활용
  • 메시지를 함께 전달하면 디버깅이 용이

2️⃣ filter vs any 차이

💡 공통점: 둘 다 컬렉션에서 조건을 만족하는 요소를 찾을 때 사용

💡 차이점:

  • filter → 조건을 만족하는 모든 요소를 리스트로 반환
  • any → 조건을 만족하는 요소가 하나라도 존재하는지 Boolean 반환

📌 예제 코드

val reports = listOf("Report1", "Report2", "Report3")

// filter: 조건을 만족하는 모든 요소 반환
val filteredReports = reports.filter { it.contains("1") }
println(filteredReports) // ["Report1"]

// any: 조건을 만족하는 요소가 하나라도 있으면 true 반환
val hasReportWith1 = reports.any { it.contains("1") }
println(hasReportWith1) // true

✔ 핵심 정리

  • filter → 조건을 만족하는 모든 항목 리스트 반환
  • any → 조건을 만족하는 항목이 존재하는지만 확인 (Boolean 반환)
  • any는 단순 존재 여부 체크 시 성능적으로 유리

3️⃣ apply vs run 차이

💡 공통점: 둘 다 객체의 스코프 내에서 설정 및 연산을 수행하는 확장 함수

💡 차이점:

apply run

반환값 자기 자신 (this) 람다의 결과 (R)
주요 사용처 객체 설정 후 반환 특정 연산을 수행하고 결과 반환
스코프 this this or it 없음

📌 예제 코드

// apply: 자기 자신을 반환 → 객체 설정 후 사용
val report = Report().apply {
    name = "Weekly Report"
    createdBy = "User123"
}

println(report) // Report(name="Weekly Report", createdBy="User123")

// run: 람다의 마지막 결과를 반환 → 특정 연산 수행 후 결과 반환
val reportSummary = report.run {
    "Report: $name, Created by: $createdBy"
}

println(reportSummary) // "Report: Weekly Report, Created by: User123"

✔ 핵심 정리

  • apply → 객체 설정 후 자기 자신 반환 (Builder 패턴처럼 활용)
  • run → 객체 내부 연산 후 결과 반환 (비즈니스 로직 실행)
  • apply는 객체 초기화, run은 결과값이 필요한 경우 유용
728x90
반응형

'Blog > TIL' 카테고리의 다른 글

2025-03-20 (목)  (0) 2025.03.20
2025-03-14 (금)  (0) 2025.03.14
2025-03-13 (목)  (0) 2025.03.13
2025-03-11 (화)  (1) 2025.03.11
2025-03-10 (월)  (1) 2025.03.10

댓글