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"
}