본문 바로가기

프로그래밍/Kotlin

[Kotlin 요약 정리] 2. 변수와 함수

2. 변수와 함수

1) 변수 선언 및 초기화

- 선언 형식: val(var) 변수명 [: 타입] = 값

- val: 값 변경 불가 / var: 값 변경 가능

ex) val num: Int = 10

- 타입이 생략되어도 타입 추론을 통해 자동 지정된다.

- 최상위 레벨 혹은 클래스의 멤버 변수는 선언과 동시에 초기화를 해주어야 한다. 함수 내 지역변수는 선언 후 초기화가 가능하다.

- 타입에 ?를 추가해서 null을 허용하지 않는 한 null값은 허용되지 않는다.

ex) val num: Int? = null

- 코틀린에서의 변수는 getter와 setter를 가진 프로퍼티이다. 따라서 val로 선언했더라도 get 함수를 통해  다른 값을 받을 수 있다. 항상 초기값만 반환하는 변수를 만들고 싶을 때는 const 예약어를 사용한다.

ex) const val num = 10

 

2) 함수

- 선언 형식: fun 함수명(매개변수명 : 타입) : 반환타입 { }

ex) fun sum(a: Int, b: Int): Int { return a + b }

- 함수의 매개변수는 변경할 수 없다.(val로 적용)

- 의미있는 반환 값이 없을 때는 Unit 타입을 명시한다.(기본형)

- 단일 구문으로 값을 반환하는 함수의 경우 괄호와 return, 반환 타입을 생략할 수 있다.

ex) fun sum(a: Int, b: Int) = a + b

- 대입 연산자를 통해 매개변수가 없을 때 사용할할 기본 인수를 설정할 수 있다. 만약 매개변수가 여러개라면 변수를 명확하게 지정해야 한다.

ex) fun hello(name: String = "Jason", no: Int) { println(no+": Hello "+name) }

hello(no=10)

 

3) 중위 표현식

- 연산자를 피연산자의 중간 키워드로 사용하는 개념

- 선언 형식: infix fun 함수명(매개변수) {}

- 사용 형식: 클래스명 함수명 인수

- 조건: 매개변수가 1개인 클래스의 멤버 함수 혹은 확장 함수

 

ex1)

class Example {

   infix fun infixExample(x: Int) = x * 10

}



fun main(args: Array<String>){

   val ex = Example()

   println(ex infixExample 10)  // ex.infixExample(10) 과 같은 결과

}

// 결과 100

 

ex2)

infix fun Int.infixExample(x: Int) = x * 10



fun main(args: Array<String>){

   println(0 infixExample 10) // Int의 확장 함수이기 때문에 좌측의 0은 어떤 Int값이라도 무관

}

// 결과 100

 

4) 가변 인수

- 인수의 개수와 타입에 상관없이 함수가 호출되도록 선언하는 방식

- 선언 형식: fun <T> 함수명(vararg array: T) {}

ex)

fun varargEX(vararg numbers: Int): Int{

   var count: Int = 0

   numbers.forEach { count+= it }

   return count

}



fun main() {

   val result = varargEX(1,2,3,4,5,6,7,8,9,10)

   println(result)

}

// 결과 55

 

5) 재귀 함수

- 함수 내에서 자신(함수)을 호출하는 것

- tailrec 예약어를 사용하면 재귀함수가 아닌 일반 반복문으로 변환된다.

- 선언 형식: tailrec fun 함수명(매개변수) { }

ex)

tailrec fun tailrecEX(no: Int, count: Int = 1){

   println(no)

   if(no == count) return

   else tailrecEX(no-1, count)

}



fun main() {

   tailrecEX(5)

}

// 결과 5 4 3 2 1