HS_development_log

Kotlin - Do it 코틀린 프로그래밍 2 본문

Kotlin

Kotlin - Do it 코틀린 프로그래밍 2

DevHyeonseong 2020. 7. 22. 04:05
반응형

1. 함수란?

함수는 여러 값(인자)을 입력받아 기능을 수행학 결괏값을 반환하는 코드의 모음입니다. 함수를 사용하면 코드를 재사용할 수 있기 때문에 생산성과 유지보수성이 좋아집니다.


2. 코틀린의 함수 선언

1)
fun sum(a: Int, b: Int) : Int{
    var sum = a+b
    return sum
}

2)
fun sum(a: Int, b: Int) : Int{
    return a+b
}

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

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

1~4번까지는 모두 같은 함수입니다. 함수의 형태를 간결하게 적는 것은 가독성에 큰 도움이 되므로 생략이 가능한 형태는 되도록 생략해서 적어주는 것이 좋습니다.


2.1. Unit

1)
fun printSum(a: Int, b: Int) : Unit{
    println(a+b)
}

2)
fun printSum(a: Int, b: Int) {
    println(a+b)
}

3)
fun printSum(a: Int, b: Int) = println(a+b)

코틀린에서 반환값이 없는 함수는 Unit 자료형을 사용합니다. 자바나 C언어 등의 void로 생각하시면 될 것 같습니다.

반환 값의 자료형이 정해져 있지 않다면 Unit으로 추론합니다.

1~3은 모두 같은 함수입니다. 3번이 최종적으로 축약된 형태입니다.

 


2.2. default

fun main() {
    println(add(1,2)) // 1+2
    println(add(1)) // b가 default 값으로 대체 1+20
    println(add()) // a, b 모두 default 값으로 대체 10+20
    println(add(b=100)) // b의값을 명시해 줬으므로 a만 default 값으로 대체 10+100
}

fun add(a: Int = 10, b: Int = 20) = a+b

매개변수의 default 값을 설정하고 인자를 넘겨주지 않으면 default값으로 대체해서 함수가 실행됩니다.


2.3. vararg

fun main() {
    sumArgs(1,2,3)
    sumArgs(1,2,3,4,5,6,7)
}

fun sumArgs(vararg number : Int){
    println("호출됨")
    for(i in number){
        print("$i ")
    }
    println()
}

vararg를 매개변수로 활용하면 여러 개의 인자를 하나의 변수로 받을 수 있습니다. 

이때 number를 가변 인자 라고 하며 number는 Int형 배열이 됩니다. 


3. 함수형 프로그래밍 이란?

함수형 프로그래밍은 순수 함수를 작성하여 프로그램의 부작용을 줄이는 프로그래밍 기법을 말합니다.


3.1. 순수함수

  • 같은 인자에 대하여 항상 같은 값을 반환한다

  • 함수 외부의 어떤 상태도 바꾸지 않는다.

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

순수 함수의 예. 항상 동일한 인자인 a, b를 입력받아 항상 a+b를 출력.(부작용이 없음)


3.2. 람다식

람다식은 람다 대수(Lambda Calculus)에서 유래한 것으로 다음과 같은 형태입니다.

{x, y -> x + y}

함수형 프로그래밍에서 람다식은

 

  • 다른 함수의 인자로 넘기는 함수

  • 함수의 결괏값으로 반환하는 함수

  • 변수에 저장하는 함수


3.3. 일급 객체

함수형 프로그래밍에서는 함수를 일급 객체로 생각합니다. 람다식 역시 일급 객체입니다.

일급 객체란

 

  • 일급 객체는 함수의 인자로 전달할 수 있다.

  • 일급 객체는 함수의 반환 값에 사용할 수 있다.

  • 일급 객체는 변수에 담을 수 있다.

함수가 일급 객체면 일급 함수라고 부릅니다. 그리고 일급 함수에 이름이 없다면 '람다 함수' 혹은 '람다식'이라고 부를 수 있습니다.


3.4. 고차 함수

고차 함수(High-order Function)란 다른 함수를 인자로 사용하거나 함수를 결괏값으로 반환하는 함수를 말합니다. 일급 객체 혹은 일급 함수를 주고받을 수 있는 함수가 고차 함수가 됩니다.

 

fun main() {
    println(highFunc({x,y -> x+y},10,20))
    println(highFunc2({x,y -> x+y},10,20))
}

1)
fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int) : Int = sum(a,b)

2)
fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int) : Int{
    var temp = sum(a,b) 
    return temp
}

1번과 2번은 같은 함수입니다. 이해를 위해 2번을 적어놓았습니다. 1번처럼 표기하는 것이 가독성을 높여줍니다.

 

함수의 동작 원리는 

1) sum이라는 함수를 인자로 받아옵니다.

2) 받아온 함수 sum에 같이 인자로 받아온 a, b를 넣습니다.

3) 결괏값을 리턴합니다.


3.5. 결론 : 함수형 프로그래밍의 정의와 특징

  • 순수 함수를 사용해야 한다

  • 람다식을 사용할 수 있다

  • 고차 함수를 사용할 수 있다

 

끝.

반응형

'Kotlin' 카테고리의 다른 글

Kotlin - Do it 코틀린 프로그래밍 1  (0) 2020.07.21