🔤 문자열
📖 문자열이란?
**문자열(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) 타입
다음 단계: 연산자에서 다양한 연산자를 알아보세요!