관리 메뉴

HeeJ's

[01] 안드로이드 Kotlin 사전 공부 (1) 본문

<Project>/<KBSC>_2021

[01] 안드로이드 Kotlin 사전 공부 (1)

meow00 2021. 9. 9. 00:57

Kotlin

- 자바와 100% 상호 호환 -> 자바 코드를 완전히 대체 가능

- 자바보다 문법이 간결함

- 데이터 형식 선언 없이 변수를 선언할 수 있음

 

 

변수와 데이터 형식

fun main() {
    var var1 : Int = 10
    var var2 : Char = '안'
    var var3 : String = "안녕하세요"
    println(var1)
    println(var2)
    println(var3)
}

//출력 결과
// 10
// 안
// 안녕하세요

코틀린에서는 ;(세미콜론)을 사용하지 않는다.

char는 한 글자만 지원하고, 문자열을 사용하고 싶을 땐 String을 사용한다.

 

 

fun main(){
    var var1 = 10
    var var2 = '안'
    var var3 = "안녕하세요"
    
    println(var1)
    println(var2)
    println(var3)
}

// 출력 결과
// 10
// 안
// 안녕하세요

* 암시적 선언

: 변수의 데이터 형식을 지정하지 않고, 대입되는 값에 따라 자동으로 변수의 데이터 형식 지정

  단, 초기화를 하지 않는 경우, 변수의 데이터 형식을 명시해야 함

 

 

var myVar : Int = 10
myVar = 20

val myVal : Int = 10
myVal = 20 // 오류

* val (value)

- 상수 선언

- var이 아닌 val을 사용하는 경우, 변수 선언과 동시에 값을 대입하거나, 한 번만 값을 대입할 수 있다.

 

데이터 형식 변환

var var1 : Int = "1024".toInt()
var var2 : Double = "10.2".toDouble()

- 캐스팅 연산자 사용

- Kotlin에서 제공하는 toInt(), toFloat() 등의 정적 메소드 사용

 

null 사용

var notNull : Int = null //오류
var Null : Int? = null

- null을 대입하고 싶다면 데이터 형식 뒤에 ?를 붙여야 대입 가능

 

 

null 값을 사용하지 않는 경우

var ary = ArrayList<int>(10) //10개의 배열 리스트
ary!!.add(1) // 값 1을 추가
ary!!.add() // 오류

: ary에는 null이 들어가면 오류 발생

 

when

when (식) {
    값1 -> // 값1이면 실행
    값2 -> // 값2면 실행
    
    else -> // 해당하는 부분이 없으면 실행
}

- 다중 분기로 사용

  cf. case문

 

ex.

fun main(){
    var count = 88
    var jumsu : Int = (count / 10) * 10
    
    when (jumsu) {
        100 -> println("합격(장학생)")
        90 -> println("합격(장학생)")
        80, 70, 60 -> println("합격")
        // in 60 ... 80 -> println("합격") 으로도 표현 가능
        else -> println("불합격")
    }
}

 

배열

: 여러 개의 데이터를 하나의 변수에 저장하기 위해 사용

일차원 배열 - Array(), arrayOf(), arrayOfNulls()

var 배열명 = Array<데이터 형식>(개수, {초깃값})
var 배열명 = Array<데이터 형식>(개수) {초깃값}

//ex
var ary1 = Array<Int>(4, {0})
ary1[0] = 10
ary1[3] = 40

//arrayOf()
val ary2 = arrayOf(1,2,3,4) //정수형으로 초기화
val ary3 = arrayOf("cat","dog","lion") //문자열형으로 초기화

//arrayOfNulls()
val ary4 = arrayOfNulls<Int>(3) // Int형을 가진 크기가 3인 빈 배열 생성

 

이차원 배열 선언

var 배열명 = Array<배열 데이터 형식>(행 개수, {배열 데이터 형식(열 개수)})

//ex
var twoAry = Array<IntArray>(3, {IntArray)(3)})
twoAry[0][0] = 10
twoAry[1][2] = 20

 

배열을 선언하면서 값을 바로 대입하는 것도 가능하다.

var ary : IntArray = intArrayOf(1,2,3)

 

ArrayList

var ary = ArrayList<Int>(5)
ary.add(15)
ary.add(35)
// ary[0]에는 15, ary[1]에는 35가 대입
var sum = ary.get(0) + ary.get(1) // 50

 

반복문(for, while)

 

for

for (변수 in 시작..끝 step 증가량){
    // 반복 실행
}

//배열의 개수만큼 반복하는 방법
for (변수 in 배열명.indicies) {
    // 반복 실행
}

//배열의 모든 값을 출력하는 방법
var ary : IntArray = intArrayOf(1,2,3,4)
for (i in ary.indicies) {
    println(one[i])
}

//첨자 없이 바로 배열의 값을 하나씩 처리하는 방법
for (변수 in 배열명){
    //이 부분에서 변수 사용
}
// -> 배열의 내용이 하나씩 변수에 대입된 후 for문 반복
//    -> 배열의 개수만큼 for문이 반복되게 됨

 

while

while(조건식) {
    //조건식이 true인 동안 실행
}

//ex
fun main() {
    var sum = 0
    var i = 0
    
    while(i < 10){
        sum += i
        i++
    }
    println("sum : $sum")
}
// sum : 55

 

함수

fun 함수 이름(변수명 : 자료형, 변수명 : 자료형, ... ) : 반환값 자료형 {
    표현식
    ...
    return 반환값
}

// ex
fun sum(a: Int, b: Int) : Int {
    var sum = a + b
    return sum
}

 

함수 간략하게 선언하기

//일반적 선언
fun sum (a : Int, b : Int) : Int {
    return a + b
}

//간략한 선언
fun sum(a: Int, b: Int) : Int = a + b //함수가 간단할 때(한 줄)
fum sum(a: Int, b: Int) = a + b //return 타입 명시 필요X

 

람다식(Lambda Expression)

{ x, y -> x + y } //함수의 이름이 없음

//ex
fun main() {
    var result : Int
    val multi = { x: Int, y: Int -> x * y }
    
    result = multi(10, 20)
    println(result)
}

 

클래스와 인스턴스

 

클래스

- 변수와 메소드로 구성

//car 클래스 예제

class Car {
    var color : String = ""
    var speed : Int = 0
    
    fun upSpeed(value : Int) {
        if (speed + value >= 200 )
            speed = 200
        else
            speed = speed + value
    }
    fun downSpeed(value : Int) {
        if (speed - value <= 0)
            speed = 0
        else
            speed = speed - value
    }
}

fun main() {
    var myCar1 : Car = Car()
    myCar1.color = "빨강"
    myCar1.speed = 0
    
    var myCar2 : Car = Car()
    myCar2.color = "검정"
    myCar2.speed = 20
    
    var myCar3 : Car = Car()
    myCar3.color = "하양"
    myCar3.speed = 30
}

 

생성자 추가

class Car {
    var color : String = ""
    var speed : Int = 0
    
    constructor(color: String, speed : Int) {
        this.color = color
        this.speed = speed
    }
    
    fun upSpeed(value : Int) {
        if (speed + value >= 200)
            speed = 200
        else
            speed = speed + value
        }
    fun downSpeed(value : Int) {
        if (speed - value <= 0)
            speed = 0
        else
            speed = speed - value
    }
}

fun main() {
    var myCar1 : Car = Car("빨강", 0)
    var myCar2 : Car = Car("검정", 20)
    var myCar3 : Car = Car("하양", 30)
}