📌 1. 컬렉션 필터링 (Filtering Collections)
Kotlin과 Java에서는 컬렉션(리스트, 맵 등)에서 특정 조건을 만족하는 요소만 추출할 수 있음.
✅ Java에서 컬렉션 필터링
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// 짝수만 필터링
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // [2, 4, 6, 8, 10]
}
}
✔ Java의 특징
• stream().filter(조건).collect(Collectors.toList())를 사용하여 필터링해야 함.
• Stream API를 사용해야 하므로 코드가 길어짐.
✅ Kotlin에서 컬렉션 필터링
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
// 짝수만 필터링
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // [2, 4, 6, 8, 10]
}
✔ Kotlin의 특징
• filter { 조건 }을 사용하여 간결하게 필터링 가능함.
• it 키워드를 사용하여 현재 요소를 나타낼 수 있음.
• 별도의 Stream API 없이 컬렉션에 필터링 함수가 기본 제공됨.
📌 2. forEach & map (리스트 변환)
Kotlin과 Java에서 forEach를 활용하여 리스트를 순회하고, map을 사용하여 변환할 수 있음.
✅ Java에서 forEach & map 사용
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// forEach 사용
names.forEach(name -> System.out.println(name));
// 대문자로 변환 (map 사용)
List<String> upperNames = names.stream()
.map(name -> name.toUpperCase())
.collect(Collectors.toList());
System.out.println(upperNames); // [ALICE, BOB, CHARLIE]
}
}
✔ Java의 특징
• forEach는 .forEach(람다) 형태로 사용됨.
• map()을 사용하여 리스트 변환 가능하지만, collect(Collectors.toList())가 필요하여 코드가 길어짐.
✅ Kotlin에서 forEach & map 사용
fun main() {
val names = listOf("Alice", "Bob", "Charlie")
// forEach 사용
names.forEach { println(it) }
// 대문자로 변환 (map 사용)
val upperNames = names.map { it.uppercase() }
println(upperNames) // [ALICE, BOB, CHARLIE]
}
✔ Kotlin의 특징
• forEach { println(it) }처럼 간단하게 사용할 수 있음.
• map을 사용하여 리스트 변환 가능하며, .collect() 필요 없이 map()만으로 변환이 완료됨.
• Java보다 코드가 간결하고 직관적임.
📌 3. 엘비스 연산자 (?:)
Kotlin에서는 널 체크를 간단하게 하기 위해 엘비스 연산자(?:)를 제공함.
Java에서는 null 체크를 직접 해야 하지만, Kotlin에서는 더 간단하게 가능함.
✅ Java에서 null 체크
public class Main {
public static void main(String[] args) {
String name = null;
// 삼항 연산자를 이용한 null 체크
String result = (name != null) ? name : "Unknown";
System.out.println(result); // Unknown
}
}
✔ Java의 특징
• null 체크를 하기 위해 삼항 연산자를 사용해야 함.
✅ Kotlin에서 엘비스 연산자 사용
fun main() {
val name: String? = null
val result = name ?: "Unknown"
println(result) // Unknown
}
✔ Kotlin의 특징
• ?: (엘비스 연산자)를 사용하여 null 값일 때 기본값을 설정할 수 있음.
• 코드가 간결하고 가독성이 뛰어남.
📌 4. 타입 체크 & 캐스팅 (is vs instanceof)
Java에서는 instanceof를 사용하여 타입을 체크하고 캐스팅하지만, Kotlin에서는 is 키워드를 사용하며 스마트 캐스팅이 적용됨.
✅ Java에서 instanceof 사용
public class Main {
public static void main(String[] args) {
Object obj = "Hello";
if (obj instanceof String) {
String str = (String) obj;
System.out.println(str.length()); // 5
}
}
}
✔ Java의 특징
• instanceof를 사용하여 타입을 체크함.
• 형변환(casting)을 직접 해야 함 ((String) obj).
✅ Kotlin에서 타입 체크 (is)
fun main() {
val obj: Any = "Hello"
if (obj is String) {
println(obj.length) // 5
}
}
✔ Kotlin의 특징
• is 키워드를 사용하여 타입을 체크할 수 있음.
• 스마트 캐스팅이 적용되어 별도의 형변환이 필요 없음.
• if (obj is String)이 참이면, obj는 자동으로 String 타입으로 변환됨.
📌 5. 강제 캐스팅 (as)
✅ Java에서 강제 캐스팅
public class Main {
public static void main(String[] args) {
Object obj = "Hello";
// 강제 캐스팅 (실패할 가능성이 있음)
String str = (String) obj;
System.out.println(str.length());
}
}
✔ Java의 특징
• (String) obj처럼 강제 캐스팅이 필요함.
• 타입이 맞지 않으면 ClassCastException 발생 가능.
✅ Kotlin에서 강제 캐스팅 (as)
fun main() {
val obj: Any = "Hello"
val str = obj as String
println(str.length) // 5
}
✔ Kotlin의 특징
• as 키워드를 사용하여 강제 캐스팅 가능.
• 만약 잘못된 타입을 캐스팅하면 예외 발생 (ClassCastException).
📌 6. 안전한 캐스팅 (as?)
✅ Kotlin에서 안전한 캐스팅 (as?)
fun main() {
val obj: Any = 123
val str: String? = obj as? String // 타입이 맞지 않으면 null 반환
println(str) // null
}
✔ Kotlin의 특징
• as?를 사용하면 캐스팅이 실패할 경우 null을 반환하여 예외를 방지할 수 있음.
• 안전한 타입 변환을 보장함.
🚀 결론
Kotlin은 컬렉션 필터링, 리스트 변환, 타입 체크, 캐스팅, 널 체크 등이 Java보다 더 간결하고 안전하게 작성 가능함.
특히 람다식, 스마트 캐스팅, 엘비스 연산자가 Kotlin의 강점임.
출처 : ChatGPT
'BE > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 문법 6 (open, 상속, 인터페이스) (0) | 2025.02.20 |
---|---|
[Kotlin] 코틀린 문법 5 (lateinit, lazy, companion object) (0) | 2025.02.19 |
[Kotlin] 코틀린 문법 4 (apply, let, also, run, with) (0) | 2025.02.18 |
[Kotlin] 코틀린 문법 2 (0) | 2025.02.16 |
[Kotlin] 코틀린 문법 (0) | 2025.02.14 |