안녕하세요, 소프트웨어 공장에 오신 것을 환영합니다. 오늘은 Kotlin 언어의 기본 문법과 주요 특징, 그리고 Java와의 차이점을 다루어 보려고 합니다. Kotlin은 현대적인 개발을 위해 설계된 프로그래밍 언어로, 특히 Android 개발자들에게 큰 인기를 끌고 있습니다. 이번 포스팅에서는 기본 문법부터 변수와 함수에 이르기까지 다양한 주제를 살펴볼 것입니다.
Kotlin의 특징과 Java와의 차이점
1. 간결함과 안전성
Kotlin은 간결한 코드 작성을 가능하게 하여 개발자가 더 적은 코드를 작성할 수 있게 합니다. 예를 들어, Java에서 반복되는 null 검사를 Kotlin에서는 훨씬 간단하게 처리할 수 있습니다.
// Java 코드
String text = null;
if (text != null) {
System.out.println(text.length());
}
// Kotlin 코드
val text: String? = null
println(text?.length)
위의 예시에서 보이듯이 Kotlin의 null 안전성을 활용하여 간단하게 null 검사를 할 수 있습니다. ?.
연산자를 사용하여 null 검사와 접근을 한 줄로 처리합니다.
2. 스마트 캐스팅
Java에서는 객체를 특정 타입으로 캐스팅할 때마다 명시적으로 캐스팅을 해줘야 하지만, Kotlin은 타입 검사 후 자동으로 스마트 캐스팅을 합니다.
fun printLength(obj: Any) {
if (obj is String) {
// 여기서 obj는 자동으로 String 타입으로 캐스팅됩니다
println(obj.length)
}
}
이러한 스마트 캐스팅은 코드의 가독성을 높이고 오류의 가능성을 줄여줍니다.
3. 데이터 클래스
Kotlin에서는 data class라는 특별한 클래스가 있습니다. 이를 통해 데이터를 담는 클래스의 기본적인 기능을 자동으로 생성해 줍니다.
data class User(val name: String, val age: Int)
val user = User("John", 25)
println(user) // User(name=John, age=25)
data
키워드만 추가하면 equals(), hashCode(), toString() 등의 메서드가 자동으로 만들어져 코드 작성의 효율성을 높여줍니다.
4. Java와의 상호 운용성
Kotlin은 Java와 100% 호환이 되므로 기존 Java 코드를 그대로 사용할 수 있습니다. 이를 통해 Android 프로젝트나 기존 Java 프로젝트에 Kotlin을 쉽게 도입할 수 있습니다.
// Kotlin에서 Java 클래스 사용
val list = ArrayList<String>()
list.add("Hello")
list.add("World")
println(list)
Java의 모든 라이브러리를 Kotlin에서 자연스럽게 사용할 수 있습니다.
변수와 데이터 타입
Kotlin의 변수 선언은 Java와 다소 다른데, 기본적으로 두 가지 키워드를 사용합니다: val과 var.
- val: 변경 불가능한 변수, 즉 상수를 의미합니다. 선언 이후 값을 다시 변경할 수 없습니다.
- var: 변경 가능한 변수로, 언제든지 값을 변경할 수 있습니다.
val name: String = "Alice"
var age: Int = 30
age = 31 // var이므로 값 변경 가능
// name = "Bob" // 컴파일 오류, val은 값을 변경할 수 없음
Kotlin은 타입 추론을 지원하므로 타입을 명시적으로 적지 않아도 됩니다.
val greeting = "Hello, Kotlin!" // String 타입으로 추론됨
var number = 42 // Int 타입으로 추론됨
Kotlin은 또한 Java의 기본 데이터 타입을 그대로 지원합니다. 예를 들어 Int, Double, Boolean 등은 Java의 int, double, boolean과 대응됩니다.
함수 정의 및 사용법
Kotlin에서 함수를 정의하는 방법은 다음과 같습니다.
fun add(a: Int, b: Int): Int {
return a + b
}
위 코드에서는 fun 키워드를 사용하여 함수를 정의합니다. 함수의 매개변수와 반환 타입을 명확하게 지정할 수 있습니다. Kotlin에서는 반환 타입을 추론할 수도 있으며, 한 줄로 간단하게 작성할 경우 =
기호를 사용하여 표현식을 반환할 수 있습니다.
fun subtract(a: Int, b: Int) = a - b
위의 코드는 subtract 함수를 간결하게 표현한 것입니다. =
뒤에 오는 표현식이 자동으로 반환됩니다.
또한, 디폴트 매개변수와 이름 있는 인자를 통해 함수를 더 유연하게 사용할 수 있습니다.
fun greet(name: String = "Guest") {
println("Hello, $name!")
}
greet() // Hello, Guest!
greet("Alice") // Hello, Alice!
디폴트 매개변수를 사용하여 호출 시 값을 지정하지 않으면 기본값이 사용됩니다. 이처럼 Kotlin에서는 함수 정의를 간결하고 유연하게 할 수 있습니다.
예제: 간단한 계산기 프로그램
이번에는 지금까지 배운 내용을 활용하여 간단한 계산기 프로그램을 만들어 보겠습니다.
fun main() {
println("Enter first number: ")
val num1 = readLine()?.toDoubleOrNull() ?: return
println("Enter second number: ")
val num2 = readLine()?.toDoubleOrNull() ?: return
println("Choose an operation (+, -, *, /): ")
val operation = readLine()
val result = when (operation) {
"+" -> add(num1, num2)
"-" -> subtract(num1, num2)
"*" -> multiply(num1, num2)
"/" -> divide(num1, num2)
else -> {
println("Invalid operation")
return
}
}
println("Result: $result")
}
fun add(a: Double, b: Double) = a + b
fun subtract(a: Double, b: Double) = a - b
fun multiply(a: Double, b: Double) = a * b
fun divide(a: Double, b: Double): Double {
if (b == 0.0) {
println("Cannot divide by zero")
return 0.0
}
return a / b
}
위 프로그램은 두 개의 숫자를 입력받고 사용자가 선택한 연산을 수행한 뒤 결과를 출력합니다. when 표현식을 사용하여 사용자가 선택한 연산에 따라 다른 함수를 호출하는 방식으로 간결하고 가독성이 높습니다.
마무리
오늘은 Kotlin의 기본 문법과 주요 특징, Java와의 차이점, 그리고 변수와 함수 정의 방법에 대해 배웠습니다. Kotlin은 간결하고 안전한 코드를 작성할 수 있도록 다양한 기능을 제공하며, 특히 Java와의 높은 호환성 덕분에 기존 Java 개발자들도 쉽게 접근할 수 있습니다.
앞으로 더욱 다양한 Kotlin의 고급 기능을 다루며 Kotlin의 매력을 알아가는 시간을 가져보겠습니다.
'kotlin' 카테고리의 다른 글
Kotlin 배열(Array), 리스트(List), 맵(Map) (0) | 2024.12.16 |
---|---|
Kotlin 클래스와 객체지향 프로그래밍 (0) | 2024.12.15 |
Kotlin 문자열 처리 - 문자열 템플릿과 함수 활용하기 (0) | 2024.12.14 |
Kotlin 언어 제어문[ if, when, switch, for, while , do-while ] 가이드 (0) | 2024.12.13 |
Kotlin 소개 및 설치 (0) | 2024.12.09 |