Kotlin
Kotlin 기초 2 - 조건식, 반복문, nullable, class, 생성자
softPattern
2023. 9. 5. 17:45
String Template
- ${}를 사용하여 string 문자열 내에서 변수 사용 가능
fun test1(): String {
val text : String = "hello"
return("he+llo=${text}")
}
=> he+llo=hello
조건식
- if
- when (switch 대신 사용)
fun checkNum(score: Int) {
when(score) {
0 -> println("0입니다")
1 -> println("1입니다")
2,3 -> println("2혹은 3입니다.")
else -> println("0~3 이외 숫자입니다.") //생략가능
}
var b: Int = when(score) {
1->1
2->2
else -> 3 //생략 불가능 !
}
println("b는 ${b}입니다."
when(score) {
in 90..100 -> println("최우수입니다.")
in 80..89 -> println("우수입니다.")
}
}
Expression vs Statement
- Expression: return이 존재하는 함수
- Statement: return이 없는 코드
Array vs List
//Array
val array : Array<Int> = arrayOf(1,2,3)
val array2 : Array<Any> = arrayOf(1,"a", 3, "asd")
array[0] = 10 //수정가능
//List
val list : List<Int> = listOf(1,2,3)
val list2 : List<Any> = listOf(1,"bb",34)
//list[0] =10 수정불가
var a = list.get(0) //조회만 가능
//ArrayList
val arrayList : ArrayList<Int> = arrayListOf<Int>()
arrayList.add(10)
- Array
- 크기가 지정된(메모리가 할당된) 배열
- 수정 가능(지정된 크기 내에서)
- List(immutable)
- 수정 불가
- ArrayList(mutable)
- 수정 가능
- val로 선언하여 사용할 수 있는 이유 !
- 주소 자체를 변경하는 것이 아니라, 'arrayList.add()'처럼 사용하는건 값만 변경되므로 val로 선언할 수 있다.
- but, 'arrayList = arrayListOf()' 처럼 주소값 자체를 초기화 해버리면 안된다.
반복문
- for
fun forAndWhile(){
val students : ArrayList<String> = arrayListOf("김","백","하","최")
for(name:String in students){
println("${name}")
}
//1~5까지
for(i:Int in 1..5){
var a : Int = 10
println(a+i)
}
//1~4까지
for(i:Int in 1 until 5){
var a : Int = 10
println(a+i)
}
//1,3,5
for(i:Int in 1..5 step 2){
var a : Int = 10
println(a+i)
}
//10부터 1씩 다운
for(i:Int in 10 downTo 1){
var a : Int = 10
println(a+i)
}
}
- while
var index = 0
while(index < 10) {
println(${index})
index++
}
Nullable / NonNull
- Kotlin은 컴파일시부터 Null Check를 수행해주기 때문에 Null Pointer Exception 방지가 가능하다.
- 만약 Null이 가능한 변수를 지정하고 싶으면 '?'를 데이터타입에 붙여주면 된다.
- 만약 Null일 경우에 default값을 직접 지정해주고 싶을때는 '?:~'를 붙여주면 된다.
- !! : 어떠한 경우에도 null이 들어오지 않을 것이라는 것을 명시
fun nullCheck(){
var name: String = "yangsoo"
//var what: String = null
var what2: String? = null
var lastName : String? = null
var fullName : String = name + " " + lastName
var fullNameWithDefault :String = name+" "+(lastName?:"kim")
println("1.fullName? ${fullName}")
println("2.fullName? "+fullName)
println("3.fullName? "+fullNameWithDefault)
}
=>
1.fullName? yangsoo null
2.fullName? yangsoo null
3.fullName? yangsoo kim
- a?.let{ } : a가 Null이 아니라면 {~}를 실행하라 !
val email : String? =null
email?.let{
println("my email is ${email}")
}
=> 아무것도 출력되지 않음.
val email : String? = "abd@naver.com"
email?.let{
println("my email is ${email}")
}
=> my email is abd@naver.com
Class
- class의 인스턴스 생성시 new 키워드가 필요없다.
package study
class Human {
val name : String = "kim yang soo"
fun eating(){
println("eacting something")
}
}
fun main(){
val human :Human = Human() //new 키워드 필요없음
human.eating()
println("Human name is ${human.name}")
}
=>
eacting something
Human name is kim yang soo
생성자
- Java의 생성자와 다르다.
class Human {
//Java의 constructor는 대충 이런식...
Human(name2){
this.name = name2
}
var name : String = "kim yang soo"
}