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 |
댓글