티스토리 뷰

변수 선언

  • Java : 값 자체를 직접 저장하는 원시 타입(int, double 등), 객체의 참조 값을 저장하는 참조 타입(String 등)으로 나뉜다.
  • Kotlin : 모든 타입을 객체로 표현하기 때문에 원시타입과 래퍼 클래스를 구분하지 않는다.
  • val로 변수를 선언해놓고 변경해야 할 때 var로 바꾸는 방법을 권장(오류 발생 확률을 낮출 수 있음)
    val value = ""
    var variable = 0L

기본 자료형

  • 자바와는 달리 코틀린은 모든 타입을 객체로 표현하기 때문에 타입체크를 해야 한다.

    • 숫자 타입들간에는 묵시적 변환을 지원하지 않아 toInt(), toFloat(), toDouble()과 같이 명시적으로 타입을 변환해야 한다.

      // String -> Int
      val yearString = "1990"
      val year: Int
         get() = yearString.toInt()
      
      // Int -> Float
      val dp10: Int get() = 10
      val itemSize: Float
         get() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp10.toFloat(), this.context.resources.displayMetrics)

기본 자료형 (숫자)

  • 16진수, 2진수 지원 / 8진수는 지원하지 않음

  • 부동소수점 지원

    val int = 123
    val float = 123F
    val double = 123.0
    val long = 123L
    
    // 16진수, 2진수 지원 - 8진수는 지원하지 않음
    val decimalNumber = 0x0F
    val binaryNumber = 0b00001011
    
    // 부동소수점 지원
    val floatingPointToDouble: Double get() = 123.5 // 123.5e10
    val floatingPointToFloat : Float get() = 123.5F // 123.5f
    • 일반적으로는 정수 자료형을 사용하지만, 음의 부호를 사용하지 않는 정수 자료형이 코틀린 1.3버전에서 실험적으로 출시됨.
    • 언더스코어로 자릿값을 구분할 수도 있음
    val number = 1_000_000_000
    val cardNum = 1234_1234_1234_1234L
    val hexVal = 0xAB_CD_EF_12
    
        companion object {
            private const val REQUEST_CODE_INTRODUCTION = 1001_0000
            private const val REQUEST_CODE_EDUCATION = 1001_0001
        }
    • 자료형에 별칭 붙이기
    • 제네릭, 고차함수 및 람다식, 클래스 등에서 별칭을 사용할 수 있다.
    typealias set = Set<String>
    typealias onClickListener = (Int, String, Any) -> Unit
    typealias AInner = A.Inner
    typealias BInner = B.Inner
    typealias UserName = String
    typealias Password = Int

자료형 검사/변환

  • ?(물음표) 기호를 통해 변수의 널 허용여부 설정 가능
  • ?. 세이프콜 잘 활용
    _page.value?.let { ... }
  • !! 단정기호를 사용해 null이 일어나지 않을 지점을 단정지을 수 있다
    • 개인적으로는 조심해서 사용해야 한다고 생각함. (정말 단정기호를 포함할 수 있는지 생각해 본 후)
  • 엘비스 연산자 활용
    fun getSearchText(): String {
        return _searchText.value ?: ""
    }
  • 결과적으로 참조 주소를 비교하는 ‘===‘ 연산으로 반환값을 확인할 수 있다.

기본 자료형 (기본형과 참조형 자료형의 비교)

  • 문자열은 코틀린에선 힙 영역의 String Pool 공간에 문자열을 저장하고 변수가 값을 참조하도록 한다.

    • 결과적으로 참조 주소를 비교하는 ‘===‘ 연산으로 반환값을 확인할 수 있다.
  • Int형으로 선언된 number1은 기본형으로 변환되어 스택에 128 값을 저장하고, number는 참조형으로 저장되어 128이 저장된 힙 참조 주소가 저장되어 있어 주소값이 다르게 나온다.

    val str1: String = "H"
    val str2 = "W"
    var str3 = "H"
    
    val number1: Int = 128
    val number2: Int? = 128
    
    fun strPrint() {
        println("str1 === str3 : ${str1 === str2}") // false
        println("str1 === str3 : ${str1 === str3}") // true
    
        println("number1 == number2 : ${number1 == number2}") // true
        println("number1 === number2 : ${number1 === number2}") // false
    }
    • 스마트 캐스트 : 컴파일러가 자동으로 형 번환을 도와준다.

      • as에 의한 스마트 캐스트 지원
    • 자료형 검사

      • is 키워드 사용

          val number3: Number = 12.2F // Float 형으로 스마트캐스트
          val str4: String = number3 as String
        
          fun smartCastWithIsAs() {
              when (number3) {
                  is Int -> print("int = $number3")
                  is Float -> print("float = $number3")
              }
        
              print(str4)
          }
    • 묵시적 변환

    val object1: Any = 1 // Int형
    val object2: Any = 20L // Long형
    
        fun checkObject(type: Any) {
            when (type) {
                is String -> {  }
                is Int -> {  }
            }
        }

연산자

  • 기본연산자

    • 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
  • 대입연산자

    • 값 할당(=, -=, +=, *=, /=, %=)
  • 증가/감소 연산자

    • ++, --
  • 비교 연산자

    • '>, <, >=, <=, ==, !='
    • 참조 주소 비교(===, !==)
  • 논리 연산자

    • &&, ||, !
  • 비트 연산

    val andValue: Int = (6 and 5)   // 비트 연산 AND(논리곱)
    val orValue: Int = (6 or 5)     // 비트 연산 OR(논리합)
    val xorValue: Int = (6 xor 5)   // 비트 연산 XOR(상호배제)
    val invValue: Int = 6.inv()     // 비트 연산 NOT(부정)
    
    val shiftLeftValue: Int = 178 shl 2    // 왼쪽으로 시프트(부호 비트 유지)
    val shiftRightValue1: Int = 178 shr 2  // 오른쪽으로 시프트(부호 비트 유지)
    val shiftRightValue2: Int = 178 ushr 2 // 오른쪽으로 시프트(부호 비트 무시)
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함