본문 바로가기
프로그래밍/Kotlin

[Kotlin 기초 1] 기본 구문 (1)

by 채연2 2023. 2. 3.

 

본격적으로 코딩하기에 앞서 기본 구문을 익혀야 예제도 따라할 수 있고 android에서 java와 kotlin의 구문이 어떻게 다른지도 익힐 겸 첫번째로 기본 구문(변수, 함수, 클래스, 반복문 등..)을 학습하려고 한다.

 

Contents

     

     

    Kotlin Programming Basics

    var & val

    프로그램 요소를 참조하기 위해 식별자를 생성한다. 데이터 식별자에 대한 가장 기본적인 것은 프로그램 실행 중 값을 변경할 수 있는지 또는 한 번만 할당 가능한지의 여부이다.

     

    val 식별자를 더 많이 사용하는 것이 var 식별자를 하용하는 것보다 더 안전하고 안정적이다.

     

    • var : 값 재할당 가능
    • val : 초기에 한 번만 할당 가능
    fun varTest() {
       var sum = 1
       sum += 3
       Log.e("KotlinTest", "sum : $sum");
    }
    fun valTest() {
       val whole = 11
       whole = 15
    }

    fun valTest() {
       val whole = 11
       val fractional = 1.4
       val words = "Twas Brillig"
       Log.e("KotlinTest", "whole : $whole");
       Log.e("KotlinTest", "fractional : $fractional");
       Log.e("KotlinTest", "words : $words");
    }

     

    Data Type

    Kotlin에게 해당 데이터를 어떻게 사용할 것인지를 알려준다. 데이터에 대해 수행할 수 있는 작업, 데이터의 의미 및 해당 타입 값을 저장할 수 있는 방법 정의한다.

     

    Type Inference 사용하여 혼합 타입 의미를 결정하고 타입 정의를 생략하면 Kotlin은 일반적으로 이를 유추 가능하다.

    예를 들어, Int와 Double을 더할 때 Kotlin은 결과가 Double임을 확인하고 Double에 대한 모든 규칙을 따르도록 한다.

     

    사용법

     

    val identifier: Type = initialization
    var identifier: Type = initialization

     

    fun typeTest() {
       val whole: Int = 11              // [1]
       val fractional: Double = 1.4     // [2]
       val trueOrFalse: Boolean = true  // [3]
       val words: String = "A value"    // [4]
       val character: Char = 'z'        // [5]
       val lines: String = """Triple quotes let
          you have many lines
          in your string"""           // [6]
       Log.e("KotlinTest", "whole : $whole");
       Log.e("KotlinTest", "fractional : $fractional");
       Log.e("KotlinTest", "trueOrFalse : $trueOrFalse");
       Log.e("KotlinTest", "words : $words");
       Log.e("KotlinTest", "character : $character");
       Log.e("KotlinTest", "lines : $lines");
    }
    [1] Int : 정수
    [2] Double : 소수
    [3] Boolean : true, false
    [4] String : 문자열
    [5] Char : 문자
    [6] String : 줄, / 또는 특수 문자가 있는 경우 3개의 큰따옴표를 사용
    fun typeInferenceTest() {
       val n = 1 + 1.2
       Log.e("KotlinTest", "n : $n");
    }

     

    Function

    고유 이름을 가진 작은 프로그램과 같으며 다른 함수에서 해당 함수를 호출하여 실행할 수 있다. 함수는 일련의 활동을 결합하며 프로그램을 구성하고 코드를 재사용하는 가장 기본적인 방법이다.

     

    함수명은 해당 함수를 잘 나타내는 설명이 포함되도록 작성하는 것이 좋다. 코드를 더 쉽게 읽을 수 있고 종종 코드 주석을 줄일 수 있다.

     

    사용법

     

    매개변수인 p1과 p2 뒤에 콜론과 해당 매개변수 유형이 있다.

    매개변수 목록의 닫는 괄호 뒤에는 콜론과 함수 리턴 값 유형이 있다.

    함수가 단일 표현식인 경우 중괄호 대신 = 뒤에 표현식이 오는 약식 구문을 사용할 수 있다.

    fun functionName(p1: Type1, p2: Type2, ...): ReturnType {
        lines of code
        return result
    }

    fun functionName(arg1: Type1, arg2: Type2, ...): ReturnType = expression

     

    fun multiplyByTwo(x: Int): Int {    // [1]
       Log.i("KotlinTest", "Inside multiplyByTwo");
       return x * 2
    }
    
    fun functionTest() {
       val r = multiplyByTwo(5)
       Log.e("KotlinTest", "r : $r");
    }
    [1] : Int 매개변수 사용 및 Int 결과 값 반환
    fun sayHello() {
       Log.i("KotlinTest", "Hallo!");
    }
    
    fun sayGoodbye(): Unit {    //[1]
       Log.i("KotlinTest", "Auf Wiedersehen!");
    }
    
    fun functionTest() {
       sayHello()
       sayGoodbye()
    }

    [1] : 함수가 결과 값을 반환하지 않는 경우 타입 값 Unit 사용 (생략 가능)
    fun multiplyByThree1(x: Int): Int = x * 3    // [1]
    fun multiplyByThree2(x: Int): Int {   // [2]
       return x * 3
    }
    fun multiplyByFour(x: Int) = x * 4    // [3]
    
    fun functionTest() {
       Log.i("KotlinTest", "multiplyByThree1 : ${multiplyByThree1(5)}");
       Log.i("KotlinTest", "multiplyByThree2 : ${multiplyByThree2(5)}");
       Log.i("KotlinTest", "multiplyByFour : ${multiplyByFour(5)}");
    }
    [1] : expression body : 등호 구문을 사용하는 함수 본문
    [2] : block body : 중괄호 구문을 사용하는 함수 본문
    [3] : expression body의 함수 리턴 타입만 유추 가능
    (block body의 함수 리턴 타입 생략할 경우 Unit 타입으로 반환)

     

    if문

    조건문으로 참인지 거짓인지 확인하고 결과에 따라 작업을 수행한다. if 뒤의 괄호 안의 식은 true 또는 false로 평가되어야 하고 조건 뒤에 여러 줄을 실행하려면 중괄호로 묶어 사용한다.

     

    else는 if와 함께 사용되며 단일로는 사용되지 않고, else와 if를 결합하여 여러 조합으로 테스트 가능하다.

    return은 함수의 결과 값을 반환하는 키워드로, 함수의 어느 위치에든 있을 수 있으며 항상 함수의 끝에 위치해 있을 필요는 없다. 

     

    또, if문도 단일 표현식인 경우 중괄호 생략 가능하고, 해당 if 식의 결과는 즉 함수의 결과이므로 if 식은 바로 함수의 본문이 될 수 있다.

     

    fun ifTest() {
       if (1 > 0)
          Log.e("KotlinTest", "it's true!");
       if (10 < 11) {
          Log.e("KotlinTest", "10 < 11");
          Log.e("KotlinTest", "ten is less than eleven");
       }
    }
    fun ifTest() {
       val x: Boolean = 1 >= 1
       if (x)
          Log.e("KotlinTest", "it's true!");
    }
    fun ifTest() {
       val n: Int = -11
       if (n > 0)
          Log.e("KotlinTest", "It's positive");
       else
          Log.e("KotlinTest", "It's negative or zero");
    }
        val n: Int = -11
       if (n > 0)
          Log.e("KotlinTest", "It's positive");
       else if (n == 0)
          Log.e("KotlinTest", "It's zero");
       else
          Log.e("KotlinTest", "It's negative");
    }
    fun ifTest() {
       val y: Boolean = false
       if (!y)
          Log.e("KotlinTest", "!y is true");
    }
    fun ifTest() {
       val num = 10
       val result = if (num > 100) 4 else 42
       Log.e("KotlinTest", "result : $result");
    }
    fun trueOrFalse(exp: Boolean): String {
       if (exp)
          return "It's true!"
       return "It's false"
    }
    
    fun ifTest() {
       val b = 1
       Log.e("KotlinTest", "trueOrFalse(b < 3) : ${trueOrFalse(b < 3)}");
       Log.e("KotlinTest", "trueOrFalse(b >= 3) : ${trueOrFalse(b >= 3)}");
    }
    fun oneOrTheOther(exp: Boolean): String =
       if (exp)
          "True!" // No 'return' necessary
       else
          "False"
    
    fun ifTest() {
       val x = 1
       Log.e("KotlinTest", "oneOrTheOther(x == 1) : ${oneOrTheOther(x == 1)}");
       Log.e("KotlinTest", "oneOrTheOther(x == 2) : ${oneOrTheOther(x == 2)}");
    }

     

     

    320x100

    댓글