컴굥일지

[Kotlin] 코틀린 기초 본문

프로그래밍 강의/Kotlin

[Kotlin] 코틀린 기초

gyong 2022. 12. 28. 01:19
반응형

코틀린 기초

  • 안드로이드 스튜디오 실행 : ctrl + shift + F10
  • 안드로이드 스튜디오 자동 정렬 : ctrl + alt + L

변수 그리고 val과 var의 차이점

  • 앱 실행 시간 동안 정보 저장 방법에 가장 기본인 코드
// fun : 함수를 만드는 키워드
fun main() { // main() 앱 시작점을 알려주는 특별한 함수(그래서 왼족에 스타트버튼이 존재한다)
    // body에 실행하고 싶은 코드를 넣음

    // var는 수정이 가능하다. => 변수(mutable variable)
    var myName = "Jini"
    myName="Kari"
    print("Hello " + myName) //출력

    // val은 나중에 값을 바꿀 수 없다. => 상수(immutable variable)
    val myAge=22
    print(myAge)
}

숫자 데이터 유형

  • 주석: 컴파일러가 무시하는 코드
// TODO: ~~~
// 위와 같이 쓰면 안드로이드 스튜디오에서 저 주석의 위치를 쉽게 찾을 수 있음

/*
주석을 여러 줄로
쓸 수도 있다.
*/
  • 코틀린은 타입 언어이다.
    => 모든 변수는 특정 타입이 있다.
fun main() {
    // type : string
    val myName = "Jini"
    // type : int 32 bit
    var myAge = 22 // 자동으로 타입을 결정해주는 것을 "타입 추론"이라고 한다
    // 적합한 값을 집어 넣는다면, 데이터 타입을 따로 지정하지 않아도 된다.
    //var myHeight  <-- 이렇게만 쓰면 에러난다. 타입을 추론할 수가 없기 때문
    var myHeight: Int // 이렇게는 가능


    // Integer TYPES : Byte (8 bit), Short (16 bit),
    // Int (32 bit), Long (64 bit)
    val myByte: Byte = 13 // myByte의 타입을 Byte로 지정함
    val myShort: Short = 125
    val myInt: Int = 123123123
    val myLong: Long = 123_039_812_309_487_120

    // Floating Point number Types : Float (32 bit), Double (64 bit)
    val myFloat: Float = 13.37F // Float는 값의 마지막에 F를 붙여줘야 한다.
    //대체로 부동 소수정 값은 double 타입을 원한다고 생각하기 때문
    val myDouble: Double = 3.14159265358979323846
}

데이터 유형 bool, char, string

fun main() {
    // Booleans 타입은 논리 변수로, true/false 만을 값으로 갖는다
    var isSunny: Boolean = true // 굳이 타입을 명시하지 않아도 boolean인 것을 안다
    isSunny = false

    // Characters : 문자 하나를 초과할 수 없다.
    val letterChar = 'A'
    val digitChar = '1'

    // Strings
    // string은 char가 연속된 것이다.
    val myStr = "Hello World"
    var firstCharInStr = myStr[0]
    var lastCharInStr = myStr[myStr.length - 1]

    print(firstCharInStr+"  "+ lastCharInStr)
}

String interpolation (문자열 보간법)

  • string에 $ 기호를 사용하여 변수를 넣는 것
  • 중괄호를 사용하여 문자열 안에 식을 넣을 수도 있다
  • $를 문자열에 쓰고 싶으면 앞에 백슬래쉬를 붙이면 된다
fun main() {
    // Strings
    val myStr = "Hello World"
    var firstCharInStr = myStr[0]
    var lastCharInStr = myStr[myStr.length - 1]

    print("first char: $firstCharInStr, last char: $lastCharInStr\ntotal length is ${myStr.length}")

    // 변수 뒤에 띄어쓰기 없이 바로 적고 싶을 때 - 중괄호 사용
    val name="Jini"
    print("${name}Hello")
}

산술 연산자와 유형의 중요성

fun main() {
    // Arithmetic operators (+, -, *, /, %)
    var result = 5 + 3
    result %= 2
    print(result)
    print("\n")

    val a=5
    val b=3
    var result2=a/b
    print(result2) // 결과는 1 <- 정수를 정수로 나누어서
    print("\n")
    print(a.toDouble()/b)
    print("\n")
    // result2=a.toDouble()/b  <-- 에러남. result2가 Int 타입이기 때문
    var result3:Double
    result3=a.toDouble()/b
    print(result3)
}

비교 연산자

fun main() {
    // Comparison operators (==, !=, <, >, <=, >=)
    val isEqual = 5==3 // 참 거짓이 결과로 나온다
    println("5 == 3 $isEqual")
    println("5 > 3 ${5>3}")
    println("-5 > 3 ${-5>3}")
    println("5 != 5 ${5!=5}")
}

증감 연산자

fun main() {
    // Assignment operators (+=, -=, *=, /=, %=)
    var myNum = 5
    myNum+=3
    myNum*=2
    println(myNum) //16

    // Increment & Decrement operators (++. --)
    println("myNum++ :${myNum++}")  //16
    println(myNum)                  //17
    println("++myNum :${++myNum}")  //18
    println(myNum)                  //18
    println("myNum-- :${myNum--}")  //18
    println(myNum)                  //17
    println("--myNum :${--myNum}")  //16
    println(myNum)                  //16
}

