본문 바로가기

개발일지

코틀린(Kotlin) 이모저모 공부[변수, 자료형, 형변환, 배열, 함수, 흐름제어, object]

var

: 일반적으로 통용되는 변수로, 언제든지 읽고 쓰기 가능

val

: 선언시에만 초기화 가능하며, 중간에 값을 변경할 수 없다

 

* 코틀린은 변수를 초기화하지 않을 경우 문법 error!

 

 

변수 선언시 자료형 뒤에 물음표(?)를 붙이면 -> null을 허용하는 nullable 변수로 선언

그외,, 변수의 초기화를 늦추는 lateinit, laze 속성

 

 

Property(속성)

: 클래스에 선언된 변수

 

Local Variable(로컬변수)

: 이 외의 Scope 내에 선언된 변수

 

 

 

형변환

: 하나의 변수에 지정된 자료형을 호환되는 다른 자료형으로 변경하는 기능

 

형변환 함수

toInt()

toString()

...

to + 변환될 자료형

 

* a: Any

Any 자료형 : 어느 자료형이든 상관없이 호환되는 코틀린 최상위 자료형

 

fun main() {
    var a: Int = 1234
    var b: Long = a.toLong()
    
    println(b)
}

명시적 형변환 - 변환될 자료형을 개발자가 직접 지정

 

 

배열

var inArr = arrayOf(1, 2, 3, 4, 5)

배열 선언

 

 

var nullArr = arrayOfNulls<Int>(5)

특정한 크기의 비어있는 배열 선언

제너릭  <>안에는 배열에 할당할 자료형, ()안에는 배열의 크기

 

fun main() {
    var intArr = arrayOf(1, 2, 3, 4, 5)
    
    var nullArr = arrayOfNulls<Int>(5)
    
    intArr[2] = 8
    
    println(intArr[4])
}

 

 

함수

fun main() {

    println(add(5, 6, 7))

}

 

fun add(a: Int, b: Int, c: Int): Int {

    return a + b + c

}

 

 

함수가 받아야 할 int 정수값 a, b, c      반환하는 값의 자료형 : 반환값이 없다면 생략

return을 만나면 함수 종료.

 

 

단일 표현식 함수로 코드를 작성하면?

fun main() {

    println(add(5, 6, 7))

}



fun add(a: Int, b: Int, c: Int) = a + b + c

 

 

흐름제어

@ : 모든 반복문을 수동으로 종료할 필요 없이

외부 반복문에 레이블 이름과 @ 기호를 달고 break 또는 continue 문에서 @ 기호와 레이블 이름을 달아주면

레이블이 달린 반복문을 기준으로 즉시 break 또는 continue 한다

 

* 따옴표 안에서 변수를 출력할 때, 변수명 앞에 $ 기호를 붙이면 변수 내용으로 대체되어 출력된다

 

fun main() {
    loop@for (i in 1..10) {
        for (j in 1..10) {
            if (i == 1 && j == 2) break@loop
            println("i : $i, j : $j")
        }
    }
}

 

 

 

오브젝트(Object)

여러 인스턴스 객체가 필요하지 않고 단 하나의 객체로 공통적인 속성과 함수를 사용해야할 때

굳이 class를 쓰지 않고 object를 쓴다

 

* class는 인스턴스 객체를 만들기 위한 틀로, 내부에 있는 속성과 함수를 사용하려면

  생성자를 통해 인스턴스 객체를 만들어야 한다

 

 

싱글톤 패턴을 언어차원으로 지원하는 것!

 

 

예제 코드

 

fun main() {
	println(Counter.count)

	Counter.countUp()
    
    println(Counter.count)
    
    Counter.clear()
    
    println(Counter.count)
}
    
object Counter {
	var count = 0
    
    fun countUp() {
    	count++
        }
    fun clear() {
    	count = 0
    }
}

 

기존 class안에 object 만들기 -> Companion Object!

Class 인스턴스 기능은 사용하되, 인스턴스 간에 공용으로 사용할 속성과 함수를 별도로 만드는 것

 

Static 멤버와 비슷.

 

fun main() {
	var a = Food("짜장")
	var b = Food("짬뽕")

	a.vote()

	b.vote()
	b.vote()

	println("${a.name} : ${a.count}")
	println("${b.name} : ${b.count}")
	println("총계 : ${Food.total}")

}

class Food (val name: String) {
	companion object {
		var total = 0
	}

	var count =0

	fun vote() {
		total++
		count++
	}

}

 total은 companion object로, 각 인스턴스 객체가 가지는 공통 속성이다