본문 바로가기
App/Android Kotlin

Kotlin(3) - 기본 문법_예시

by SeleniumBindingProtein 2022. 2. 5.
728x90
반응형

<main>

3) String Template

package com.example.bmkpractice

fun main(){
    //3. String Template
    //변수를 사용하고 싶으면 $표시를 사용해야 함
    val name = "BMK"
    val lastName = "Kim"
    println("my name is ${name + lastName} I'm 23")
    //주의사항 - 띄워쓰기 혹은 대괄호를 사용해서 변수를 구분해야됨
    // println("my name is $nameI'm 23") -> $nameI까지 읽어버림
    // println("my name is ${name}I'm 23")
    // println("my name is $name I'm 23")

    println("is this true? ${1==0}")
    println("this is 2\$a")

}

<결과값>

1) 함수

//1.함수

fun helloWorld() : Unit{ // void = Unit 같은 개념, 굳이 사용안해도 됨
    println("Hello World")
}
                        //아무것도 리턴하지 않는 경우에는 생략가능하지만, 리턴하는 경우 생략하면 안된다.
fun add(a: Int, b : Int) : Int{ //변수타입은 대문자로 사용해야 되고, 항상 뒤에 적어야 함
    return a+b
}

2) var vs val

//2. val vs var
//val = value

fun hi(){
    val a : Int = 10
    var b : Int = 9
    // a = 100 사용 불가
    b = 100 // 사용 가능

    val c = 100
    var d = 100

    var name : String = "BMK"
    var name2 = "BMK" //: String 생략 가능
}

<main>

package com.example.bmkpractice

fun main(){
    checkNum(1)
    forAndWhile()
    nullcheck()
}

4) 조건식

//4. 조건식
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) : Unit {
    //Statment로 사용
    when(score){
        0 -> println("this is 0")
        1 -> println("this is 1")
        2,3 -> println("this is 2 or 3")
    }
    var b = when(score){
        1 -> 1
        2 -> 2
        else -> 3
    }
    println("b : ${b}")
    //Expression으로 사용, 모든 when은 Expression으로 사용됨
    when(score){
        in 90..100 -> println("you ar genius")
        in 10..80 -> println("not bad")
        else -> println("okay")
    }
}

<결과값>


5) Array & List

// Expression vs Statement
//5. Array와 List
// Array => 기본적으로 사이즈가 정해져 있음, 메모리가 할당되어 있음
// List => 1. List, 2. MutableList(수정 가능)

fun array() {
    val array: Array<Int> = arrayOf(1, 2, 3)
    val list = listOf(1, 2, 3)

    val array2: Array<Any> = arrayOf(1, "d", 3.4f)
    val list2: List<Any> = listOf(1, "d", 11L)

    array[0] = 3
    var result = list.get(0)

    val arrayList = arrayListOf<Int>()
    arrayList.add(10)
    arrayList.add(20)

    // arrayList = arrayListOf() -> 새로운 객체를 생성하는 경우, 다시 할당될 수 없음
}

<결과값>


6) 반복문

//6. 반복문 => For / While

fun forAndWhile(){
    val students = arrayListOf("a","b","c","d")

    for (name in students){
        println("${name}")
    }

    for((index, name) in students.withIndex()){
        println("${index+1}번째 학생 : ${name}")
    }

    //1부터 10까지 반복
    var sum : Int = 0
    for(i in 1..10){
        sum += i
    }
    println(sum)

    //두 칸씩
    var sum2 : Int = 0
    for(i in 1..10 step 2){
        sum += i
    }
    println(sum2)

    //10부터 1까지
    var sum3 : Int = 0
    for(i in 10 downTo 1){
        sum3 += i
    }
    println(sum3)

    //1부터 99까지
    var sum4 : Int = 0
    for(i in 1 until 100){
        sum4 += i
    }
    println(sum4)

    //while
    var index = 0
    while (index < 10){
        println("current index : ${index}")
        index ++
    }
}

<결과값>


7) Nullable/NonNull

//7. Nullable / NonNull

fun nullcheck(){
    //NPE : Null Point Exception

    var name : String = "a"
    //null을 넣고 싶으면 타입에 ?를 넣어야 함
    var nullName : String? = null
    var nameInUpperCase : String = name.toUpperCase()

    var nullNameInUpperCase :String? = nullName?.toUpperCase()

    // 엘비스 연산자 => ?:
    // default 값을 주고 싶을 때 사용
    val lastName : String? = null
    val fullName : String = name+" " + (lastName?: "No lastName")
    println(fullName)


}

//!!연산자 => null 아닌 거 보증할 때
fun ignoreNulls(str : String?){
    val mNotNull : String = str!!
    //?를 넣지 않아도 null이 아니라고 나타냄
    //NPE 일으키기 때문에 사용을 지양해야 함..
    val upper : String = mNotNull.toUpperCase()

    //let 함수
    //자신의 receiver 객체를 람다식 내부로 옮겨 실행시키는 함수
    var email : String? = "email@gmail.com"
    email?.let {
        println("my email is ${email}")
    }
}

<결과값>


8. class 

package com.example.bmkpractice

/*
    @author BMK
    @email BMK@gmail.com
    @created 2022-02-01
    @desc
 */

open class Human (){
    //1
    fun eatingCake(){
        println("this is so Yummy~~")
    }
    //2
    val name = "BMK"
    //7-1
    fun singASong(){
        println("lalala")
    }
    //7-2
    open fun singSong(){
        println("lalala2")
    }
}

//3 - constructor 생략 가능
class Human2 constructor(val name : String){
    fun star(){
        println("OH~~!!")
    }
}

//4 - default 값을 주어서 오류가 안생김
class Human3(val name : String = "Anonymous"){
    //5 - 코드블럭을 넣고 싶을 땐, init 함수를 사용(주생성자)
    //init 먼저 실행
    init {
        println("new human has been born!!")
    }

    //6 - 부생성자 : constructor 이용
    constructor(name : String, age : Int): this(name){
        println("my name is ${name}, ${age} years old")
    }

    fun star2(){
        println("OH~~!!")
    }
}

//7 - 코틀린은 final class 개념을 가져서 같은 파일 내에 있어도 함
// open을 통해서 상속을 진행해야 함
// overriding 개념(java)
// 상속은 java와 마찬가지로 하나 밖에 못함 
class Korean : Human(){
    //7-2 -> 메서드에서도 open을 해줘야 함
    override fun singSong(){
        super.singSong()
        println("라라라")
        //Human에서 name을 받아옴
        println("my name is : ${name}")
    }
}

fun main(){
    //1
    val human = Human()
    human.eatingCake()
    //2
    println("this human's name is ${human.name}")
    //3
    val human2 = Human2( "minsoo")
    human2.star()
    println("this human's name is ${human2.name}")
    //4
    val stranger = Human3()
    println("${stranger.name}")
    //6
    val mom = Human3("Yang", 52)
    //7-1 -> lalala 출력
    val korean = Korean()
    korean.singASong()
    //7-2 -> 라라라 출력
    val korean2 = Korean()
    korean.singSong()
    //super 사용하면 lalala2, 라라라 둘다 출력 가능
}

<결과값>

728x90
반응형

'App > Android Kotlin' 카테고리의 다른 글

Kotlin(6) - UI  (0) 2022.02.09
Kotlin(5) - 심리테스트 앱 만들기  (0) 2022.02.08
Kotlin(4) - 고급 문법_예시  (0) 2022.02.07
Kotlin(2) - 기본구문  (0) 2022.02.04
Kotlin(1) - 안드로이드 스튜디오 설치 및 환경설정  (0) 2022.02.04

댓글