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

🔤 문자열

📖 문자열이란?

**문자열(String)**은 텍스트를 저장하는 타입입니다. 이름, 메시지, 설명 등 모든 텍스트 데이터를 다룹니다.

💡 문자열 생성

기본 문자열

fun main() {
val name = "홍길동"
val message = "안녕하세요!"
val empty = ""

println(name) // 홍길동
println(message) // 안녕하세요!
println(empty) // (빈 문자열)
}

여러 줄 문자열

fun main() {
// 일반 문자열 (한 줄)
val oneLine = "첫 번째 줄\n두 번째 줄"

// 여러 줄 문자열 (트리플 따옴표)
val multiLine = """
안녕하세요!
저는 홍길동입니다.
반갑습니다.
""".trimIndent()

println(multiLine)
}

🎨 문자열 템플릿

변수 삽입

fun main() {
val name = "홍길동"
val age = 25

// $ 기호로 변수 삽입
println("이름: $name") // 이름: 홍길동
println("나이: $age살") // 나이: 25살

// ${} 로 표현식 삽입
println("내년 나이: ${age + 1}살") // 내년 나이: 26살
}

복잡한 표현식

fun main() {
val price = 15000
val quantity = 3

val message = "총 가격: ${price * quantity}원"
println(message) // 총 가격: 45000원

val name = "홍길동"
val greeting = "안녕하세요, ${name.uppercase()}님!"
println(greeting) // 안녕하세요, 홍길동님!
}

🔧 문자열 연산

결합 (Concatenation)

fun main() {
val firstName = "길동"
val lastName = "홍"

// + 연산자
val fullName = lastName + firstName
println(fullName) // 홍길동

// 템플릿이 더 편함!
val fullName2 = "$lastName$firstName"
println(fullName2) // 홍길동
}

반복

fun main() {
val star = "⭐"

println(star.repeat(5)) // ⭐⭐⭐⭐⭐
println("ha".repeat(3)) // hahaha
println("-".repeat(10)) // ----------
}

📏 문자열 속성과 메서드

길이

fun main() {
val text = "Hello"

println(text.length) // 5
println(text.isEmpty()) // false
println(text.isNotEmpty()) // true

val empty = ""
println(empty.isEmpty()) // true
}

대소문자 변환

fun main() {
val text = "Hello Kotlin"

println(text.uppercase()) // HELLO KOTLIN
println(text.lowercase()) // hello kotlin
println(text.capitalize()) // Hello kotlin (Deprecated)
}

공백 제거

fun main() {
val text = " Hello "

println(text.trim()) // "Hello"
println(text.trimStart()) // "Hello "
println(text.trimEnd()) // " Hello"
}

🔍 문자열 검색

포함 여부

fun main() {
val text = "Hello Kotlin"

println(text.contains("Kotlin")) // true
println(text.contains("Java")) // false

println(text.startsWith("Hello")) // true
println(text.endsWith("Kotlin")) // true
}

찾기

fun main() {
val text = "Hello Kotlin"

val index = text.indexOf("Kotlin")
println(index) // 6

val notFound = text.indexOf("Java")
println(notFound) // -1 (없으면)
}

✂️ 문자열 분리와 자르기

분리 (split)

fun main() {
val text = "사과,바나나,포도"

val fruits = text.split(",")
println(fruits) // [사과, 바나나, 포도]

for (fruit in fruits) {
println("- $fruit")
}
// - 사과
// - 바나나
// - 포도
}

자르기 (substring)

fun main() {
val text = "Hello Kotlin"

println(text.substring(0, 5)) // Hello
println(text.substring(6)) // Kotlin

// 범위로
println(text.substring(0..4)) // Hello
}

🎯 실전 예제

이메일 검증

fun main() {
val email = "hong@example.com"

val isValid = email.contains("@") && email.contains(".")

if (isValid) {
println("올바른 이메일입니다")
} else {
println("이메일 형식이 올바르지 않습니다")
}
}

전화번호 포맷

fun main() {
val phone = "01012345678"

val formatted = "${phone.substring(0, 3)}-${phone.substring(3, 7)}-${phone.substring(7)}"
println(formatted) // 010-1234-5678
}

단어 카운터

fun main() {
val text = "Hello Kotlin World"

val words = text.split(" ")
println("단어 개수: ${words.size}") // 단어 개수: 3

for ((index, word) in words.withIndex()) {
println("${index + 1}. $word")
}
// 1. Hello
// 2. Kotlin
// 3. World
}

🤔 자주 묻는 질문

Q1. == vs equals()

A: Kotlin에서는 ==가 내용 비교입니다!

fun main() {
val a = "Hello"
val b = "Hello"

println(a == b) // true (내용 비교)
println(a.equals(b)) // true (같은 의미)

// Java의 ==는 참조 비교
// Kotlin은 ==가 내용 비교!
}

Q2. 문자열은 불변인가요?

A: 네! String은 불변입니다.

fun main() {
var text = "Hello"
println(text) // Hello

text = text.uppercase() // 새로운 문자열 생성
println(text) // HELLO

// 원본은 변경되지 않고, 새로운 문자열이 생성됨
}

Q3. null 처리는?

A: 안전한 호출 연산자 사용!

fun main() {
val text: String? = null

// println(text.length) // ❌ 오류!

println(text?.length) // null (안전)
println(text?.length ?: 0) // 0 (기본값)
}

🎬 마치며

Kotlin의 문자열은 강력하고 사용하기 쉽습니다!

핵심 정리:
✅ 문자열 템플릿 ($변수, ${표현식})
✅ 편리한 메서드 (uppercase, split, trim 등)
✅ == 로 내용 비교
✅ 불변(immutable) 타입

다음 단계: 연산자에서 다양한 연산자를 알아보세요!