Notice
Recent Posts
Recent Comments
Link
250x250
반응형
«   2025/12   »
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
관리 메뉴

백고등어 개발 블로그

코틀린 강의 2강: 변수와 자료형 본문

코틀린 강의

코틀린 강의 2강: 변수와 자료형

백고등어 2025. 10. 28. 17:37
728x90
반응형

2강: 변수와 자료형

변수 선언의 두 가지 방법

코틀린에서 변수를 선언하는 방법은 크게 두 가지입니다: val과 var입니다.

val: 불변(Immutable) 변수

val은 value의 약자로, 한 번 값을 할당하면 변경할 수 없는 읽기 전용 변수입니다. 자바의 final 키워드와 유사합니다.

val name: String = "김코틀린"
val age: Int = 25
// name = "이자바"  // 컴파일 오류! val은 재할당 불가

코틀린은 타입 추론(Type Inference)을 지원하므로 타입을 생략할 수 있습니다:

val name = "김코틀린"  // String 타입으로 자동 추론
val age = 25          // Int 타입으로 자동 추론

var: 가변(Mutable) 변수

var는 variable의 약자로, 값을 변경할 수 있는 변수입니다.

var score: Int = 85
score = 90  // 재할당 가능
score = 95  // 여러 번 변경 가능

어떤 것을 사용해야 할까?

코틀린 공식 가이드는 기본적으로 val을 사용하고, 필요한 경우에만 var를 사용할 것을 권장합니다. 불변 변수를 사용하면 코드의 안정성이 높아지고 버그가 줄어들며, 함수형 프로그래밍 스타일에 더 적합합니다.

기본 자료형

코틀린의 모든 것은 객체입니다. 자바처럼 원시 타입(primitive type)과 래퍼 클래스(wrapper class)를 구분하지 않습니다.

숫자 타입

val byteValue: Byte = 127           // 8비트, -128 ~ 127
val shortValue: Short = 32767       // 16비트
val intValue: Int = 2147483647      // 32비트 (기본)
val longValue: Long = 9223372036854775807L  // 64비트

val floatValue: Float = 3.14F       // 32비트 부동소수점
val doubleValue: Double = 3.141592  // 64비트 부동소수점 (기본)

숫자 리터럴에 언더스코어를 사용하여 가독성을 높일 수 있습니다:

val million = 1_000_000
val creditCard = 1234_5678_9012_3456L

문자와 문자열

val char: Char = 'A'
val koreanChar: Char = '가'

val text: String = "Hello, Kotlin!"
val multiLine = """
    첫 번째 줄
    두 번째 줄
    세 번째 줄
""".trimIndent()

불리언(Boolean)

val isKotlinFun: Boolean = true
val isJavaObsolete = false

문자열 템플릿

코틀린의 강력한 기능 중 하나는 문자열 템플릿입니다. $ 기호를 사용하여 변수를 문자열에 직접 삽입할 수 있습니다.

val name = "김코틀린"
val age = 25

// 단순 변수 삽입
println("제 이름은 $name입니다.")

// 표현식 삽입
println("내년이면 ${age + 1}살이 됩니다.")

// 객체의 속성 접근
println("이름의 길이는 ${name.length}글자입니다.")

자바에서 문자열 연결을 위해 + 연산자나 String.format()을 사용하는 것보다 훨씬 간결하고 가독성이 좋습니다.

Null 안전성

코틀린의 가장 큰 특징 중 하나는 Null 안전성입니다. 기본적으로 모든 변수는 null을 허용하지 않습니다.

Nullable 타입

null을 허용하려면 타입 뒤에 ?를 붙입니다:

val notNull: String = "절대 null이 아닙니다"
// notNull = null  // 컴파일 오류!

val nullable: String? = "null일 수도 있습니다"
val alsoNullable: String? = null  // OK

Safe Call 연산자

nullable 변수의 속성이나 메서드에 접근할 때는 ?. 연산자를 사용합니다:

val name: String? = null
println(name?.length)  // null이면 null 반환, 아니면 length 반환

Elvis 연산자

null일 때 기본값을 제공하려면 ?: 연산자를 사용합니다:

val name: String? = null
val displayName = name ?: "익명"  // name이 null이면 "익명" 사용
println(displayName)  // 출력: 익명

Not-null 단언

변수가 확실히 null이 아님을 개발자가 보장할 때는 !! 연산자를 사용합니다:

val name: String? = "김코틀린"
val length = name!!.length  // null이면 NullPointerException 발생

하지만 !!는 가능한 한 사용하지 않는 것이 좋습니다. 코틀린의 null 안전성 이점을 포기하는 것이기 때문입니다.

타입 변환

코틀린은 암시적 타입 변환을 지원하지 않습니다. 명시적 변환 함수를 사용해야 합니다:

val intValue: Int = 100
// val longValue: Long = intValue  // 오류!
val longValue: Long = intValue.toLong()  // OK

val doubleValue: Double = intValue.toDouble()
val stringValue: String = intValue.toString()

이는 의도하지 않은 타입 변환으로 인한 버그를 방지합니다.

상수 선언

컴파일 타임 상수는 const 키워드를 사용합니다. 최상위 레벨이나 object 내부에 선언해야 합니다:

const val MAX_COUNT = 100
const val PI = 3.14159

fun main() {
    println("최대 카운트: $MAX_COUNT")
}

마치며

이번 강의에서는 코틀린의 변수 선언 방법과 기본 자료형, 그리고 코틀린의 핵심 기능인 null 안전성에 대해 알아보았습니다. val과 var의 차이를 이해하고, nullable 타입을 안전하게 다루는 방법을 익히는 것이 중요합니다. 다음 강의에서는 연산자와 제어문에 대해 알아보겠습니다.

728x90
반응형