Lesson 1: Kotlin basics

9616 단어 androidkotlinandroid

💡 Teach Android Development

구글에서 제공하는 교육자료를 정리하기 위한 포스트입니다.

Android Development Resources for Educators

Operators

수학 연산자

  • + - * / %

증가 및 감소 연산자

  • ++ --

비교 연산자

  • < <= > >=

할당 연산자

  • =

등호 연산자

  • == !=

Data types

Integer types


정수형 타입의 경우 Int의 범위를 넘어서지 않으면 Int로 초기화되고 넘어설 경우 Long으로 초기화 됩니다.

val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1

Floating-point types


소수 부분이 있는 숫자로 초기화할 수 있으며, 마침표로 구분됩니다. 소수로 초기화된 경우 Double로 판단합니다.

val pi = 3.14 // Double
// val one: Double = 1 // Error: type mismatch
val oneDouble = 1.0 // Double

val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float, actual value is 2.7182817

Characters and Boolean

Characters

  • 16bits
  • 16-bit Unicode character
  • 작은 따옴표로 묶습니다. '1'
  • 특수문자는 escaping backslash로 시작합니다.\
val aChar: Char = 'a'

println(aChar) // a
println('\n') // prints an extra newline character
println('\uFF00') // ＀

Boolean

  • 8bits
  • True or false 두가지 값을 가질 수 있습니다.
  • 연산 작업에 활용
    - ||– disjunction (logical OR)
    - &&– conjunction (logical AND)
    - !- negation (logical NOT)
val myTrue: Boolean = true
val myFalse: Boolean = false
val boolNull: Boolean? = null

println(myTrue || myFalse) // true
println(myTrue && myFalse) // false
println(!myTrue) // false

Type casting

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char
val b: Byte = 1 // OK, literals are checked statically
// val i: Int = b // ERROR
val i1: Int = b.toInt()

note: 긴 숫자의 경우 Underscores를 활용할 수 있습니다.
val oneMillion = 1_000_000
val idNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

String

일반적으로 큰따옴표(")로 묶인 문자열이며 escaped 문자를 표함할 수 있습니다.

val s = "Hello, world!\n"

원시 문자열은 삼중따옴표 (""")를 사용해 escaped 문자를 포함하지 않으며 줄 바꿈 및 기타 문자를 포함할 수 있습니다.

val s = """
    Hello, world!
            
"""

String templates

템플릿 표현식은 달러 기호($)로 표시되며 간단한 값을 사용할 수 있습니다.

val i = 10
println("i = $i") // prints "i = 10"

표현식의 경우 중괄호로 묶어 사용합니다.

val s = "abc"
println("$s.length is ${s.length}") // prints "abc.length is 3"

원시 문자열과 escaped 문자열에 모두 사용할 수 있으며 일반적인 $를 사용할 때 아래와 같이 표현합니다.

val price = """
    ${'$'}_9.99
"""
val price = "\$_9.99"
val price = "${'$'}_9.99"

Variables

변수 선언 시 컴파일러가 유형을 추론하며, 필요한 경우 명시 할 수 있습니다.

var width = 12 // Int
var widthInt: Int = 12 // Int

가변, 불변 변수를 선언할 수 있습니다. ( 불변 변수를 강제하지 않지만 추천됩니다. )

  • Mutable (가변)
var count = 1
count = 2
  • Immutable (불변)
val size = 1
size = 2 // Error: val cannot be reassigned

Conditionals

if/else statements

// multiple cases
val guests = 30
if (guests == 0) {
    println("No guests")
} else if (guests < 20) {
    println("Small group of people")
} else {
    println("Large group of people!")
}
  
// Range
val numberOfStudents = 50
if (numberOfStudents in 1..100) {
    println(numberOfStudents)
}
  
// As expression
val max = if (a > b) a else b

When statement

개발을 진행할 때 자주 쓰이므로, 다양한 예시를 익혀두면 좋을 것 같습니다.

when (results) {
    0  -> println("No results")
    in 1..39 -> println("Got results!")
    40, 41 -> println("Results 40, 41!")
    !in 42..45 -> print("results is outside the range")
    else -> println("That's a lot of results!")
}

For loops

// Using element
for (item in collection) print(item)
    
// Using index
for (i in array.indices) 
    println(array[i])
}
    
// Using both
for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}
  
// Range
for (i in 1..3) {
    println(i)
}
  
// Down and step
for (i in 6 downTo 0 step 2) {
    println(i)
}

While loops

whiledo-while 루프는 조건이 만족되는 동안 계속해서 구문을 실행합니다.

  • while은 조건을 확인한 뒤, 만족되면 구문을 실행합니다.
  • do-while은 구문이 실행된 다음 조건을 확인한다. 조건에 관계없이 한 번 이상 실행됩니다.
var bicycles = 0
while (bicycles < 50) {
    bicycles++
}

do {
    bicycles--
} while (bicycles > 50)

Repeat loops

repeat(2) {
    print("Hello!")
}

Lists and arrays

Lists

  • 정렬된 elements의 모음입니다.
  • elements는 인덱스를 통해 접근할 수 있습니다.
  • elemesnts는 중복이 가능하며 순서가 중요합니다.

Immutable list

listOf()를 사용해 불변 리스트를 선언할 수 있습니다.

val instruments = listOf("trumpet", "piano", "violin")
myList.remove("violin") // Error

Mutable list

mutableListOf()를 사용해 가변 리스트를 선언할 수 있습니다.

val myList = mutableListOf("trumpet", "piano", "violin")
myList.remove("violin")

note: val로 선언된 경우 list 자체를 변경할 순 없지만, list안의 속성은 변경할 수 있습니다.

Arrays

  • 여러 항목을 저장할 수 있습니다.
  • elements는 인덱스를 통해 접근할 수 있습니다.
  • elements는 변경 가능합니다.
  • 크기가 고정되어 있습니다.
  • arrayOf()를 통해 생성할 수 있습니다.
    val pets = arrayOf("dog", "cat", "canary")

Arrays with mixed or single types

val mix = arrayOf("hats", 2)
val numbers = intArrayOf(1, 2, 3)

Combining arrays

+ 연산자를 사용해 결합할 수 있습니다.

val numbers = intArrayOf(1,2,3)
val numbers2 = intArrayOf(4,5,6)
val combined = numbers2 + numbers
println(Arrays.toString(combined)) // [4, 5, 6, 1, 2, 3]

Null safety

Kotlin은 null 참조 위험을 제거하는 것을 목표로 합니다.

Variables cannot be null

기본적으로 variables에서 null은 허용되지 않습니다.

var numberOfBooks: Int = null
// error: null can not be a value of a non-null type Int

Safe call operator

safe call operator(?)를 통해 variable에 null을 명시 할 수 있습니다.

var numberOfBooks: Int? = null

Testing for null

numberOfBooks이 null이 아닌지 확인한 뒤 값을 줄입니다.

var numberOfBooks = 6
if (numberOfBooks != null) {
    numberOfBooks = numberOfBooks.dec()
}

safe call operator를 사용한 방식입니다.

var numberOfBooks = 6
numberOfBooks = numberOfBooks?.dec()

The !! operator

variable가 null이 아닌 것이 확실한 경우 사용할 수 있습니다. 만약 variable이 null일 경우 NullPointerException이 발생하니 주의해야합니다. (특별한 상황을 제외하고는 사용하지 않는 것을 추천합니다.)

val len = s!!.length
// s 값이 널일 경우 NullPointerException 발생

Elvis operator

(?:) operator를 사용하여 null인 경우를 처리할 수 있습니다

val l = b?.length ?: -1

참조

좋은 웹페이지 즐겨찾기