불로구

[코틀린 기초] 8. 함수형 프로그래밍 본문

프로그래밍/코틀린

[코틀린 기초] 8. 함수형 프로그래밍

맹이맹이 2021. 2. 14. 21:23
반응형

함수란?

- 여러 값을 받아 기능을 수행하고 결과값을 반환하는 코드의 모음

fun main(){
    println(sum(10,20))
    println(hello("홍길동"))
}

fun sum(a: Int , b: Int): Int{
    return a + b
}
fun hello(name: String): String{
    return name + "님 안녕하세요"
}

- fun이란 키워드로 함수 선언

- (sum , hello) 자리에 이름 작성

- 인자값 정의

- 반환값 정의

- 함수 본문 작성

- 값 반환

 

함수 호출과 메모리

- 함수가 호출 될 때 메모리는 어떻게 변화하는지 알아보자

fun main(){
    var a: Int = 10
    var b: Int = 20
    var result = sum(a,b);
    println(result)
}

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

스택은 LIFO라고 알고리즘 포스팅에서 언급한적이있다.

즉, MAIN실행 후 SUM함수가 실행되므로 MAIN위에 SUM이 스택자리를 차지하고 반환 후 사라진다

- 지역변수(함수 안에 변수)들은 함수가 종료되면 함께 스택 프레임에서 사라진다.

 

그럼 반환값이 없는 함수는 어떻게 사용할까?

fun main(){
    Hello("홍길동")
}

fun Hello(name: String): Unit{
    println(name + "님 안녕하세요")
}

간단하다. 우선 파라미터가 필요하다면 호출 시 값을 넣어주고 없으면 그냥 호출하면된다.

-> 반환되는 값이 없기에 일부로 println문을 사용했다.

 

 

함수의 매개변수 활용

- 만약 어떠한 값이 있을수도 있고 없을수도 있는 경우가 있다.

- 예를 들어 길동이는 동생이 있고, 지성이는 동생이 없는 경우처럼 말이다.

fun main(){
    family("홍길동", "홍미자")
    family("박지성")
    family("김연아", "김연어")
    println(sum())
    println(sum(10,20))
}

fun family(name: String, bro: String = "default"){
    println(name +"의 동생은 : " + bro)
}

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

홍길동의 동생은 : 홍미자
박지성의 동생은 : default
김연아의 동생은 : 김연어
600
30

로 표현할 수 있으며, 자신이 원하는 결과에 따라 수정할 수 있다.

 

막약에 sum의 파라미터가 a,b,c 3개인데 a,c만 입력하고 싶다면?

fun main(){
    println(sum(a = 10,c = 20))
}
fun sum(a:Int = 100, b:Int = 500, c:Int=1000) = a+b+c

이렇게 지정해주면 된다.

 

매개변수가 고정되지 않는다면?

- vararg 키워드를 사용하자.

fun main(){
    println(sum(10,20,30,40,50,60,70))
    println(sum(10,20,30,40,50,60,70,80,90,100))
    println(sum(10,20))
}

fun sum(vararg num:Int): Int{
    var result: Int = 0
    for(idx in num){
        result += idx
    }
    return result
}

이렇게 varage키워드를 사용하고 foreach문을 통해 받은 파라미터의 개수만큼 연산을 수행할 수 있다.

반응형
Comments