Kotlin(코틀린) 기본문법 1. 변수와 자료형

차선호·2023년 3월 28일
0

Kotlin

목록 보기
1/8
post-thumbnail

코틀린


특징

  • Intelllij IDEA(Android Strudio의 모체)로 유명한 JetBrains에서 개발하고 보급
  • Google IO 2017에서 Android 공식 언어로 추가 발표
  • 변수는 Nullable(널 값 사용 가능)과 NotNull로 나뉘는데 변수 선언 시 ‘?’를 붙여 Nullable로 만들 수 있음

장점

  1. 자료형에 대한 오류를 미리 잡을 수 있음
    1. 컴파일러가 타입을 검증
  2. 아예 없는 것은 아니지만 java에 비해 Nullpointer Exception에서 자유로움
  3. 데이터형 선언 시 Null 가능한 형식과 불가능한 형식 지원
  4. 자바와 완벽하게 상호호환
  5. java와 비교했을 때 코드가 간결하고 효율적인 프로그래밍이 가능
  6. 함수형 프로그래밍과 객체 지향 프로그래밍이 모두 가능
  7. 세미클론은 생략 가능


변수와 자료형


변수

  • val (value) - 불변형(immutable)
  • var (variable) - 가변형(mutable)
  • 변수명
    • 규칙 - java와 동일
      • 변수 이름은 1242abc와 같이 숫자로 시작불가
      • 변수 이름에는 when, val와 같이 코틀린에서 사용되는 키워드는 사용할 수 없음
      • 변수 이름은 의미 있는 단어를 사용하여 만드는 것이 좋음
      • 여러 단어로 변수명을 지을 때는 카멜 표기법 사용을 권장
      • 클래스, 인터페이스 등은 파스칼 케이스를 사용 - java와 동일
    • 변수 선언 예
      • val userName = “hong” (O) → 자료형을 추론하여 String으로 결정
      • var username (X) → 자료형을 지정하지 않은 변수는 사용할 수 없음
      • val init: Int (O) → 먼저 선언하고 나중에 사용 전에 초기화 할 수 있음
      • val number = 10 (O) → 자료형을 추론하여 Int형으로 추론

자료형

  • 코틀린의 기본 자료형은 모두 객체
    • 자바보다 엄격한 타입체크
      • Double에 Int가 들어갈 수 없음 (.toDouble( )와 같은 메소드를 이용해서 명시적으로 형변환을 시켜야 함)

  • 숫자형 : Byte/Short/Int/Long, Float/Double
    val a = 5.toByte() // Byte
    val b = 65.toChar() // Char
    val c = 10.toShort() // Short
    val d = 10 // 정수 기본 자료형 Int
    val e = 10L // Long
    
    val f = 10.0f // Float
    val g = 10.0 // 실수 기본 자료형 double
  • 문자형 : String/Char
    • 코틀린은 유니코드(Unicode)를 사용
      var ch = '\uAC00'
      print(ch) // 가
    • String은 문자열 (double quotation), char는 글자 하나(single quotation)
    • 여러 줄 문자열 표현은 큰 따음표 세 개로 감싸 줌
      val str = """
          Ssafy 여러분
          모두 화이팅!
      """.trimIndent()
  • 문자열 비교
    • 문자열이 같은지 비교할 때는 ==
    • 오브젝트가 같은지 비교할 때는 ===

  • 문자열 템플릿
    • ‘+’ : 문자열 붙이기
      val str1 = "안녕"
      val str2 = "하세요"
      println(str1+str2) // 안녕하세요
    • $변수명 혹은 ${변수명} : 문자열 중간에 변수가 들어가야 할 경우
      val a = 20
      println("저는 $a 살 입니다.") //저는 20 살 입니다.
      println("저는 ${a}살 입니다.") // 저는 20살 입니다.
  • 타입 별명 붙이기 - typealias
    • 만약 타입의 이름이 너무 길거나 복잡한 경우, ‘typealias 별명 = 타입’ 과 같이 적어주면 그 타입에 새로운 이름을 부여해 줄 수 있음
      typealias Num = Int
      fun main() {
          val num: Num = 10
          println(num) // 10
      }
      • alias 유효 범위는 접근지정자 - 코틀린에서 default는 public
        • 당연히 import하면 된다.

  • 배열
    • arrayOf( )

    • 배열의 생성과 초기화를 함께 수행 (컴파일러가 자료형 유추 가능하면 이를 생략)

    • 배열의 요소에 접근하려면 [ ] 대괄호를 사용

      fun main() {
          val num : Array<Int> = arrayOf(1,2,3,4)
          val num2 = arrayOf(5,'a',"hi!",8)
          println(num[0]) // 1
          println(num2[1]) // a
          println(num2[2]) // hi!
      }
    • num처럼 선언하면 Int형이 아닌 값들을 넣으면 오류가 발생한다.

    • num2처럼 선언하면 어떤 값을 넣어도 오류가 나지 않는다.


