자바의 문제점 & 코틀린으로 해결
- NullPointerException : Nullable 타입과 안전한 연산자 도입.
- 장황한 코드 : 간결하고 직관적인 문법 제공.
- 데이터 클래스 : 단순 클래스 작성을 위한 data 키워드 제공.
- 함수형 프로그래밍 : 더욱 강력하고 완전한 지원.
1. 코틀린의 Nullable 처리 및 장점
1.1 Nullable 처리 방식
코틀린은 자바의 NullPointerException(NPE) 문제를 해결하기 위해 다양한 연산자를 제공한다.
1. Safe Call( ?. ) :
- 객체가 null일 경우 null을 반환하며 연산을 수행하지 않는다.
var str: String? = null
println(str?.length) // null 반환, NPE 방지
2. Elvis 연산자( ?: ) :
- null일 경우 대체 값을 제공한다.
val name: String? = null
val nonNullName = name ?: "Unknown" // "Unknown" 반환
3. Not-null Assertion( !! ) :
- 값을 반드시 null이 아니라고 단언할 때 사용. 잘못 사용할 경우 NPE 발생 위험이 있음.
val nullableString: String? = null
val nonNullString: String = nullableString!! // NPE 발생
1. 2 코틀린의 장점
1. 타입 시스템으로 NPE 예방 :
- 변수의 Nullable 여부를 컴파일 타임에 명시.
val str: String = "Hello" // null 불가
val nullableStr: String? = null // null 가능
2. 간결한 null 체크 :
- 자바의 복잡한 null 체크 코드를 간단하게 변환 가능.
- Java :
if (address == null || address.getStreet() == null) {
return "Unknown";
}
- Kotlin :
return address?.street ?: "Unknown"
2. 코틀린의 간결한 코드
2.1 데이터 클래스
코틀린은 data 키워드를 통해 자바의 장황한 코드를 대체한다.
- Java :
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object o) { /* ... */ }
@Override
public int hashCode() { /* ... */ }
@Override
public String toString() { /* ... */ }
}
- Kotlin :
data class User(val name: String, val age: Int)
2.2 빌더 패턴 대체
코틀린의 디폴트 파라미터와 명명된 파라미터를 사용하여 빌더 패턴을 대체할 수 있다.
- Java :
public class AlertDialog {
private String title;
private String message;
private boolean cancelable;
public static class Builder {
private String title;
private String message;
private boolean cancelable = true;
public Builder setTitle(String title) { /* ... */ }
public Builder setMessage(String message) { /* ... */ }
public Builder setCancelable(boolean cancelable) { /* ... */ }
public AlertDialog build() { /* ... */ }
}
}
- Kotlin :
class AlertDialog(
val title: String? = null,
val message: String? = null,
val cancelable: Boolean = true
)
2.3 범위 표현
코틀린은 in 연산자를 활용하여 범위를 간결하게 표현할 수 있다.
- Java :
if (number >= 0 && number <= 100) {
System.out.println("Valid");
}
- Kotlin:
if (number in 0..100) {
println("Valid")
}
3. 코틀린의 함수형 프로그래밍
코틀린은 함수형 프로그래밍 스타일을 지원하여 코드의 가독성과 유지보수성을 향상시킨다.
1. 고차 함수 :
- 함수를 파라미터로 전달하거나 변환할 수 있다.
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
val sum = calculate(3, 5) { x, y -> x + y }
println(sum) // 8
2. 람다식 :
- 간결한 함수 표현식을 제공한다.
val list = listOf(1, 2, 3, 4, 5)
val doubled = list.map { it * 2 }
println(doubled) // [2, 4, 6, 8, 10]
3. 컬렉션 처리 :
- filter, map, reduce 등의 함수로 데이터를 직관적으로 처리할 수 있다.
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // [2, 4]
4. 코틀린의 사용 사례
1. 안드로이드 개발 :
- 구글이 공식 언어로 채택.
- 자바 코드와 100% 호환 가능.
2. 백엔드 개발 :
- Ktor와 Spring과 같은 프레임워크에서 활용.
3. 스크립트 언어 대체
- 간단한 스크립트 작성 및 실행 가능.
'Kotlin' 카테고리의 다른 글
코틀린 문법 총정리 (1) | 2025.01.20 |
---|