KOTLIN

[Kotlin] 공부 5일차 (2022-01-17)

HJ39 2022. 1. 18. 00:41

함수

더보기

조건문

    ▶ if-else문

    ▶ when문

반복문

 

 

  • 함수
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