반응형
이 포스팅에서 작성하는 내용은 자바 개발자를 위한 코틀린 입문 에서 발췌하였습니다.
https://inf.run/BpYf
1. 배열
- arrayOf를 이용해서 배열의 원소와 함께 생성할 수 있다.
- indices : 배열의 범위를 나타낸다. (0부터 ~ 마지막 index까지)
- withIndex() : 이 함수를 이용하면 index, value 를 가져올 수 있다.
fun main() {
/** 1. Array **/
val array = arrayOf("가", "나")
// 1) Java 처럼 일반적인 반복문으로 접근하는 방법
println("[1]")
for(i in array.indices) { // indices : 배열의 범위를 나타냄(0 ~ 마지막 index)
println("Index : " + i + ", Value : " + array[i])
}
val array2 = array.plus("다") // 배열을 추가해서 반환할 수 있다.
// 2) index, value 를 반복문에서 얻는 방법
println("[2]")
for((index, value) in array2.withIndex()) { // withIndex()를 이용하면 index, value 를 가져올 수 있다.
println("Index : $index, Value : $value")
}
}
2. List
- Collection을 생성할 때, 반드시 불변인 지 가변인 지 설정 후 생성해야 한다.
- List의 기본 구현체 : ArrayList
- 불변 Collection : 등록, 삭제가 불가능하다. (Collection 내부의 데이터는 수정 가능)
fun main() {
val numberList = listOf(1,2,3) // listOf : 불변 리스트 생성
val emptyNumberList = emptyList<Int>() // emptyList<>() 로 빈 리스트를 만들 때, 타입을 추론할 수 없을 경우 타입을 명시해줘야 한다.
val editablenumberList = mutableListOf(1,2,3) // mutableListOf() : 가변 리스트 생성
editablenumberList.add(4)
// 리스트에 직접 접근
println(numberList.get(0))
println(numberList[0])
// 1) Java 의 foreach 처럼 사용
println("[1]")
for(number in numberList){
println(number)
}
// 2) withIndex() 사용
println("[2]")
for((index, value) in editablenumberList.withIndex()){
println("Index: $index, Value: $value")
}
}
3. Set
- List와 다르게, 순서가 없고 값의 중복을 허용하지 않는 자료 구조
- 위의 차이점을 제외하면 사용 방법이 비슷하다.
- setOf() : 불변 Set 생성
- mutableSetOf() : 가변 Set 생성(기본 구현체: LinkedHashSet)
fun main() {
val numberSet = setOf(1,2,3) // setOf() : 불변 Set 생성
val editableNumberSet = mutableSetOf(1,2,3) // mutableSetOf() : 가변 Set 생성(기본 구현체: LinkedHashSet)
for(number in numberSet)
println(number)
for((a, b) in numberSet.withIndex())
println("Index : $a, Value: $b")
}
4. Map
- mutableMapOf : 가변 map 생성
- mapOf : 불변 map 생성 (key to value 로 표시)
fun main() {
val fruitMap = mutableMapOf<String, String>() // mutableMapOf : 가변 map 생성
val map = mapOf<String, String>("apple" to "사과") // mapOf : 불변 map 생성 (key to value 로 표시)
// (java) put (put도 사용 가능)
fruitMap["apple"] = "사과"
fruitMap["orange"] = "오렌지"
// map 의 Key 만 가져와서 탐색
for(key in fruitMap.keys)
println("KEY : " + key + ", VALUE : " + fruitMap[key])
// key 와 value 를 가져와서 탐색
for((K, V) in fruitMap.entries)
println("KEY : " + K + ", VALUE : " + V)
}
5. Collection과 Null
- List<String?> : LIst에 null이 들어갈 수 없지만, 원소는 null이 들어갈 수 있다.
- List<String>? : List에 null이 들어갈 수 있지만, 원소는 null이 들어갈 수 없다.
- List<String?>? List에 null이 들어갈 수 있고, 원소도 null이 들어갈 수 있다.
6. 확장함수
- 확장 함수 : 기존에 있던 클래스의 멤버 함수를 임의로 생성할 수 있는 기능
- 클래스의 private, protected 멤버를 가져올 수 없음 (캡슐화가 깨지는 걸 방지하기 위함)
- 기존 멤버 함수와 이름이 같을 경우, 멤버 함수를 우선적으로 호출한다.
- 즉, 추후에 확장 함수 이름과 같은 멤버 함수가 등장하게 된다면 오류가 발생할 수 있다.
- 확장함수는 현재 타입을 기준으로 호출된다.
- 정적 메서드로서 사용할 수 있다.
- 확장프로퍼티와도 연결이 가능하다
fun main() {
var str = "hhhhhhhh"
println(str.firstChar())
}
// 확장 함수 : 기존에 있던 클래스의 멤버 함수를 임의로 생성할 수 있는 기능 (클래스의 private, protected 멤버를 가져올 수 없음)
fun String.firstChar(): Char {
return this[0] // this 를 이용해서 실제 클래스 안의 값에 접근할 수 있다.
}
// 확장 함수처럼 확장 프로퍼티로서도 사용 가능하다.
val String.firstChar: Char
get() = this[0]
7. 중위함수
- 중위 함수를 이용해서 함수 호출 방식을 변경할 수 있다. (param1 함수이름 param2)
fun main() {
// 일반적인 함수 호출
println(8.minus2(5))
// 중위 함수 방식 호출
println(8 minus2 5)
}
// infix : 중위 함수 ( param1 minus2 param2 와 같이 함수를 호출할 수 있게 됨)
// 멤버함수에도 붙일 수 있다.
infix fun Int.minus2(num: Int): Int = this - num
8. inline 함수
- 함수에 inline을 붙이면, 컴파일 될 때 함수를 호출한 곳에 함수 본문이 삽입된다.
반응형
'BE > Kotlin' 카테고리의 다른 글
[Kotlin] Lambda Expression (0) | 2023.03.10 |
---|---|
[Kotlin] object 키워드, 클래스 관련 (0) | 2023.03.07 |
[Kotlin] 클래스, 상속, 접근제어자 (0) | 2023.03.04 |
[Kotlin] 조건문, 반복분, 예외처리 (0) | 2023.02.24 |
[Kotlin] 변수, 타입 사용 방법 (0) | 2023.02.22 |