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로, 각 인스턴스 객체가 가지는 공통 속성이다
'개발일지' 카테고리의 다른 글
[Android] Activity 생명주기(Life-Cycle) (0) | 2023.04.15 |
---|---|
[Kotlin] 필드와 변수, 데이터 타입, 늦은 초기화 (0) | 2023.03.21 |
인터페이스(Interface)와 추상화(abstract) (0) | 2023.01.05 |
코드리뷰와 테스트 (0) | 2023.01.03 |
Git-flow (1) | 2023.01.03 |