[Kotlin][학습노트] 함수 선언과 호출

tora·2021년 7월 4일

함수의 선언

  • fun 함수명(arg1: 자료형, arg2: 자료형, ...): 반환자료형 {
    ...
    return ret
    }
  • 반환값이 없는 경우 : Unit
    --> 함수 선언 시 반환자료형에 :Unit 또는 생략 가능
    --> java void 하고는 다르게, 반환값이 없음을 나타내는 Unit 변수를 반환하는 구조
  • 함수 간략 표현식 :
    fun 함수명(arg1: 자료형, arg2: 자료형, ...) = ret식
    -> 함수 간략 표현 시, 반환자료형이 추론 가능하다면 생략 가능
    (중괄호 표현식에서 생략하는 것은 컴파일 에러!)
	fun sum(a: Int, b: Int) = a + b
	// Type mismatch: inferred type is Int but Unit was expected
	fun sum(a: Int, b: Int) { 
    		return a + b
    	}
  • default 값 지정
    --> 함수 선언 시 매개변수에 대해 값을 함께 지정하여,
    호출 시 생략 가능 및 default 값으로 사용

  • 함수 호출 시, 매개변수 이름과 함께 인자값 전달
    --> 매개변수 순서를 다르게 호출하거나, 특정 매개변수만 default 값으로 생략할때 사용 가능

fun sum(a:Int, b:Int = 1, c:Int):Int { //b default 지정
    var ret = a - b + c
    return ret
}

fun main() {
    
    println(sum(1, 2)) // 에러 No value passed for parameter 'c'
    
    //매개변수 이름과 함께 값 전달
    println(sum(a=1, c=2)) //2
}
  • 가변인자 vararg
    --> 함수 매개변수 선언 시 vararg 형태로 선언하면 호출 시 여러 개 인자값을 배열 형태로 전달 가능
    --> (cf) val / var 선언은 컴파일 에러
    --> 가변인자 뒤로 다른 매개변수를 선언하면, 호출 시에는 이름과 함께 호출해야함
fun main() {
    sum2(1, 7, 3)	//컴파일에러 : No value passed for parameter 'b'
    sum2(1, 7, b=3)	//4 10
}

fun sum2(vararg a:Int, b:Int) {
    for (num in a) {
        println(num + b)
    }
    
}

함수와 스택 프레임

  • kotlin 프로그램에서 각 함수가 호출되면, 스택 메모리에 공간이 할당(push) 되어 수행 되고, 종료 시 사라지는(pop) 구조

[오늘의 궁금]

Q1) 스택 메모리 : 임시 / 힙 메모리 : 동적 메모리 공간 이라는데, 정확히 어떤 내용일까?

> [오늘의 궁금]은 앞으로 배우면서 Answer을 채워갈 예정입니다.
(누군가 도움을 주신다면 감사할거에요 :D )


0개의 댓글