Per ardua ad astra !
I'm On My Way
Per ardua ad astra !
전체 방문자
오늘
어제
  • 분류 전체보기 (126)
    • Algorithm (50)
      • 백준 (30)
      • SWEA (3)
      • JUNGOL (3)
      • Programmers (5)
      • LeetCode (2)
    • 안드로이드 개발 (6)
      • Java로 개발 (0)
      • Kotlin으로 개발 (3)
    • Spring (41)
      • Spring기본 (17)
      • JPA기본 (15)
      • JPA활용 SpringBoot 기본 (9)
      • API 개발 기본 (0)
    • 네트워크 (3)
    • 운영체제 (0)
    • Life (3)
      • 책 (0)
      • 자기계발 (1)
      • 일상 (2)
    • 노마드코더 (3)
      • python으로 웹 스크래퍼 만들기 (3)
    • 프로그래밍 언어 (17)
      • Java 기본 (2)
      • 코틀린 기본 (15)

블로그 메뉴

  • 홈
  • 방명록

인기 글

hELLO · Designed By 정상우.
Per ardua ad astra !

I'm On My Way

프로그래밍 언어/코틀린 기본

[코틀린 기본] 고차함수와 람다함수

2021. 2. 26. 18:58
lesson 14 고차함수와 람다함수 


고차함수: 함수를 마치 클래스에서 만들어낸 인스턴스처럼 취급 

              => 함수를 파라미터로 넘겨주거나 결과값으로 반환받을 수도 있음

람다함수(익명함수): 이름이 없는 함수. 파라미터와 반환값만 있음. 람다 함수는 일반 함수와 달리 그 자체가 고차함수다. 


- 코틀린은 모든 함수를 고차함수로 구현 가능

 


고차함수와 람다함수 코드 예제

 

 

함수 생성 부

fun a (str : String){
  println("${str} 함수 a입니다.")
}

fun b (function : (String) -> Unit){
  function("함수 b에서 실행한")
}

fun printCal(a : Int, b : Int, function : (Int, Int) -> Int){
  println(function(a,b))
}

fun emptyFun(function : () -> Unit){
  function()
}

- 일반 함수 a를 생성한다.

- 함수 b에서 파라미터로 고차함수를 받을 수 있도록 설정. 들어올 고차함수는 function: (String) -> Unit  형태로, 함수 a와 형태가 동일하다. 이 때 Unit은 반환값이 없다는 것을 알려주는 키워드이다.

 

- (Int 두개를 파라미터로 받는 함수)와 (Int 두개를) 파라미터로 받는 함수 printCal을 만들었다.

 

- 파라미터와 반환형 모두 없는 함수를 받을 수 있는 함수 emptyFun을 만들었다.

 

main 부

fun main(){
  // 고차함수
  b(::a)
  
  // val c: (String) -> Unit = {str -> println("${str} 람다 함수 c입니다.")}
  var c : (String) -> Unit = { 
    println("${it} 람다 함수 c입니다.")
    println("이런식으로 여러 문장 실행도 가능합니다.")}
  b(c)
  
  
  // Int 파라미터 2개, Int 형 반환
  var add : (Int, Int) -> Int = { a, b ->
    a+b
  }
  
  var minus : (Int, Int) -> Int = { a, b ->
    a-b
  }
  
  printCal(10, 20, add)
  printCal(10, 20, minus)
  
  
  // 패러미터가 없는 경우
  var emptyPara : () -> Unit = {println("패러미터가 없당")}
  emptyFun(emptyPara)
}


- b(::a)  => 함수 b에서 함수 a를 고차함수 형식의 패러미터로 받을 수 있도록 했다.

          :: => 일반 함수를 고차 함수로 변경해 주는 연산자

 

 

이처럼 만들어진 a 함수를 사용하는 것도 가능하지만 람다함수로 b함수의 파라미터로 전달하는 것도 가능하다.

- 주석: var c: (String) -> Unit = {str -> println("${str} 람다 함수 c입니다.")} 

         => var c는 String 파라미터를 가지고 반환이 없는 함수. { 함수 내용 } 형태임.

- var c : (String) -> Unit = { 문장.... } 이런식으로도 가능하다.

        =>패러미터가 하나뿐이라면 그 패러미터는 키워드 it으로 부를 수 있다.

 


- 람다함수 add와 minus를 만들었다. 

예제 처럼 Int형을 반환 하는경우 마지막 a+b의 계산값을 반환한다. 만약 return a+b로 명시하면 return' is not allowed here이라며 컴파일 오류가 발생한다. 
 

 

-  람다함수 emptyPara를 만들었다. 이처럼  람다함수에 패러미터가 없다면?
   => 중괄호 안에 실행할 구문만 만들면 된다.

 

 

코드 실행 결과

 

 

 

학습 출처:

테크과학! DiMo-디모의 Kotlin 강좌 (lesson14)

(www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN)

구독과 좋아요 !

    '프로그래밍 언어/코틀린 기본' 카테고리의 다른 글
    • [코틀린 기초] 생성자 없이 객체를 직접 만드는 Object
    • [코틀린 기초] 스코프 함수
    • [코틀린 기초] 클래스와 상속, 오버라이딩, 추상 클래스, 인터페이스, 코틀린 기본 프로젝트 구조, 스코프와 접근 제한자
    • [코틀린 기초] 타입추론, 함수 생성, when문, 반복문, 클래스와 생성자, 보조생성자
    Per ardua ad astra !
    Per ardua ad astra !
    개발자 지망생이며 열심히 공부하고 기억하기 위한 블로그입니다.

    티스토리툴바