031 매개변수(Parameter)와 인수(Argument)
함수는 고정된 구문으로 이루어져 있지만 함수에 값을 전달하는 방식으로 함수가 다양한 일을 할 수 있도록 한다. 함수 이름 옆의 소괄호 안에 변수를 선언하는 방식으로 값을 전달하는 데 이를 매개변수라 한다.
매개변수를 선언할 때는 var, val 키워드를 붙이지 않는다. 매개변수는 무조건 val 선언이므로 값을 수정할 수 없는 변수다.
fun main(args: Array<String>): Unit
{
println(cToF(30))
println(getAverage(89, 96))
}
fun cToF(celsius: Int): Double
{
return celsius * 1.8 + 32
}
fun getAverage(a: Int, b: Int): Double
{
return (a + b) / 2.0
}
결과
86.0
92.5
032 Unit 타입
함수가 값을 반환하지 않을 때 사용한다. 함수 끝에 return을 쓰지 않아도 된다. 결국 함수의 반환타입을 생략하면 자동으로 Unit이 된다. 모든 메인 함수의 반환 타입은 Unit 이므로 생략 가능하다.
fun main(args: Array<String>): Unit
{
celsiusToFah(27)
}
fun celsiusToFah(celsius: Int): Unit
{
println(celsius * 1.8 + 32)
}
결과
80.6
033 디폴트 인수
매개 변수를 선언과 동시에 초기화 한다. 이렇게 하면 함수 호출시 해당 매개변수에 인수를 할당하지 않아도 된다. 인수가 할달되지 않은 매개변수는 디폴트 값으로 초기화된다.
fun main(args: Array<String>)
{
println(getAverage(89, 96))
getAverage(100, 50, true)
println(getAverage(90))
getAverage(66, print = true)
getAverage(print = true)
getAverage(print = true, a = 10, b = 30)
}
fun getAverage(a: Int = 0, b: Int = 0, print: Boolean = false): Double
{
val result = (a + b) / 2.0
if (print)
println(result)
return result
}
결과
92.5
75.0
45.0
33.0
0.0
20.0
034 가변 인수
여러개의 인수를 받을 경우 매개 변수 앞에 vararg 키워드를 붙여 여러 개의 인수를 받는다.
fun main(args: Array<String>)
{
println(getSumOf(1, 2, 3, 4, 5, 6, 7))
println(getSumOf(32, 57, 12))
println(getSumOf())
}
fun getSumOf(vararg numbers: Int): Int
{
val count = numbers.size
var i = 0
var sum = 0
while (i < count)
{
sum += numbers[i]
i += 1
}
return sum
}
결과
28
101
0
035 함수 오버로딩(Function Overloading)
한 줄 인쇄하는 println 도 함수다. Intellij IDEA 에디터에서 ctrl 키를 누른채로 소스코드의 println을 클릭하면 println 함수가 선언된 파일 console.kt 파일로 이동할 수 있다. @로 시작하는 부분은 어노테이션이라고 하는데 다른 부분에서 다루고, 매개 변수만 다른 같은 이름의 함수가 보인다. 이름은 같고 함수 시그니처가 다른 함수를 여러 개 선언하는 것을 함수 오버로딩이라고 한다. println은 겅의 모든 데이터 타입에 오버로딩 되어 있다.
@kotlin.internal.InlineOnly
public inline fun println(message: Int) {
System.out.println(message)
}
/** Prints the given [message] and the line separator to the standard output stream. */
@kotlin.internal.InlineOnly
public inline fun println(message: Long) {
System.out.println(message)
}
/** Prints the given [message] and the line separator to the standard output stream. */
@kotlin.internal.InlineOnly
public inline fun println(message: Byte) {
System.out.println(message)
}
036 지역 변수(Local Variable)와 전역 변수(Global Variable)
함수 밖에 선언한 변수를 전역변수, 블록 안에서 선언된 변수를 지역변수라 한다.
var count = 0
fun main(args: Array<String>)
{
val a = 15
println(a)
count += 1
printCount()
println(count)
}
fun printCount()
{
println(count)
count += 1
}
결과
15
1
2
037 지역 변수와 전역 변수의 이름이 중복될 때
var a = 5
fun main(args: Array<String>)
{
val a = 30
println(a)
func()
}
fun func()
{
println(a)
}
결과
30
5
038 지역 변수와 다른 함수의 지역 변수가 중복될 때
fun main(args: Array<String>)
{
val a = 52
println(a)
printA()
printA2()
}
fun printA()
{
val a = 17
println(a)
}
fun printA2()
{
val a = 120
println(a)
}
결과
52
17
120
039 지역 함수(Local Function)
fun main(args: Array<String>)
{
fun printFomular(a: Int, b: Int)
{
println(a * b + a - b)
}
printFomular(73, 1)
printFomular(4, 6)
}
결과
145
22
040 메모리의 스택(Stack) 영역
메모리의 스택 영역에 지역 변수가 저장된다.
fun main(args: Array<String>)
{
val a = -36
val result = absolute(a)
println(result)
}
// 입력받은 정수의 절대값을 반환하는 함수
fun absolute(number: Int): Int
{
return if (number >= 0)
number
else -number
}
결과
36
'개발자 > kotlin 코틀린' 카테고리의 다른 글
kotlin 06. 연산자, 프로퍼티, 생성자, 오버로딩 (0) | 2022.08.16 |
---|---|
kotlin 05. 파일분리, 패키지, import, object, heap, class (0) | 2022.08.15 |
kotlin 03. 제어문과 함수 기초 (0) | 2022.04.21 |
kotlin 02. 문자열, 연산자, 제어문 (0) | 2022.04.20 |
kotlin 기본 예제 01 (0) | 2022.03.31 |
Kotlin 입문 참고 자료 (0) | 2022.02.10 |
Kotlin 핵심 개념 알아보기 2 (0) | 2022.02.08 |
Kotlin 핵심 개념 알아보기 1 (0) | 2022.02.07 |
더욱 좋은 정보를 제공하겠습니다.~ ^^