Kotlin

코틀린 핵심 개념 정리

jhyngu 2025. 1. 15. 23:02

자바의 문제점 & 코틀린으로 해결

  • 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. 스크립트 언어 대체

  • 간단한 스크립트 작성 및 실행 가능.