[Kotlin] 변수와 자료형, 연산자

1 minute read

작년 3월부터 SOPT에서 처음으로 코틀린을 접하고 그이후로 쭉 써왔다.

코틀린을 정석대로 공부하지 않고 주먹구구식으로 안드로이드에 적용하다보니 잘 모르고 쓴게 많아서 개념을 확실하게 잡자! 라는 마음으로 부스트코스-코틀린강의를 들으면서 정리해봤다.


val(value) - 불변형

var(variable) - 가변형

선언키워드 변수이름 : 자료형 = 값

문자열 내에 변수나 식을 ${변수 혹은 식} 으로 사용할 수 있음

var a = 1
val str2 = " a = ${a+2}"
println(str2)

컴파일러가 값에 따라 데이터형을 추론해 선언함 → 값을 명시해놓으면 :자료형 안써도 알아서 처리


  • 일반 변수, 함수명

camelCase → 소문자 먼저오고 대문자 그 다음

  • 클래스, 인터페이스

CarEngine → 대문자로 시작


  • 기본형

    가공되지 않은 순수한 자료형, 프로그래밍 언어에 내장

    int, long, float, double ⇒ 코틀린에서는 사용하지 않음 , 자바에서는 사용

    스택에 저장됨

  • 참조형

    동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형

    Int, Long, Float, Double

    힙에 저장됨


😃 16진수 0x0F ⇒ 0F ⇒ 0000 1111


  • 문자열

    String으로 선언되며 String Pool이라는 공간에 구성

    ==는 값만 비교, === 는 참조까지 비교 (java의 equals랑 똑같은듯)


  • Null 처리

    코틀린의 변수 선언은 기본적으로 null을 허용하지 않음(기본 Not Null)

    • ?

    :null이 가능한 선언

      //null 가능성 검사를 해주는것이 좋다 
      val a: Int? = null
      val b: String? = null 
    
      //=> 사용할 수 없는 null인 변수에 접근하면서 NPE(NullPointerException)이 발생할 수 있기 때문에 
    

    ?가 붙어있는 형식에는 세이프콜(?.)이나 널이 아니라는것을 단정해주는(!!.)가 허용됨 , null이라면 뒷부분이 실행되지 않음 (=null이 아닌 경우만 실행 !)

    • !! non-null 단정기호

    :null이 아니라고 단정해서 컴파일러가 오류를 무시함 → 널이라면 NPE가 발생하니까 주의 ! , 안쓰는것이 좋다

      val b: String? = null 
      println(${b?.length})
      //println(${b!!.length} 웬만하면 null오류 날 수 있으니 쓰지 말자 
    

    null인지 if문으로 처리해주기

      val b : String? = null
      val length = if(b!=null) b.length else -1
      println(length)
    

    세이프 콜과 엘비스 연산자를 사용한 null허용

      val b : String? = null
      val length = b?.length ?: -1
      println(length)
    

    • is

      특정 자료형인지 확인

        val num = 10
        if(num is Int){
        	println(num)
        }else{
        	println(num+1)
        }
      
    • Any

      자료형이 정해지지 않은 경우

      언제든 필요한 자료형으로 자동변환(스마트캐스트) 가능

      Any(root) - Number - Int ,Long 이런식으로 계층구조가 되어있음

        var a : Any = 1
        a = 20L
        println("a: $a")
      
        fun check(x: Any){
        	if(x is String){
        		...
        	}
        	if( x is Int){
        		...
        	}
        }
      

Comments