If문

fun main() {
    var heightPerson1 = 170
    var heightPerson2 = 189

    if (heightPerson1 > heightPerson2) {
        println("use raw force")
    } else if (heightPerson1 == heightPerson2) {
        println("use your power technique 1337")
    } else {
        println("use technique")
    }

    val age = 55
    if (age > 30) println("you are over 30")
}

식으로 된 If문

fun main() {
    val age = 16
    val drinkingAge = 21

    val currentAge =  if (age >=drinkingAge){
        println("Now you may drink in the US")
        drinkingAge
    }else{
        println("You can't drink")
        -100
    }

    print("current age is $currentAge")
}

When식

  • C, C++, JAVA의 switch문
fun main() {
    var season = 3
    when (season) {
        1 -> println("Spring") // 숫자와 화살표 사이에 공백이 필요함
        2 -> println("Summer")
        3 -> {  // 실행될 코드가 2줄 이상일 때
            println("Fall")
            println("Autumn")
        }
        4 -> println("Winter")
        else -> println("Invalid Season")  // 위의 조건에 모두 해당되지 않을 때
    }
    println()

    var month = 3
    when (month) {
        in 3..5 -> println("Spring")  // ..을 사용해서 범위를 정할 수 있음
        in 6..8 -> println("Summer")
        in 9..11 -> println("Fall")
        // in 12 downTo 2 -> println("Winter") <-- 12월부터 2월까지 거꾸로 범위가 잡힘
        12, 1, 2 -> println("Winter")
        else -> println("Invalid Season") // else가 없어도 돌아는 감
    }
    println()

    var age = 5
    when (age) {
        !in 0..20 -> println("You can drink") // 느낌표를 붙일 수도 있음
        in 18..20 -> println("You can vote")
        16, 17 -> println("You can drive")
        else -> println("You are too young")
    }

    var x: Any = 13.37
    when (x) {
        is Int -> println("$x is Int") // type을 확인할 때 is를 사용함
        !is Double -> println("$x is Double") // 느낌표를 붙일 수도 있음
        is String -> println("$x is String")
        else -> println("$x is none of the above")
    }
}

식으로 된 When

fun main() {
    val x: Any = 13.37

    val result = when (x) {
        is Int -> "is an Int"
        !is Double -> "is not Double"
        is String -> "is a String"
        else -> "is none of the above"
    }

    print("$x $result")
}

While 반복문

fun main() {
    var x=1
    while(x<=10){ //조건이 참일 때 반복문 탈출
        if(x%2==0) continue
        println(x)
        x++
    }

    while (true){
        if(x>=20) break

        println("$x")
        x+=2
    }
}

Do While 반복문

fun main() {
    var x=15
    do { // do{} 부분을 실행하고 조건체크를 함
        println("$x")
        x++
    }while (x<=10)
    println("The End")
}

For 반복문

fun main() {
    for(num in 1..10){
        print("$num ") //1~10
    }
    println("")
    for(i in 1 until 10){ // for(i in 1.until(10))
        print("$i ") //1~9
    }
    println()
    //아래는 2칸씩
    for (i in 100 downTo 90 step 2){ // for(i in 100.downTo(90).step(2))
        print("$i ")
    }
    println()
}

함수 - 매개변수 - 인자 - return

// Method : function within a class
/* 객체지향 프로그래밍 언어가 아니면 function이라고 부르지만,
객체 지향에서는 class 안에 생성되면 method, 아니면 function이라고 부름 */

fun main() {
    // main 함수가 시작점이므로, 이 안에 코드가 없으면 아무 일도 일어나지 않는다.
    myFunc()
    println(addUp(1234567890,987654321)) // 여기서는 "인자"라고 부름 (argument)
}

fun myFunc(){
    println("called from myFunc")
}

//함수 선언 시에는 "매개변수"라고 부름 (parameter)
fun addUp(a:Int, b:Int):Long{ // int형 매개변수 2개를 받아, long형 값을 return함
    return a+b.toLong() // (a+b).toLong()은 안 됨
}

코틀린의 Nullable

fun main() {
    var name :String ="Jini"
    //name=null  <-- 이거는 불가능함. null타입이 아닌 string은 null을 입력할 수 없다

    var nullableName:String?="Jini" // 마지막에 물음표를 붙이면 nullable하게 된다
    nullableName=null

    var len=name.length
    //var len2=nullableName.length  <-- nullable하지 않은 string만 length를 사용할 수 있음
    var len2=nullableName?.length //이런식으로 작성할 수 있음 (아니면 조건문으로 작성)
    // null이 아니면 길이가 들어가고, 아니면 null이 들어간다
    println(len2)
}

Nullable - 엘비스 연산자 - Not Null 단언 연산자

fun main() {
    var nullableName: String? = "Jini" // 마지막에 물음표를 붙이면 nullable하게 된다
    nullableName = null

    // Elvis operater ?:
    val name = nullableName ?: "Guest" //null이면 default값을 넣어줘라
    println(name)

    // non-null 단언 연산자 !!
    // nullable 타입을 non-null 타입으로 변경해줌
    // null 타입이었으면 널 포인터 제외가 발생
    var nullName:String?="jini" //null
    println(nullName!!.toLowerCase())
}
반응형
Comments