경험의 기록

코틀린 3강으로 끝내기 - 1편 기본 문법을 보고 배운 내용을 정리하였습니다.

www.youtube.com/watch?v=IDVnZPjRCYg&list=PLxBf91VkJLZ_XosvQ5yJnJB3k3iho2XbV&index=1


함수 선언

fun main(){

} // fun 함수이름 : 반환형 형태로 선언

fun helloWorld() : Unit{
    println("Hello world!");
} // Unit 생략 가능

fun add(a:Int, b:Int) : Int{
    return a+b;
} // Int형을 반환하는 add함수, 변수 자료형은 뒤에 선언한다.(대문자)

 

변수 (val, var)

fun hi(){
    val a : Int = 10 // 한번 정해주면 변경불가
    var b : Int = 9  // 변경가능

    b = 100

    val c = 100
    var d = 100 // 자료형 생략 가능

    var name = "Han"
}

 

String Template

fun main(){
    val name = "Yeop"
    val lastName = "Han"
    println("my name is ${name + lastName}. ")
    // ${}으로 변수 사용 가능
    println("20\$a")
    // $를 사용하고 싶다면 \$
}

 

조건식

fun maxBy(a: Int, b:Int) : Int{
    if(a>b){
        return a
    } else{
        return b
    }
}  // 더 큰 수를 출력하는 함수

fun maxBy2(a: Int, b:Int ) = if(a>b) a else b
// 코틀린에서는 저런 함수형태를 간단히 표현할 수 있음

fun checkNum(score : Int){
    when(score){
        0->println("this is 0")
        1->println("this is 1")
        2,3->println("this is 2 or 3")
        else->println("I don't know")
    } // when : 다른 언어에서 switch 문과 같은 역할, else 생략가능

    var b = when(score){
        1->1
        2->2
        else->3 // else 생략 불가
    } // 변수 값을 지정하는데도 사용 가능

    when(score){
        in 90..100 -> println("very good")
        in 10..80 -> println("not bad")
        else-> println("good")
    } // 범위 형태로도 표현 가능
}

 

Array and List

// Array : 크기가 할당되있음 , 수정 가능
// List 1. List : 수정 불가 / 2. MutableList : 수정 가능
fun array(){
    val array = arrayOf(1,2,3) // array 초기화 (arrayOf)
    val list = listOf(1,2,3) // list 초기화 (listOf)
    var array_ = Array(
        2,{0}
    )  // 크기만 지정해서 배열을 생성하고 싶을 때   

    array[0] = 3 // array 수정 가능
    //list[0] =2 --> 불가능

    val arrayList = arrayListOf<Int>() // Mutable , 크기 자동
    arrayList.add(10);
    arrayList.add(20);
    arrayList[0] = 20;
}

 

반복문 ( for, while )

fun forAndWhile(){

    val students = arrayListOf("kim","han","moon","park")

    for(name in students){
        println("${name}")
    }
    // ~ in ~ 의 형태로 for문 사용

    var sum = 0
    for(i in 1..10) // 1~10 더하기
    // for(i in 1..10 step 2) = 2씩 띄어서
    // for(i in 10 downTo 1) = 10부터 1감소
    // for(i in 1 until 10) = 1~9 더하기
    {
        sum+=i
    }
    println(sum)

    for((index,name) in students.withIndex()){
        println("${index+1} 번째 학생 : ${name}")
    } // 인덱스와 원소 함께 표현 (withIndex)

    var index = 0
    while(index < 10){
        println("current index : ${index}")
        index++
    } // 다른 언어의 while 과 동일

}

 

Nullable / NonNull

fun nullcheck(){

    var name : String = "Yeop"
    // NULL을 허용하지 않는다 ( name = NULL -> 오류)

   var nullName : String? = null
    // ?를 넣으면 NULL 허용

    var nameInUpperCase = name.toUpperCase()
    var nullNameUpperCase = nullName?.toUpperCase()
    // NULL이 아니면 toUpperCase를 하고 NULL이면 NULL 반환

    val lastName : String? = null
    val fullName : String = name + " "+ (lastName?: "No lastName")
    // ?: NULL이면 그 뒤에 명시한 것 반환 (lastName이 null이라면 No lastName)
    println(fullName)
}

fun ignoreNulls(str : String?){
    val mNotNull : String = str!! // !! -> 확실하게 NULL이 아니다.
    val upper = mNotNull.toUpperCase() // NULL이 아니므로 사용가능

    val email : String?= "abc@naver.com"
    email?.let{
        println("my email is ${email}")
    } // NULL이 아니라면 함수 안으로 옮겨준다.
}

 

클래스 (class) 와 상속

open class Human constructor(val name : String = "Anonymous"){
    // 생성자 (constructor), constructor 생략가능

    constructor(name : String, age:Int) : this(name){
        println("my name is ${name}, ${age}years old.")
    } // 보조 생성자 (오버로딩)

    init {
        println("New human has been born.")
    } // 객체가 만들어질 때 호출 (가장 먼저 생김)

    fun eatingCake(){
        println("Yummy")
    }

    open fun singASong(){
        println("lalala")
    }
}

class Korean : Human(){
    // 상속시 extends 말고 : , 부모에서 open 해야 상속가능 ( 기본 final )

    override fun singASong(){
        super.singASong() // 부모것 사용
        println("라라라")
    } // 오버라이딩 , 부모에서 open 해야 가능

}
fun main(){
    val human = Human("Yeop") // new 필요 X
    val stranger = Human() // 디폴트값 지정시
    human.eatingCake()
    println("name is ${human.name}")
    println("name is ${stranger.name}")
    val man = Human("P",25)

    val korean = Korean()
    korean.singASong()
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading