본문 바로가기

# 02/코틀린

[Kotlin] 함수 선언하고 호출하기

반응형

함수를 선언할때는 매개변수 함수를 사용할 때는 인자


fun sum(a: Int, b: Int) : Int {

var sum = a + b

return sum

}


단! 매개변수에 val이나 var과 같은 선언 키워드는 사용하지 않는다.

빨간색 Int가 리턴값의 자료형을 알려줌. 중괄호 안을 함수의 블럭이라 하고 블럭안이 변수 Int a, b 는 지역변수로 메모리상 스택에 존재


fun 함수 이름   ( [변수 이름: 자료형, 변수 이름: 자료형..] ) : [반환값의 자료형]  {

표현식...

[return 반환값]

}


반환값의 자료형이 존재하지 않을 때는 Unit, 매개변수 없을시에 생략 가능


일반적인 함수의 모습

fun sum(a: Int, b: Int) : Int {

return a + b

}


간략화된 함수

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

fun sum(a: Int, b: Int) = a+b   // 반환값이 Int 형 추론가능 추론가능시 생략할 수 있다.






fun sum(a: Int, b: Int) : Int {

var sum = a + b

return sum

}


fun main() {

val result1 = sum(3,2)

val result1 = sum(6,7)


println(result1)

println(result2)

}


// main 함수는 진입함수로 맨 처음 시작되는 함수





함수와 스택 프레임 이해하기


fun main() {

val num1 = 10

val num2 = 3

val result : Int


result = max(num1, num2)

println(result)

}


fun max (a: Int, b: Int) = if (a>b) a else b



낮은 주소 힙 - 객체 등 할당




높은 주소 스택 - 임시변수 등 할당



1. 진입함수 - main () 함수의 프레임 스택에 생성 - 지역변수들, 항 스택, 상수 풀 등

2. num1 스택에 쌓임

3. num2 스택에 쌓임

4. result 값을 할당되지 않은채 ? 스택에 쌓임

5. max() 함수의 프레임 스택에 생성

6. max함수의 지역변수들 a, b 차례대로 스택에 쌓임

7. max함수 판단문 마치고 result에 해당 결과문 result에 담김 스택에 max함수 프레임 사라짐

8. main() 함수도 결과 나오면 스택에서 사라짐




자기를 계속 참조하는 함수 재귀함수

닫지않고 무한정 참조하면 어느 순간 한계발생 메모리 할당 불가로 스택이 꽉차서 더이상 안들어가는 상태 Stackoverflow!


참조가 제거되지 않고 남아있어 메모리 누출! 결국 OOM(Out-of-memory)로 나타난다.




반환값이 없는 함수 - Unit 형 (생략가능!!)

fun printSum( a : Int, b : Int ) Unit {

println("sum of $a and $b is ${a+b}")

}


fun printSum(a: Int, b: Int) {

println ("sum of $a and $b is ${a + b}")

}




매개변수의 기본값

fun add (name: String, email: String) {

 // name 과 email을 회원 목록에 저장

}


add.("박현규", "default")

add.("박용규", "default")

add.("함진아", "default")


fun add (name: String, email: String = "default") {

 // name 과 email을 회원 목록에 저장

 // email의 기본값은 "default". 즉, email로 넘어오는 값이 없으면 자동으로 "default" 입력

}


add.("박현규") // email 인자를 생략하여 호출(name만 전달됨)



매개변수 이름과 함께 함수 호출하기

fun main (args: Array<String> ) {

namedParam (x = 200, z = 100) // x, z의 이름과 함께 함수 호출 (y는 기본값 사용)

namedParam (z = 150)             // z의 이름과 함께 함수 호출 (x와 y는 기본 값으로 지정됨)

}


fun namedParam( x: Int = 100, y: Int = 200, z: Int) {

println(x + y + z)

}



가변적인 매개변수 받기

fun main(args: Array<String>) {

normalVarargs(1, 2, 3, 4)   // 4개의 인자 구성

normalVarargs(4, 5, 6)      // 3개의 인자 구성

}


fun normalVarargs(vararg counts : Int) {


for (num in counts) {

println("$num ")

}

print("\n")

}



1 2 3 4

4 5 6


반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] 고차 함수와 람다식  (0) 2019.07.04
[Kotlin] 함수형 프로그래밍  (0) 2019.07.04
[Kotlin] 자료형 변환  (0) 2019.07.03
[Kotlin] 변수의 null  (0) 2019.07.03
[Kotlin] 기본 연산자  (0) 2019.07.03