BE/Kotlin

[Kotlin] 코틀린 문법

baek-dev 2025. 2. 14. 01:09

1. 변수 선언 (Variable Declaration)

Java

int number = 10;
String text = "Hello";
boolean isActive = true;

 

Kotlin

val number: Int = 10
val text: String = "Hello"
val isActive: Boolean = true

 

차이점

1. val vs var

val(Immutable, 변경 불가) = Java의 final

var(Mutable, 변경 가능) = 일반적인 변수 선언

 

2. 타입 추론(Type Inference)

Kotlin에서는 val number = 10 처럼 타입을 생략해도 자동으로 Int로 인식됨.

 

2. 함수 선언 (Function)

Java

public int add(int a, int b) {
    return a + b;
}

 

Kotlin

fun add(a: Int, b: Int): Int {
    return a + b
}

 

혹은 더 간결하게

fun add(a: Int, b: Int) = a + b

 

차이점

1. fun 키워드 사용

Java의 public int → Kotlin에서는 fun 사용

 

2. 리턴 타입 위치

Java: int add(int a, int b)

Kotlin: fun add(a: Int, b: Int): Int

 

3. 한 줄 함수 표현 가능

fun add(a: Int, b: Int) = a + b

 

3. 클래스와 생성자 (Class & Constructor)

Java

public class Person {
    private String name;
    
    public Person(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
}

 

Kotlin

class Person(val name: String)

 

차이점

 

1. 기본 생성자(Constructor)를 클래스 선언에 포함 가능

Java에서는 생성자를 따로 정의해야 하지만, Kotlin에서는 class Person(val name: String)으로 바로 정의 가능

 

2. 게터/세터 자동 생성

val name: String 선언만으로 자동으로 getter가 생성됨.

 

4. 조건문 (If, When)

Java (if-else)

int num = 10;
String result;

if (num > 0) {
    result = "Positive";
} else {
    result = "Negative";
}

 

Kotlin (if-else)

val num = 10
val result = if (num > 0) "Positive" else "Negative"

 

Kotlin (when - Java의 switch와 유사)

val num = 2

val result = when (num) {
    1 -> "One"
    2 -> "Two"
    else -> "Other"
}

 

차이점

 

1. Kotlin의 if는 표현식(Expression)으로 사용 가능

즉, 값을 반환할 수 있음.

 

2. Java의 switch → Kotlin의 when

break 필요 없이 간결하게 사용 가능

 

5. 반복문 (Loop)

Java (for-loop)

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

 

Kotlin (for-loop)

for (i in 0..4) {
    println(i)
}

 

Kotlin (while)

var i = 0
while (i < 5) {
    println(i)
    i++
}

 

차이점

 

1. Kotlin의 for는 범위(Range)를 사용

0..4 → 0부터 4까지 포함

0 until 5 → 0부터 4까지 (5는 제외)

 

2. step 키워드 사용 가능

for (i in 0..10 step 2) {
    println(i) // 0, 2, 4, 6, 8, 10
}

 

3. 내림차순 반복

for (i in 10 downTo 1) {
    println(i)
}

 

6. Null 안전성 (Null Safety)

Java (NPE 발생 가능)

String name = null;
System.out.println(name.length()); // NullPointerException 발생!

 

Kotlin (안전한 코드)

var name: String? = null
println(name?.length) // null 출력 (NPE 발생 X)

 

차이점

 

1. Kotlin에서는 Nullable과 Non-Nullable을 명확히 구분

var name: String = null ❌ (에러 발생)

var name: String? = null ✅ (Nullable 허용)

 

2. ?.(Safe Call) 연산자로 NPE 방지

name?.lengthnamenull이면 null을 반환, 그렇지 않으면 .length 실행

 

3. !!(Non-null Assertion) 연산자

println(name!!.length) // 강제로 NPE 발생 가능

 

7. 확장 함수 (Extension Function)

Java (기존 클래스 확장 어려움)

public class StringUtil {
    public static String addPrefix(String str) {
        return "Prefix_" + str;
    }
}

 

Kotlin (확장 함수 사용)

fun String.addPrefix() = "Prefix_$this"

val result = "Hello".addPrefix() // Prefix_Hello

 

차이점

 

1. Kotlin에서는 기존 클래스에 새로운 기능을 추가 가능

Java에서는 별도 Util 클래스를 만들어야 하지만, Kotlin에서는 확장 함수를 활용 가능

 

2. 객체지향적인 코드 작성 가능

this 키워드를 활용해 기존 클래스처럼 사용 가능

 

8. 데이터 클래스 (Data Class)

Java (보일러플레이트 코드 많음)

public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }
}

 

Kotlin (데이터 클래스 사용)

data class User(val name: String, val age: Int)

 

차이점

 

1. 자동으로 equals(), hashCode(), toString() 구현

 

2. 객체 복사 기능 제공

val user1 = User("Alice", 25)
val user2 = user1.copy(age = 26) // 기존 객체에서 일부 값만 변경

 

✅ 결론

코틀린은 Java보다 간결하고 현대적인 문법을 제공

Null 안전성, 확장 함수, 데이터 클래스 등 실용적인 기능 제공

Java 기반 프로젝트에서도 코틀린을 쉽게 적용 가능

백엔드 개발 시 Spring Boot와 함께 Kotlin을 사용할 수 있음

 

 

 

 

출처 : ChatGPT