밤빵's 개발일지
[TIL]20240906 kotlin 본문
나는 백엔드 개발을 공부하는 뉴비... 코틀린이 매력적인 언어라고 들어서 흥미가 생겼다. 오늘 개발일지에서는 코틀린의 특징과 장점, 그리고 간단한 예시 코드를 통해 이 언어에 대해 알아보고싶었다!
▶코틀린(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 안전성 등을 제공하고 간결하면서 효율적인 코드를 작성할 수 있도록 돕는 매력적인 언어이다. 특히 안드로이드 개발을 하거나 자바의 단점을 보완한 언어를 찾는 개발자들에게 좋은 선택지가 될 수 있다. 다만, 컴파일 속도나 런타임 크기 증가, 새로운 학습 곡선이라는 단점도 존재한다.
'개발Article' 카테고리의 다른 글
[WIL]20240908 도메인 계층 (0) | 2024.09.08 |
---|---|
[TIL]20240907 OUTER JOIN (1) | 2024.09.07 |
[TIL]20240905 프로그래밍 언어가 많은 이유 (0) | 2024.09.05 |
[TIL]20240904 commit & merge (0) | 2024.09.05 |
[TIL]20240903 프레임워크와 라이브러리 (1) | 2024.09.04 |