▷ 함수
▷ 반복문
- 함수
fun 함수명 (매개변수: 타입) : 반환 타입 { ... }
→ fun이라는 키워드를 사용한다.
fun some(data1: Int) : Int{
return data1
}
fun some(data2:Int) {
data2 = 20 //오류
}
→ 반환 타입을 선언할 수 있으며 생략하면 자동으로 Unit타입이 적용된다.
→ var이나 val 키워드를 사용할 수 없다.
→ val이 자동으로 적용되고 함수 안에서 매개변수 값을 변경할 수 없다.
fun main(){
fun some(data1: Int, data2:Int =20){
return data1*data2
}
println(some(10))
println(some(10,30)
println(some(data2=30 , data1=20)) //직접 지정 가능하다.
}
//결과값
// 200
// 300
// 600
→ 매개변수에 기본값을 선언할 수 있다.( = 디폴트 값을 지정할 수 있다)
- 컬렉션 타입
여러 개의 데이터를 표현하는 방법
- Array
배열을 Array클래스로 표현한다.
→ Array클래스의 생성자
<init> (size:Int, init:(Int) ->T)
val data1: Array<Int> = Array(3,{0}) //Array배열 선언
→ 첫 번째 매개변수는 배열의 크기이며 두 번째 매개변수는 초기값을 지정
→ 배열 타입은 제네릭으로 표현한다.
- 배열 접근 방법
fun main(){
val data1: Array<Int> = Array(3,{0}) //Array배열 선언
data1[0] = 10
data1[1] = 20
data1.set(2,30)
println(
"""
array size: ${data1.size}
array data: ${data1[0]}, ${data1[1]}, ${data1.get(2)}
"""
)
}
→ data1.set(2,30) = data1 배열에서 2번째 인덱스에 해당하는 데이터를 30으로 설정
→ ${data1 [0]} = data1 배열에서 인덱스 0에 해당하는 데이터를 가져오는 것
→ ${data1.get(2)} = data1 배열에서 2번째 인덱스에 해당하는 데이터를 가져오는 것
- 기초 타입의 배열
만약 배열의 데이터가 기초 타입이라면 Array를 사용하지 않고 기초 타입의 배열을 나타내는 클래스를 사용할 수 있다.
→ BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray
사용 예)
val data1: IntArray = IntArray(3,{0})
val data2: BooleanArray = BooleanArray(3,{false})
→ ArrayOf()라는 함수를 사용하면 배열을 선언할 때 값을 할당할 수 있다.
→ booleanArrayOf, byteArrayOf, charArrayOf, doubleArrayOf, floatArrayOf, intArrayOf, longArrayOf, shortArrayOf
fun main(){
val data1: Array<Int> = Array(10,20,30) //Array배열 선언
println(
"""
array size: ${data1.size}
array data: ${data1[0]}, ${data1[1]}, ${data1.get(2)}
"""
)
}
출력값
array size: 3
array data 10,20,30
- List, Set, Map
Collection인터페이스를 타입으로 표현한 클래스이다.
→ List : 순서가 있는 데이터 집합으로 데이터의 중복을 허용한다.
→ Set : 순서가 없으며 데이터의 중복을 허용하지 않는다.
→ Map : 키와 값으로 이루어진 데이터의 집합으로 순서가 없으며 키의 중복을 허용하지 않는다.
Collection 타입의 클래스는 가변(mutable)과 불변(immutable) 클래스로 나뉜다.
→ 불변 클래스 : 초기에 데이터를 대입하면 더 이상 변경할 수 없는 타입이다.
→ 가변 클래스 : 초기값을 대입한 이후에도 데이터를 추가하거나 변경할 수 있다.
구분 | 타입 | 함수 | 특징 |
List | List | listOf() | 불변 |
MutableList | mutalbeListOf() | 가변 | |
Set | Set | setOf() | 불변 |
MutableList | mutableSetOf() | 가변 | |
Map | Map | mapOf() | 불변 |
MutableMap | mutableMapOf() | 가변 |
리스트 사용 예
fun main(){
var List = listOf<Int>(10,20,30)
println(
"""
list size : ${list.size}
list data : ${list[0]}, ${list.get(1)}, ${list.get(2)}
"""
)
}
실행 결과
list size : 3
list data : 10, 20, 30
가변 리스트(MutableList) 사용 예
fun main(){
var MutableList = mutableListOf<Int>(10,20,30)
mutableList.add(3,40)
mutableList.set(0,50)
println(
"""
list size : ${mutableList.size}
list data : ${mutableList[0]}, ${mutableList.get(1)}, ${mutableList.get(2), mutableList.get(3)}
"""
)
}
실행 결과
list size : 4
list data : 50, 20, 30, 40
→ 데이터를 추가하거나 변경할 때는 add(), set() 함수를 이용한다.
fun main(){
var map = mapOf<String,String>(Pair("one","hello"),"two"to"world")
println(
"""
map size : ${map.size}
map data : ${map.get("one")}, ${map.get("two")}
"""
)
}
실행결과
map size : 2
map data : hello, world
→ Pair를 사용할 수도 있고 A to B를 사용할 수도 있다.
- 조건문
- if-else문
다른 언어와 사용법은 같다.
그런데 코틀린에서 if-else문은 표현식으로 사용할 수 있다.
→ 표현식 : 결괏값을 반환하는 계산식
fun main(){
var data = 10
val result = if (data >0){
println("data > 0")
true
} else {
println("data <= 0")
false
}
println(result)
}
실행결과
data >0
true
→ if-else문으로 조건에 맞는 코드를 실행하여 그 결괏값을 result라는 변수에 대입하여 사용한 예
→ if-else문으로 사용할 경우 else문을 생략할 수 없다.
→ if-else 표현식이 반환하는 결괏값은 각 영역의 마지막 줄에 해당한다.
- when
fun main(){
var data1 = 10
when (data){
10 -> println("data is 10")
20 -> println("data is 20")
else ->{
println("data is not valid data")
}
}
}
실행 결과
data is 10
when 키워드 소괄호 안에 넣은 데이터가 조건이 되고 해당 조건 -> 오른쪽에 있는 코드가 실행된다.
→ 응용 예시 1
fun main(){
var data: Any =10
when (data){
is String -> println("data is String")
20, 30 -> println("data is 20 or 30")
in 1..10 -> println("data is 1...10")
else -> println("data is not valid")
}
}
실행 결과
data is 1...10
→ is : 타입을 확인하는 연산자
→ in : 범위 지정 연산자
is String은 데이터가 String타입이면 참이고, in 1.. 10은 데이터가 1부터 10까지 범위이면 참
→ 응용 예시 2
fun main(){
var data1 = 10
when{
data1 <=0 -> println("data is <= 0")
data1 >100 -> println("data is > 100")
else -> println("data is valid")
}
}
→ when 데이터를 명시하지 않고 사용할 수 있다.
→ when 표현식
fun main() {
var data1 = 10
val result = when {
data1 <= 0 -> "data is <= 0"
data1 > 100 -> "data is > 100"
else -> "data is valid"
}
println(result)
}
→ when조건을 명시하지 않아도 if문처럼 표현식으로 사용할 수 있다.
→ 표현식 사용 시 else문을 생략할 수 없다.
- 반복문
- for문
fun main() {
var sum: Int =10
for(i in 1..10){
sum+= i
}
println(sum)
}
실행결과
65
for문은 다른 언어와 같지만 조건문에서 in을 사용한다.
→ for문 조건문 종류
for(i in 1..10){...} // 1부터 10까지 1씩 증가
for(i in 1 until 10){...} //1부터 9까지 1씩증가(10 미포함)
for(i in 2..10 step 2){...} // 2부터 10까지 2씩증가
for(i in 10 downTo 1){...} //10부터 1까지 1씩 감소
→ 컬렉션 타입
var data = arrayOf<Int>(10,20,30)
for(i in data.indices){
print(data[i])
if(i!==data.size-1)print(",")
}
for((index,value)in data.withIndex()){
print(value)
if(index!== data.size-1)print(",")
}
위 코드처럼 컬렉션 타입의 배열을 반복할 때. indices()를 활용하여 컬렉션 타입의 인덱스 값을 가져오거나. withIndex()를 활용하여 인덱스와 실제 데이터를 함께 가져올 수 있다.
- while문
fun main() {
var x = 0
var sum1 = 0
while (x < 10) {
sum1 += ++x
}
println(sum1)
}
다른 언어와 같은 방식으로 쓰인다.
반복문까지 공부를 하면서 자바를 알고 공부하니까 이해하기가 쉬워서 좋았다.
'KOTLIN' 카테고리의 다른 글
[Kotlin] 공부 7일차 (2022-01-19) (0) | 2022.01.19 |
---|---|
[Kotlin] 공부 6일차 (2022-01-18) (0) | 2022.01.18 |
[Kotlin] 공부 4일차 (2022-01-15) (0) | 2022.01.16 |
[Kotlin] 공부 3일차 (2022-01-14) (0) | 2022.01.15 |
[Kotlin] 공부 2일차 (2021-01-08) (0) | 2022.01.09 |