Kotlin #1

부리또의 댄스·2024년 9월 8일

Kotlin

목록 보기
1/1
post-thumbnail

대학 강의 학습 일지입니다.


기본 세팅

기존 MainActivity.kt가 있었던 디렉토리에 Main.kt 만들어서 코드 작성해야 한다.

변수 선언

     var i : Int = 10 // 'Int' 안 써도 자동으로 Int로 인식됨
     var name : String = "Suzzang"
     var value : Double = 2.5

위와 같은 형식으로 변수를 선언한다. ‘Int’에서 대문자임에 주의하자.

자료형을 따로 적어주지 않아도 자동으로 인식되어 설정된다.

     val constant = 100 // 'val'으로 선언하면 값을 바꿀 수 없는 상수로 선언됨
     constant = 200 // 에러 발생

val’로 변수를 선언하면 상수로 선언되어, 선언 이후에 값을 변경하려고 하면 에러가 뜬다.

     const val constant2 = 100 // 'const val'로 선언하면 컴파일 시간 상수로 선언됨, 함수 외부에서 선언해야 함

const val’을 붙이면 컴파일 시간 상수로 선언되고, 이는 함수 안에서 선언하면 에러가 뜬다.

package com.example.firstapp

const val MY_CONSTANT = 100

 fun main() {

     var i : Int = 10 // 'Int' 안 써도 자동으로 Int로 인식됨
     var name : String = "Suzzang"
     var value : Double = 2.5

     val constant = 100 // 'val'으로 선언하면 값을 바꿀 수 없는 상수로 선언됨
     constant = 200 // 에러 발생

     const val constant2 = 100 // 'const val'로 선언하면 컴파일 시간 상수로 선언됨, 함수 외부에서 선언해야 함
 }

이렇게 함수 밖에 선언해야 한다.

대부분의 경우 세미콜론을 찍지 않아도 되고, 그걸 더 추천한다.

아주 가끔 세미콜론을 찍어야 하는 경우가 있기도 하다.

형변환

     var num1 : Int = 10
     var longValue : Long = 10L // 'L'을 붙여서 Long 타입으로 지정 
     
     num1 = longValue // Error!
      num1 = (Int)longValue // Error!

할당하려는 숫자 뒤에 ‘L’을 붙이면 Long 타입으로 지정할 수 있다.

Kotlin에서는 type casting이 지원되지 않기 때문에, Int 타입 변수에 Long 타입 변수를 대입하려고 하면 에러가 뜬다.(원래 비슷한 언어인 Java에서는 됨)

(Int)를 붙여 명시적 형변환을 하려고 해도 에러가 뜬다.

num1 = longValue.toInt()
longValue = num1.toLong()

이렇게 해야만 형변환이 정상적으로 작동된다.

     var word = "20"
     num1 = word.toInt()
     print(num1) // 20
     
     num1 = 100
     word = num1.toString()
     print(word) // 100

위와 같이 Int형과 String형 사이에 형변환도 잘 이루어지는 것을 알 수 있다.

조건문

     var i = 50

     if (i > 100) {
         print("i > 100")
     } else if (i > 30) {
            print("i > 30")
        } else {
            print("else")
     }

if 문도 보통의 경우와 같이 사용할 수 있다.

     when (i){
         100 -> {
             print("i = 100")
         }
         50 -> {
             print("i = 50")
         }
         else -> {
             print("else")
         }
     }

위와 같이 when 문을 사용할 수도 있다.

     print(
         if (i == 100){
             "i = 100"
         } else if (i == 30){
                "i = 30"
            } else {
                "else"
         }
     )

위와 같이 ‘조건문’이 아니라 ‘실행문’이 가장 바깥쪽에 위치하고, 조건을 안쪽에 작성할 수도 있다.

     var str = (
         if (i == 100){
             "i = 100"
         } else if (i == 50){
                "i = 50"
            } else {
                "else"
         }
     )

이렇게 값을 할당하는 데에도 사용할 수 있다.

var x = if (i>20) 10 else 20

Kotlin에서의 if 문은 단순히 문장을 실행만 하는 것이 아니라 값을 반환하기 때문에, 위와 같이 값을 설정하여 변수에 값이 할당되게 할 수도 있다.

반복문

     var items = listOf(1, 2, 3, 4, 5)

기본적으로 listOf 를 통해 리스트 형을 선언할 수 있다.

     var items = listOf(1, 2, 3, 4, 5)

     for (item in items) {
         print(item)
     }
     
     items.forEach { item ->
         print(item)
     }

위와 같이 for 문을 사용할 수도 있지만,

forEach 문을 사용할 수도 있다. (Javascript에서와 동일하다.)

     items.forEachIndexed() { index, item ->
         println("Item at $index is $item")
     }

forEachIndexed 를 사용하면, 따로 index를 지정해 명시할 수도 있다. index를 첫번째 인자에 써줘야한다.

     for ((index, item) in items.withIndex()) {
         println("Item at $index is $item")
     }

동일한 동작을 하는 코드를 이렇게 for 문으로 작성할 수도 있다.

     for (i in 0..(items.size - 1)){
        print(items[i])
     }

이렇게 for 문에 범위를 지정해서도 할 수 있다.

mutableListOf

     var mutitems = mutableListOf(1, 2, 3, 4, 5) // [1,2,3,4,5]
     
     mutitems.add(6) // 맨 뒤에 6을 추가
     println(mutitems) // [1,2,3,4,5,6]
     
     mutitems.add(2, 7) // index가 2인 곳에 7을 삽입
     println(mutitems) // [1,2,7,3,4,5,6]
     
     mutitems.removeAt(0) // index가 0인 요소를 삭제 (주의할점!! 그냥 'remove'와 다름!)
     println(mutitems)  // [2,7,3,4,5,6]
     
     mutitems.remove(2) // 해당 값인 요소를 삭제
     println(mutitems) // [7,3,4,5,6]

mutableListOf 로 선언한 mutableList는 말 그대로 요소를 삭제하거나 수정할 수 있는 자료형이다.(그럼 그냥 List는 못바꾸나?)

Null 값 넣기

var i : Int? = null
var k : Int = null // Error!

위와 같이 null 값으로 변수를 초기화 할 때는 기존 변수 타입(Int, Long 등) 뒤에 ? 을 붙여 선언해야 한다.

     var i : String? = null
     var j : Int

     j = i?.length ?: -1
     println(j)
     
     i?.let{
         println(i) // i가 null(false)이 아닐 때만 안의 실행문 실행
     }

물음표를 붙여 선언한 변수는 위와 같이 .length 와 같은 프로토타입 함수를 사용할 때 등에도 물음표를 붙여야한다.

그리고 세 번째 줄과 같이 ?: 의 문법으로 if 조건문을 쓸 필요없이 간단하게 한 줄로 null 예외처리를 해줄 수 있다.

마찬가지로 let 문으로도 작성해줄 수 있다.


질문

  • valconst val 의 차이는 뭘까?
profile
환영합니다!

0개의 댓글