Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240906 kotlin 본문

개발Article

[TIL]20240906 kotlin

최밤빵 2024. 9. 7. 00:48

나는 백엔드 개발을 공부하는 뉴비... 코틀린이 매력적인 언어라고 들어서 흥미가 생겼다. 오늘 개발일지에서는 코틀린의 특징과 장점, 그리고 간단한 예시 코드를 통해 이 언어에 대해 알아보고싶었다! 

 

▶코틀린(kotlin)

코틀린(kotlin)은 2011년 JetBrains에서 처음 발표한 프로그래밍 언어로, 주로 JVM(Java Virtual Machine)에서 동작하도록 설계되었다. 자바와 100% 호환되기 때문에 기존 자바 코드베이스와의 통합이 용이하며, 자바에서 불편하던 부분들을 개선한 언어로 주목받고 있다. 특히 구글이 코틀린을 안드로이드 공식 언어로 채택하면서 더 큰 인기를 얻게 되었다.

 

▶코틀린의 주요 특징

→ 간결한 문법:

자바에 비해 코틀린은 훨씬 간결한 문법을 제공한다. 불필요한 코드 작성을 줄이고, 기본적인 작업들을 더 쉽게 처리할 수 있다.

→ Null 안전성:

코틀린은 NullPointerException(NPE) 문제를 예방할 수 있는 기능을 제공한다. 변수에 null 값을 할당할 수 있는지 명확하게 선언하고, 이를 통해 NPE 오류를 방지할 수 있다.

→ 함수형 프로그래밍 지원:

코틀린은 객체지향과 함수형 프로그래밍 패러다임을 모두 지원한다. 람다 표현식, 고차 함수 등을 통해 함수형 스타일로 코드를 작성할 수 있다.

→ 상호운용성:

자바와의 100% 호환성을 제공한다. 기존 자바 프로젝트에서 코틀린을 사용할 수 있으며, 자바와 코틀린 코드를 자유롭게 혼용할 수 있다.

→ 스마트 캐스트(Smart Casts):

변수의 타입을 명시하지 않고도 코틀린 컴파일러가 자동으로 적절한 타입을 추론해준다. 이는 코드의 가독성을 높이고, 불필요한 타입 변환을 줄여준다.

→ 데이터 클래스(Data Classes):

코틀린은 간단한 데이터 객체를 위한 data class를 제공하여, 자동으로 equals(), hashCode(), toString() 등의 메서드를 생성해준다. 이를 통해 데이터를 다룰 때 많은 반복 작업을 줄이고, 코드를 간결하게 만들어준다.

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

fun main() {
val person = Person("John", 30)
println(person)  // 자동으로 toString() 메서드가 생성됨
}

 

→ 코루틴(Coroutines):

코틀린은 비동기 프로그래밍을 더 쉽게 하기 위한 코루틴이라는 기능을 제공한다. 코루틴은 경량 스레드처럼 작동하여, 복잡한 비동기 작업을 간결하고 효율적으로 처리할 수 있게 해준다. 이는 백엔드 개발에서 네트워크 호출이나 데이터베이스 쿼리 같은 I/O 작업을 처리할 때 매우 유용하다.

import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        delay(1000L)
        println("Hello, Kotlin Coroutines!")
    }
    println("World")
}

 

→ 확장 함수(Extension Functions):

코틀린은 기존 클래스에 함수를 추가하는 방식으로 기능을 확장할 수 있다. 자바에서는 클래스를 상속하거나 유틸리티 클래스를 만들어야 했던 작업을 코틀린에서는 훨씬 간단하게 구현할 수 있다.

fun String.addHello(): String {
    return "Hello, $this"
}

fun main() {
    val name = "Kotlin"
    println(name.addHello())  // 출력: Hello, Kotlin
}

 

▶자바 코드와 코틀린 코드 비교

코틀린의 간결함을 더 잘 이해하기 위해 자바 코드와 코틀린 코드를 비교해봤다. 예를 들어, 간단한 문자열을 출력하는 코드를 작성한다고 할 때, 자바에서는 아래와 같이 코드를 작성해야 한다.

 

▽ 자바 코드:

public class Main {
    public static void main(String[] args) {
        String name = "Java";
        System.out.println("Hello, " + name + "!");
    }
}

 

반면, 코틀린에서는 같은 작업을 훨씬 간결하게 처리할 수 있다.

▽ 코틀린 코드:

fun main() {
    val name: String = "Kotlin"
    println("Hello, $name!")  // 문자열 템플릿
}

→ 위 두 예시코드를 비교해 보면, 자바에서는 문자열 결합을 위해 "Hello, " + name + "!"와 같은 방식을 사용해야 하지만, 코틀린에서는 문자열 템플릿($name)을 사용해 더 간결하게 표현할 수 있다. 코틀린의 문법이 얼마나 직관적이고 간결한지를 잘 보여준다.

 

▶ 코틀린의 예시 코드

▽ 코틀린의 null 안전성 기능을 활용한 예시

fun main() {
    var name: String? = null  // null 허용 타입
    println(name?.length)  // null이 아니면 length를 출력
}

→ 이 예시 코드는 name 변수에 null을 허용하는 타입을 선언하고, null이 아닌 경우에만 length를 출력하는 방식이다. 이를 통해 NPE 문제를 미리 방지할 수 있다.

 

▶코틀린의 장점

→ 생산성 향상:

간결한 문법과 다양한 기능을 통해 개발자의 생산성을 높여준다.

→ 자바와의 호환성:

기존 자바 프로젝트에서도 손쉽게 통합할 수 있다.

→ 안전성:

null 안전성, 스마트 캐스트 등으로 더 안전한 코드를 작성할 수 있다.

→ 다양한 플랫폼 지원:

코틀린은 JVM뿐만 아니라 자바스크립트, 네이티브 코드로도 컴파일이 가능하여 다양한 플랫폼에서 사용할 수 있다.

 

▶코틀린의 단점

→ 컴파일 속도:

코틀린은 자바보다 컴파일 속도가 느릴 수 있다. 특히 복잡한 프로젝트에서는 빌드 시간이 길어질 수 있다는 단점이 있다.

→ 새로운 학습 곡선:

자바에 익숙한 개발자라면 코틀린의 일부 개념과 문법에 적응하는 데 시간이 필요할 수 있다. 예를 들어, 코틀린의 함수형 프로그래밍 기능이나 확장 함수 개념은 자바에서 익숙하지 않은 부분이다.

→ 런타임 크기 증가:

코틀린 표준 라이브러리와 런타임 라이브러리를 포함해야 하므로, 자바만 사용하는 경우에 비해 애플리케이션의 크기가 증가할 수 있다.

 

▶정리 

코틀린은 자바 개발자들이 기존의 자바 코드와 쉽게 통합할 수 있으면서도, null 안전성 등을 제공하고 간결하면서 효율적인 코드를 작성할 수 있도록 돕는 매력적인 언어이다. 특히 안드로이드 개발을 하거나 자바의 단점을 보완한 언어를 찾는 개발자들에게 좋은 선택지가 될 수 있다. 다만, 컴파일 속도나 런타임 크기 증가, 새로운 학습 곡선이라는 단점도 존재한다.