코틀린의 자료형 변환


  • 기존 java 자료형
    • 기본형(Primitive data type)
      • 가공되지 않은 순수한 자료형으로 프로그래밍 언어에 내장
      • int, long, float, double 등
    • 참조형(Reference type)
      • 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형
      • Int, Long, Float, Double 등

  • 코틀린의 모든 데이터는 참조형.
    • 컴파일 후 내부적으로 primitive type으로 동작
      • primitive type인 byte/short/int 등은 직접 사용할 수 없음

  • 서로 다른 자료형은 변환 과정을 거친 후 비교
    • val a :Int = 1 // 정수형 변수 a 선언 후 1을 할당
    • val b :Double = a // 자료형 불일치 오류
    • val c :Int = 1.12 // 자료형 불일치 오류

  • 변환 메서드 이용
    • val b :Double = a.toDouble( ) // 변환 메서드 사용

  • 표현식에서 자료형의 자동 변환
    • val result = 1L + 3 // Long + Int → Long
      • 큰 바이트형으로 전환된다.

  • 변환 메서드 종류
    • toByte : Byte
    • toLong : Long
    • toShort : Short
    • toFloat : Float
    • toInt : Int
    • toDouble : Double
    • toChar : Char


스마트 캐스트


  • 구체적으로 명시되지 않은 자료형을 자동 변환해줌
    • 값에 따라 자료형 결정
      • Number - 숫자를 지정하기 위한 특수 자료형으로 스마트 캐스팅 됨

        var test1:Number = 6.2 // Double로 스마트 캐스팅 됨
        println(test1.javaClass) // class.java.lang.Double
        test1 = 12
        println(test1.javaClass) // class.java.lang.Integer
        test1 = 12L
        println(test1.javaClass) // class.java.lang.Long
        test1 += 12.0f
        println(test1.javaClass) // class.java.lang.Float
  • Is 키워드를 사용한 검사
    • 변수 is 자료형

      val number = 256
      if(number is Int){ //num이 Int형일 때
          print(number)
      }else if(number !is Int){ // number이 Int형이 아닐 때
          print("Not a Int")
      }
    • java에서는 instanceof를 하더라도 명시적으로 타입 캐스팅을 해야 하지만, 코틀린에서는 타입 체크와 동시에 자동으로 해줌


묵시적 변환


  • Any
    • 자료형이 정해지지 않은 경우
    • 모든 클래스의 뿌리(Java의 java.lang.Object)
      • Ex) Int나 String은 Any 형의 자식 클래스

      • Any는 언제든 필요한 자료형을 자동 변환(스마트 캐스트)

        var a:Any = 1
        println(a.javaClass) // class.java.lang.Integer
        a = 2L
        println(a.javaClass) // class.java.lang.Long
profile
dkssud!

0개의 댓글