kotlin study day.2

Variables

kotlin은 java의 멤버 변수를 properties로 명명합니다. properties는 멤버변수와 비슷하게 작동하지만 일부의 차이점이 있습니다. 특징은 아래와 같습니다.

타입추론

var a = "1234" // 타입을 지정하지 않아도 String으로 작동
// var a; -> error
var b: String = "12345"
var c: String
c = "12345"

변수 선언 및 할당시 kotlin에서는 타입 추론 기능을 제공합니다. 타입 추론시 할당을 하지 않으면 에러가 발생합니다.

(val 도 동일하게 작동)

Declaring properties

kotlin에서 변수 선언은 var 키워드를 이용합니다. 상수로서 취급하려면 val 키워드를 사용합니다.

class Student {
    var name: String = "hahava"
    var city: String = "seoul"
    var nation: String = "korea"
    var age: Int = 20
}

kotlin에서 class는 java에서 클래스와 사용방법이 조금 다릅니다. 멤버변수 역할을 하는 클래스 속성들은 기본값을 지정해야 합니다. Data Trasnfer Object 처럼 사용하려면 data class 를 사용합니다.

fun copyStudent(student: Student): Student {
    val result = Student()
    result.name = student.name
    result.city = student.city
    return result
}

객체 생성시 new 키워드를 사용하지 않습니다. 속성을 참조하려면 . 으로 접근 할 수 있습니다.

Getters and Setters

kotlin은 클래스 속성에 대해 기본적으로 getter/setter를 제공합니다. 위의 student class는 사실 아래와 같습니다.

class Student {
    var name: String = "hahava"
        set(value) {field = value}
        get() = field
		//...
}

getter/setter 를 수정하여 상황에 맞게 수정할 수 있습니다. (java에서 의무적인 getter/setter를 없앤 느낌?)

만약 캡슐화를 통해 접근을 제한 하려면 getter/setter 메서드 앞에 private 제한자를 선언합니다.

class Student {
    var name: String = "hahava"
  		private set() 
		//...
}

var firstStudent = Student()
firstStudent.name = "kalin" /// error ..!

Const

런타임 시점이 아닌 컴파일 시점에서 상수를 사용하려면 const키워드를 사용합니다. 이것은 Java 에서 public static final 과 동일하게 작동합니다.

const val ZERO: String = "0"

Variable Type

kotlin에서 모든 것은 객체입니다. 구체적으로는 객체처럼 행동합니다. java 와 마찬가지로 기본형이 존재하나, 이것은 runtime 시에 성능향상을 위해 사용됩니다. 일반적인 유저에게는 객체라고 생각하면 됩니다.

Numbers

java 와 비슷하게 작동합니다. integer와 floating point로 구분됩니다.

Integers
  • Byte - 8 bit
  • Short- 16 bit
  • Int - 32 bit
  • Long - 64 bit
Floating Point Numbers
  • ` Float` - 32 bit

  • Double - 64 bit

var myByte: Byte = 10
var myShort: Short = 120
var myInt: Int = 1000
// var myInt = 1000

var myFLoat: Float = 120.99f
// var myFloat = 120.99f

var myDouble: Double = 10000.1
// var myDouble: Double = 1000.10

var hundredThousand = 100_000
var oneMillion = 1_000_000

숫자의 기본형은 Int, 부동소수점의 기본형은 Double 입니다. Float의 경우 반드시 ‘f’ 또는 ‘F’를 붙여야 합니다. 숫자를 읽기 편하게 하기위해 _를 통해 자리수를 구분할 수 있습니다.

Boolean

참.거짓을 판별하는 Boolean은 true 와 false가 존재합니다.

var myTrue: Boolean = true
var myFalse: Boolean = false

Characters

문자열이 아닌 문자 1개만을 위한 자료형입니다. '' 따옴표로 표현하면 java 와 동일하게 작동합니다.

var a = 'a'
var upperA = 'A'

String

문자열을 의미합니다. str[index] 형태로 접근할 수 있어며 불변입니다. """ 을 사용하여 인용을 사용할 수 있습니다.

var name = "hahava"
// name[0] -> "h"
// name[3] -> "v"
var lorem = """
	Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
"""

Arrays

배열을 의미하는 Array 또한 형태로 제공됩니다. arrayOf() 함수나 Array() 생성자를 이용해서 배열을 사용할 수 있습니다.

var numbers = arrayOf(1, 2, 3)
var chars = charArrayOf('h','h','h')
var evens = intArrayOf(1,2,3)
var numbers = Array(5, { i -> i + 1 })

arrayOf 함수는의 매개변수는 타입에 상관없이 모든 형태가 가능합니다. java의 [] 배열과 같은 형태로 사용하려면 타입별로 제공되는 intArrayOf, charArrayOf등의 함수를 사용해야 합니다. Array 생성자를 이용하면 첫번째 인자로 사이즈를 두번째 람다식을 이용하여 배열을 생성할 수 있습니다.

형변환

Java와 달리 kotlin에서는 묵시적 형변환을 제공하지 않습니다. 따라서 Int   는 Long 이나 Double 이 될 수 없습니다.

var num = 100
var longNum: Long = num // error

그러나 모든 숫자형 타입은 헬퍼 함수가 존재하며 이를 통해 명시적 형변환이 가능합니다.

  • toByte()
  • toShort()
  • toInt()
  • toLong()
  • toFLoat()
  • toDouble()
  • toChar()
var intNum = 100
var longNum = intNum.toLong()
var doubleNum = intNum.toDouble()
var shortNum = intNum.toShort()

헬퍼 함수를 이용하면 큰쪽에서 작은쪽으로의 변환도 가능합니다.

태그:

카테고리:

업데이트:

댓글남기기