メインコンテンツにスキップ

🔢 타입 시스템

📖 타입이란?

타입은 데이터의 종류를 나타냅니다. 숫자인지, 문자인지, 참/거짓인지 등을 구분합니다.

💡 주요 타입

정수형 (Integers)

fun main() {
val byte: Byte = 127 // 8비트: -128 ~ 127
val short: Short = 32767 // 16비트
val int: Int = 2147483647 // 32비트 (기본)
val long: Long = 9223372036854775807L // 64비트

// 일반적으로 Int 사용
val age = 25 // Int로 자동 추론
val count = 100
}

실수형 (Floating Point)

fun main() {
val float: Float = 3.14f // 32비트 (f 필수)
val double: Double = 3.14159 // 64비트 (기본)

val pi = 3.14 // Double로 자동 추론
val price = 1500.5
}

문자와 문자열

fun main() {
val char: Char = 'A' // 단일 문자 (작은따옴표)
val string: String = "Hello" // 문자열 (큰따옴표)

val name = "홍길동"
val grade = 'A'
}

불리언 (Boolean)

fun main() {
val boolean: Boolean = true // true 또는 false

val isStudent = true
val hasLicense = false

println(isStudent) // true
println(hasLicense) // false
}

🔄 타입 변환

명시적 변환

fun main() {
val intValue = 10
val doubleValue = intValue.toDouble() // 10.0

val longValue = intValue.toLong() // 10L
val stringValue = intValue.toString() // "10"

println("Int: $intValue")
println("Double: $doubleValue")
println("String: $stringValue")
}

주요 변환 메서드

fun main() {
val num = 42

println(num.toByte()) // Byte로
println(num.toShort()) // Short로
println(num.toInt()) // Int로
println(num.toLong()) // Long로
println(num.toFloat()) // Float로
println(num.toDouble()) // Double로
println(num.toString()) // String으로
println(num.toChar()) // Char로 (ASCII)
}

문자열 to 숫자

fun main() {
val str = "123"

val intNum = str.toInt() // 123
val doubleNum = str.toDouble() // 123.0

// 안전한 변환
val invalid = "abc"
val safeNum = invalid.toIntOrNull() // null 반환

println(safeNum) // null
}

📊 타입 체크와 캐스팅

is 연산자 (타입 체크)

fun main() {
val value: Any = "Hello"

if (value is String) {
println("문자열입니다: $value")
println("길이: ${value.length}") // 스마트 캐스트!
}

if (value is Int) {
println("숫자입니다")
} else {
println("숫자가 아닙니다")
}
}

as 연산자 (타입 캐스팅)

fun main() {
val obj: Any = "Kotlin"

// 안전하지 않은 캐스팅
val str1 = obj as String
println(str1) // Kotlin

// 안전한 캐스팅
val str2 = obj as? String // 성공하면 값, 실패하면 null
println(str2) // Kotlin

val num = obj as? Int // null
println(num)
}

🎯 실전 예제

계산기

fun main() {
val a = 10
val b = 3

val sum = a + b // 13
val diff = a - b // 7
val product = a * b // 30
val quotient = a / b // 3 (정수 나눗셈)
val remainder = a % b // 1 (나머지)

val division = a.toDouble() / b // 3.333...

println("합: $sum")
println("차: $diff")
println("곱: $product")
println("몫: $quotient")
println("나머지: $remainder")
println("나눗셈: $division")
}

타입 확인 게임

fun describeType(value: Any) {
when (value) {
is Int -> println("정수: $value")
is Double -> println("실수: $value")
is String -> println("문자열: $value (${value.length}글자)")
is Boolean -> println("불리언: $value")
else -> println("알 수 없는 타입")
}
}

fun main() {
describeType(42) // 정수: 42
describeType(3.14) // 실수: 3.14
describeType("Kotlin") // 문자열: Kotlin (6글자)
describeType(true) // 불리언: true
}

🤔 자주 묻는 질문

Q1. Int와 Long의 차이는?

A: 저장 범위가 다릅니다.

fun main() {
val int: Int = 2_147_483_647 // 약 21억
val long: Long = 9_223_372_036_854_775_807L // 훨씬 큼

// 일반적으로 Int로 충분
val age = 25
val year = 2024

// 아주 큰 숫자는 Long
val population = 7_900_000_000L
}

Q2. 왜 명시적 변환이 필요한가요?

A: 안전성 때문입니다!

fun main() {
val int = 10
val double = 3.14

// val result = int + double // ❌ 오류!

// 명시적 변환 필요
val result1 = int.toDouble() + double // ✅ OK
val result2 = int + double.toInt() // ✅ OK

println(result1) // 13.14
println(result2) // 13
}

Q3. Any 타입은 무엇인가요?

A: 모든 타입의 부모입니다.

fun main() {
val list: List<Any> = listOf(1, "Hello", 3.14, true)

for (item in list) {
println("$item (${item::class.simpleName})")
}
// 1 (Int)
// Hello (String)
// 3.14 (Double)
// true (Boolean)
}

🎬 마치며

Kotlin의 타입 시스템은 안전하고 명확합니다!

핵심 정리:
✅ Int - 정수 (기본)
✅ Double - 실수 (기본)
✅ String - 문자열
✅ Boolean - true/false
✅ 명시적 타입 변환 (toInt, toString 등)

다음 단계: 문자열에서 문자열 조작을 자세히 알아보세요!