Android
[Kotlin] 코틀린 기본 문법(2) - 배열, 리스트, 반복문, null, 클래스
K_EY
2024. 4. 9. 19:36
05_배열과 리스트(Array, List)
☾ Array
기본적으로 메모리가 할당되어 있어야 한다.
한 배열 안에 다양한 타입이 들어갈 수 있다.
값을 변경할 수 있다.
val array = arrayOf(1,2,3)
val array2 = arrayOf(1,"d",3.4f)
array[0] = 3 // 값 변경 가능
☾ List
1. List : 값을 지정하면 변경이 불가능하다.(read only)
val list = listOf(1,2,3)
val list2 = listOf(1,"d",11L)
val result = list.get(0) // 값 읽기만 가능
2. MutableList : 값을 변경할 수 있다.
val arrayList = arrayListOf<Int>() // 값을 추가해도 참조변수의 값은 그대로이므로 val 사용 가능
arrayList.add(10)
arrayList.add(20)
// val이므로 참조변수 값 변경은 불가
// arrayList = arrayListOf()
06_반복문(for, while)
☾ for
range의 원소들이 차례대로 변수에 들어가서 실행
💡 for (변수 in range) { }
val students : ArrayList<String> = arrayListOf("james", "tom", "henry")
for (name in students) {
println("${name}")
}
‘a 이상 b 이하’를 표현하고 싶을 때는 a..b로 작성
var sum : Int = 0
for (i in 1..10 step 2) { // 1 이상 10 이하
sum += i
}
println(sum)
증가하는 숫자를 변경하고 싶을 때는 step 사용
var sum : Int = 0
for (i in 1..10 step 2) { // 1 이상 10 이하 2 step씩
sum += i
}
println(sum)
‘a 이상 b 미만’을 표현하고 싶을 때는 a until b로 작성
for (i in 1 until 10) { // 1 이상 10 미만
print("${i} ")
}
println()
역순으로 표현하고 싶을 때는 downTo 사용
for (i in 10 downTo 1) { // 10부터 1까지
print("${i} ")
}
println()
인덱스와 함께 출력하고 싶을 때는 withIndex 메소드 사용
val students : ArrayList<String> = arrayListOf("james", "tom", "henry")
var index = 0
for ((index, name ) in students.withIndex()) {
println("${index+1}번쩨 학생 : ${name}")
}
☾ while
var index = 0
while (index < 10) {
println("current index : ${index}")
index++
}
07_Nullable vs NonNull
기본적으로 변수는 NonNull이다.
☾ Nullable
타입명 뒤에 ? 붙이면 null을 가질 수 있다.
var name = "jojo" // null 불가
var nullName : String? = null // null 가능
// 만약 nullName이 null이면 null 반환하고, null이 아니면 uppercase 실행
var nullNameInUpperCase = nullName?.uppercase()
- 엘비스 연산자(Elvis Operation) ?:
: nullable 변수의 디폴트 값 만들어줄 때 사용한다.
var name = "jojo"
val lastName : String? = null
val fullName = name+ " " + (lastName?: "No lastName")
println(fullName)
- let
자신의 receiver 객체를 람다식 내부로 옮겨서 실행한다.
null이 아닌 경우에만 실행된다.
val email : String? = "12345@gmail.com"
email?.let{ // email이 null 아닌 경우에만 실행
println("my email is ${email}")
}
- !!
null이 아니라는 것을 보증한다.
null이 아니라고 확신할 수 있을 때만 사용해야 한다.
fun ignoreNulls(str : String?) {
val mNotNull : String = str!!
val upper = mNotNull.uppercase()
}
08_클래스(class)
파일 이름과 클래스 이름이 반드시 일치하지 않아도 된다.
한 파일 안에 여러 클래스가 존재해도 된다.
💡 class 클래스이름 contructor(변수 선언) { }
class Human constructor(val name : String = "Annoymous") {
fun eatingCake() {
println("This is so yummy")
}
open fun singASong() {
println("lalala")
}
}
- 생성자
- 주 생성자 : 인스턴스가 생성될 때 작동
- 부 생성자 : 반드시 주 생성자의 위임을 받아야 함
open class Human constructor(val name : String = "Annoymous") {
// 주 생성자
init {
println("New human has been born")
}
// 부 생성자
constructor(name : String, age :Int) : this(name) {
println("My name is ${name}, ${age} years old")
}
}
- 상속
상속 받으려면 상속되는 클래스에 open 선언이 필요하다.
open class Human constructor(val name : String = "Annoymous") {
fun eatingCake() {
println("This is so yummy")
}
open fun singASong() {
println("lalala")
}
}
// 상속
class Korean : Human() {
override fun singASong() {
super.singASong()
println("라라라")
println("My name is ${name}")
}
}