Kotlin_02

김재현·2023년 3월 23일
0
post-thumbnail

함수

fun 함수 이름([변수 이름: 자료형, 변수 이름: 자료형..]): [반환값의 자료형]{
	표현식...
    [return 반환값]
}

줄여서 쓸쑤도 있다.

fun sum(a: Int, b:Int) = a + b
  • 반환값이 없는 함수: 반환값의 자료형을 Unit으로 지정한다. 생략시 반환값의 자료형을 void가 아닌 Unit으로 추론한다.
fun printSum(a: Int, b: Int): Unit {
	println("sum of $a and $b is ${a+b}")
}

함수의 매개변수에 기본값 지정하기
매개변수 이름과 함께 함수 호출하기

가변인자(Variable Argument)가변 인자를 통해 인자의 개수가 변하는 경우. vararg를 선언


함수형 프로그래밍

함수형 프로그래밍은 순수 함수를 작성하여 프로그램의 부작용을 줄이는 프로그래밍 기법을 말한다. 코드가 간략화되고 테스트나 재사용성이 좋아 개발 생산성이 늘어나는 장점이 있다.

함수형 프로그래밍의 정의와 특징
1. 순수 함수를 사용해야 한다.
2. 람다식을 사용할 수 잇다.
3. 고차 함수를 사용할 수 있다.

람다식: 일급함수에서 이름이 없는 함수

{ x, y -> x + y }

고차 함수: 다른 함수를 인자로 사용하거나 함수를 결과값으로 반환하는 함수.

fun main() {
	println(highFunc({ x, y -> x + y}, 10, 20)) // 람다식 함수를 인자로 넘김
}
fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a,b) // sum 매개변수는 함수

116p참고

변수에 할당하는 람다식 함수 작성하기

매개변수에 람다식 함수를 이용한 고차 함수

JVM에서 실행되는 자바나 코틀린은 함수를 호출할 때 인자의 값만 복사하는 값의 의한 호출이 일반적이다. 포인터 주소 연산이 없기 때문에 참조에 의한 호출은 사용되지 않는다.

  • 값의 의한 호출 : 함수가 또 다른 함수의 인자로 전달될 경우 람다식 함수는 값으로 처리되어 그 즉시 함수가 수행된 후 값을 전달한다.

  • 이름에 의한 람다식 호출: 매개변수로 람다식을 전달하여 필요할 때 람다식 함수를 호출한다.

  • 다른 함수의 참조에 의한 일반 함수 호출: 람다식이 아닌 일반 함수를 다른 함수의 인자에서 호출하는 고차 함수의 경우 2개의 콜론(::) 기호를 사용한다.

람다식의 매개변수(없을때, 1개, 2개)
2개 이상일때


코틀린의 다양한 함수

  1. 익명함수
  • 일반 함수이지만 이름이 없는 것. 람다식에서는 return이나 breask, continue처럼 제어문을 사용하기 어렵기 때문에 경우에 따라서 사용한다.
val add:(Int,Int)->Int=fun(x,y)= x+y
val addLikeLambda = fun(x: Int, y: Int) = x + y
  1. 인라인함수
  • 함수가 호출되는 곳에 함수 본문의 내용을 모두 복사해 넣어 분기 없이 처리되기 때문에 코드의 성능을 높일 수 있다.
  • noinline 키워드를 사용하여 인라인 함수 제한
  • crossinline으로 비지역 반환 금지하기
  1. 확장함수
  • 코틀린은 기존 클래스에 원하는 함수를 포함시켜 확장하는 개념을 제공한다.
  1. 중위함수
  • 클래스의 멤버를 호출할 때 사용하는 점(.)과 이름뒤에 소괄호를 생략하여 직관적인 형태로 표현
  • 조건 1. 멤버 메서드 또는 확장 함수여야 한다.
  • 조건 2. 하나의 매개변수를 가져야 한다.
  • 조건 3. infix 키워드를 사용하여 정의한다.
  1. 꼬리 재귀함수
  • 재귀함수가 꼬리를 무는 형태로 반복하여 스택 오버플로 현상을 해결할 수 있다.(계산->함수호출)
  • 조건 1. 무한 호출에 빠지지 않도록 탈출 조건을 만들어 둔다.
  • 조건 2. 스택 영역을 이용하므로 호출 횟수를 무리하게 많이 지정해 연산하지 않는다.
  • 조건 3. 코드를 복잡하지 않게 한다.

    일반적인 재귀함수

    꼬리 재귀함수


함수와 변수의 범위

  • 함수의 범위
    • 최상위 함수 : 파일을 만들고 곧바로 main()함수나 사용자 함수를 만든 경우
    • 지역 함수 : 함수 내부에 또 다른 함수가 선언되어 있는 경우
  • 변수의 범위
    • 전역 변수 : 최상위에 있는 변수, 프로그램이 실행되는 동안 메모리에서 삭제되지 않는다.
    • 지역 변수 : 특정 코드 블록 안에 있는 변수, 코드 블록을 벗어나면 메로리에서 삭제된다.

Chap04. 프로그램 흐름제어

범위 연산자 in ..

변수이름 in 시작값..마지막값

when 문으로 다양한 조건 처리하기(switch와 비슷)

when(인자) {
	인자에 일치하는 값 혹은 표현식 -> 수행할 문장
    인자에 일치하는 범위 -> 수행할 문장
    ...
    else -> 수행할 문장
}

switch와 달리 각 수행 문장을 멈추는 break가 필요하지 않는다.
인자를 검사할때 값, 표현식, 범위를 넣을 수 있다는 점.

when에 인자를 주지 않는 경우.

  • 조건이나 표현식을 직접 만들 수 있기 때문에 인자에 제한하지 않고 다양한 조건을 구성할 수 있다.

다양한 인자 받기


profile
배운거 정리하기

0개의 댓글