fun sum(a: Int, b: Int): Int {
var sum = a + b
return sum
}
📌 함수의 선언
fun sum(a: Int, b: Int): Int {
var sum = a + b
return sum
}
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 // 식이 본문인 함수
package chap03.section1
fun sum(a: Int, b: Int): Int { // sum() 함수 선언
var sum = a + b
return sum
}
fun main() {
val result1 = sum(3, 2)
val result2 = sum(6, 7)
println(result1)
println(result2)
}
- 인자 : 함수를 호출할 때 함수이름 뒤 ( ) 안에 사용된 것
- 매개변수 : 함수를 선언할 때 함수이름 뒤 ( ) 안에 사용된 것
🔔 함수 호출 시 인자의 값이 매개변수로 전달된다.
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

함수의 각 정보는 프레임(Frame)이라는 정보로 스택 메모리의 높은 주소부터 거꾸로 자라듯이 채워져간다.
지역 변수는 함수가 종료되면 스택 프레임과 함께 사라지는 임시 변수이다.

fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
fun printSum(a: Int, b: Int) { // 반환값의 자료형 Unit 추론
println("sum of $a and $b ${a + b}")
}
fun printSum(a: Int, b: Int) = println("sum of $a and $b is ${a + b}")
fun add(name: String, email: String = "default") {
...
}
add("박현규", "default")
add("박용규", "default")
...
fun add(name: String, email: String = "default") {
...
}
add("Youngdeok") // email로 넘어오는 값이 없으면 자동으로 "default" 입력
fun main() {
val name = "홍길동"
val email = "hong@example.kr"
add(name)
add(name, email)
add("둘리", "dooly@example.kr")
defaultArgs()
defaultArgs(200)
}
fun add(name: String, email: String = "default") {
val output = "${name}님의 이메일은 ${email}입니다."
println(output)
}
fun defaultArgs(x: Int = 100, y: Int = 200) { // 반환값 자료형 Unit이 생략됨
println(x + y)
}
🔑 실행 결과
홍길동님의 이메일은 default입니다.
홍길동님의 이메일은 hong@example.kr입니다.
둘리님의 이메일은 dooly@example.kr입니다.
300
400
fun main(args: Array<String>) {
namedParam(x = 200, y = 100)
namedParam(x = 150)
}
fun namedParam(x: Int = 100, y: Int = 200, x: Int) {
println(x + y + z)
}
// 정수 매개변수 3개를 전달받아 처리하는 함수
fun print3Numbers(num1: Int, num2: Int, num3: Int) {
...
}
// 정수 매개변수 4개를 전달받아 처리하는 함수
fun print4Numbers(num1: Int, num2: Int, num3: Int, num4: Int) {
...
}
🔥 vararg 키워드
fun main(args: Array<Sting>) {
normalVarargs(1, 2, 3, 4) // 4개의 인자 구성
normalVarages(5, 6, 7)
}
fun normalVarargs(vararg counts: Int) { // counts는 배열형 가변 매개변수
for (num in counts) {
print("$num ")
print("${counts[i]}") // 위 println() 문장과 같은 결과를 출력
}
print("\n")
}