4. 배열
fun array(){
val array = arrayOf(1,2,3)
val list = listOf(1,2,3)
val array2 = arrayOf(1,"d",3.4f)
val list2 = listOf(1,"d",11L)
array[0] = 3
//list[0] = 2 //immutable 값 변경 불가
val arrayList = arrayListOf<Int>() //mutable한 List
arrayList.add(10)
arrayList.add(20)
//arrayList = arrayListOf<Int>() //val 선언시 재할당 불가
}
- array와 arrayList는 mutable하다 즉 값의 수정이 가능
- list는 값의 수정이 불가능하다.
5. 반복문
fun forAndWhile(){
val students = arrayListOf("one", "two", "three", "four")
for (name in students) {
println("${name}")
}
for ((index, value) in students.withIndex()){
println("인덱스: ${index}, 값 : ${value}")
}
var sum = 0
for (i in 1..10){ //1 이상 10 이하
sum += i
}
println(sum)
sum = 0
for (i in 1 until 10){ //1 이상 10 미만
sum += i
}
println(sum)
sum = 0
for (i in 10 downTo 1){ //10 이하 1이상
sum += i
}
println(sum)
var idx = 0
while(idx < 5){
println("현재 인덱스 : ${idx}") // 0부터 4까지 출력
idx++
}
}
for ( 원소 in 리스트 ) { }
의 경우 arrayList의 원소를 순서대로 가져온다.for ((인덱스, 원소) in 리스트.withIndex()){ }
의 경우 인덱스와 원소를 동시에 가져온다- 조건의 범위 복습
1 .. 10
은1 이상 10 이하
로 1씩 증가하는 값이 저장된 arrayList와 같다.1 until 10
은1 이상 10 미만
으로 1씩 증가하는 값이 저장된 arrayList와 같다.10 downTo 1
은10 이하 1 이상
으로 1씩 감소하는 값이 저장된 arrayList와 같다.
- while문은 JAVA와 사용 방법이 같다.
6. Nuallable, Non-Nullable, ?: 엘비스 연산자, !! 빅뱅 연산자
fun nullCheck(){
var name = "Kotlin" //타입 생략시 기본적으로 Non-Nullable 타입
var nullName : String? = null //물음표를 붙여서 Nullable 타입
var nameInUpperCase = name.uppercase()
var nullNameInUpperCase = nullName?.uppercase() // "변수?" 사용으로 Null이 아니면 메소드를 호출, 아니면 Null을 대입
// ?: 앨비스 연산자, Null일경우 default값을 지정
var addName : String? = null
var fullName = name + " "+(addName?: "has not fullName")
println(fullName) // 변수?:기본값, 변수가 null일경우 기본값이 출력됨
addName = "is fun"
fullName = name + " "+(addName?: "has not fullName")
println(fullName) // 변수가 null이 아닐경우 변수가 출력됨
if (true){
// null을 바로 대입하면 컴파일이 실패하므로 if문 안에서 null 대입하는 테스트코드
addName = null
}
// !! 더블 뱅 연산자
try {
addName = addName!! //Nullable타입을 Non-Nullable 타입으로 강제로 지정함
//절대로 Null값이 들어올 가능성이 없을때만 사용해야함.
//코틀린은 Null safety한 언어지만 !!사용시 NullPointException 유발 가능성이 있음
fullName = name + " ${addName.uppercase()}"
println(fullName)
}catch (e: Exception){
println("오류: "+e)
}
var bestLanguage : String? = "kotlin"
bestLanguage?.let{ //null이 아닐때만 작동
println("최고의 언어는 ${bestLanguage}이다")
println("$it 최고") // let 람다식의 객체는 it 키워드로도 호출이 가능하다
}
bestLanguage = null
bestLanguage?.let{ //null이므로 작동이 되지 않음
println("최고의 언어는 ${bestLanguage}이다")
}
}
- 타입을 생략할 경우 Non-Nullable타입이며 타입에 ?을 붙이면 Null을 허용한다
?:
엘비스 연산자- 엘비스 프레슬리의 머리 모양을 닮은 연산자
NullableValue ?: DefaultValue
- 만약 좌항의 변수나 상수값이 Null일 경우 기본값이 대체되어 사용됨
!!
더블 뱅 연산자- 변수나 상수값이 Null이 아닐것이라 확신할 경우에만 사용
NullableValue!!
- NullPointException 유발 가능성이 있으므로 사용을 지양할것.
값?.메서드()
- 값이 Null이 아닐 경우에만 메서드가 작동하며 아니라면 Null값 취급됨.
값?.let{ }
- 값이 Null이 아닐 경우에만 let 중괄호 코드블럭{ }이 작동함.
'스터디 > 코틀린' 카테고리의 다른 글
[Kotlin] 컬렉션(List, Set등)으로 문자열 Split하기 (0) | 2024.10.18 |
---|---|
[Kotlin] String 문자열을 구분자로 분할하기 (Split) (0) | 2024.10.18 |
[Kotlin] 01. 함수, 문자열, When, If, 상수, 변수 (0) | 2024.10.15 |
[Kotlin] 스터디 - Intro (0) | 2024.10.09 |