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
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin 요약 정리] 6. 프로퍼티 (0) | 2019.04.09 |
---|---|
[Kotlin 요약 정리] 5. 클래스 (0) | 2019.04.08 |
[Kotlin 요약 정리] 4. 흐름 제어 구문과 연산자 (0) | 2019.04.08 |
[Kotlin 요약 정리] 3. 데이터 타입 (0) | 2019.04.08 |
[Kotlin 요약 정리] 1. 코틀린 기본 (0) | 2019.04.08 |