본문 바로가기

프로그래밍/코틀린

(7)
[코틀린] 고차함수 - 함수 참조와 익명 함수 이용 고차 함수에서 매개변수나 반환값으로 람다 함수를 많이 이용하지만, 함수 참조나 익명 함수를 이용해도 된다. 함수 참조를 이용한 함수 전달 고차 함수를 이용할 때 람다 함수 외에 함수 참조 연산자로 콜론 두개(::)를 이용할 수도 있다. 먼저 아래 소스코드는 람다코드로 작성한 코드이다. fun hoFun6(argFun: (x:Int) -> Int){ println("${argFun(10)}") } fun main() { hoFun6 { it * 5 } } [결과값] 50 고차함수를 선언하고, 매개변수로 함수를 받고 있다. 이렇게 선언한 고차 함수를 호출하면서 함수를 전달해야하는데 위의 소스코드에서는 it *5 라는 람다 함수를 넘겨서 10 * 5의 결과값을 출력하고 있다. 이런 소스 코드를 다음과 같이 함..
[코틀린] 고차함수 - 함수 반환 고차 함수는 다른 함수를 매개변수로 이용하거나, 반환하는 함수이다. 앞에서는 매개변수 부분에 함수를 이용하는 방법을 알아보았다. 이번에는 고차 함수에서 함수를 반환하는 방법에 대해 살펴보겠다. fun hoFun5(str: String): (Int, Int) -> Int { return when (str) { "*" -> { x1, x2 -> x1 * x2 } "-" -> { x1, x2 -> x1 - x2 } "/" -> { x1, x2 -> x1 / x2 } else -> { x1, x2 -> x1 + x2 } } } fun main() { val resultFun = hoFun5("*") println("resultFun * : ${resultFun(10,5)}") } [결과값] resultFun *..
[코틀린] 고차함수 - 매개변수 대입 고차함수란, 매개변수로 함수를 전달받거나 함수를 반환하는 함수를 말한다. 아래 소스에서는 fun 예약어와 hoFun이라는 함수명 그리고 ( )안에 매개변수, { } 안에 함수 내용을 선언했다. fun hoFun(x1: Int, argFun: (Int) -> Int){ val result = argFun(x1) println("x1 : $x1, result : $result") } fun main() { hoFun(10, {x -> x * x} ) } [결과값] x1 : 10, result : 100 하지만 일반 함수와는 차이가 있다. 두 번째 매개변수는 argFun: (Int) -> Int로 선언했다. 매개변수로 함수를 받고자 함수 타입을 선언한 것이다. 코틀린에서는 일반적으로 데이터 타입을 선언할 때 ..
[코틀린] 람다 표현식 람다식 또는 람다함수는 프로그래밍 언어에서 사용되는 개념이다. 익명함수라고도 부르며, 함수형 프로그래밍을 목적으로 하지 않더라도 간결함을 주 목적으로 사용된다. 함수형 프로그래밍에서는 람다 함수가 고차 함수의 매개변수나 반환값으로 사용되므로 더욱 중요하다. 코틀린에서 함수의 정의는 fun 예약어를 사용한다. fun 함수이름(매개변수) { 함수내용 } 람다 함수는 fun과 함수이름을 명시하지 않고 축약형으로 선언한다. {매개변수 -> 함수 내용} 람다 함수는 {}안에 매개변수와 함수 내용을 선언하는 함수로 아래와 같은 규칙을 정의한다. 1. 람다 함수는 항상 {}로 감싸서 표현한다. 2. {} 안에 -> 표시가 있으며 -> 왼쪽은 매개변수, 오른쪽은 함수 내용이다. 3. 매개변수 타입을 선언해야 하며 추론..
[코틀린] 일급 객체로서의 함수 코틀린에서 함수가 일급 객체로 활용되는 부분에 대해서 살펴보겠다. 코틀린의 함수 내에는 다양한 구성요소를 포함시킬 수 있다. fun superFun() { val superData = "hello" fun subFun1() { println("subFun1() .. superData : $superData") } fun subFun2(a: Int, b: Int): Int { subFun1() return a + b } class SubClass{ fun classFun(){ println("classFun() .. superData : ${superData}") } } subFun1() SubClass().classFun() } 함수를 클래스에 포함하지 않고, 함수 내부에 변수, 함수, 클래스를 선언했다..
[코틀린] 순수함수로 정의 될 수 있는 함수 순수함수를 한마디로 정의하면 부수효과가 발생하지 않는, 그래서 같은 매개변수 값으로 함수를 이용하면 항상 같은 값을 반환하는 함수를 의미한다. 여기서 말하는 부수효과는 뭘까? - 함수 외부의 다른 값을 변경하지 않는다. - 함수 내부에서 별도의 입출력이 발생하지 않는다. (파일, 데이터베이스, 네트워크 등) [랜덤 값이 발생하는 함수] fun some(a:Int):Int{ return (Math.random()*a.toInt() } 위의 함수는 매번 some(10)으로 호출하더라도 결과값이 매번 다르게 반환하므로 순수함수가 아니다. [파일 입출력이 발생하는 함수] fun some1(a:String):Boolean{ try{ val file = File("a.txt") val out = FileWriter..
[코틀린] 함수형 프로그래밍이란? 현대의 프로그래밍 언어에서 함수형 프로그래밍은 중요한 이슈 중 하나이다. 코틀린도 마찬가지로 함수형 프로그래밍(Functional Programming, 약어로 FP)을 위한 많은 기법을 제공한다. 일단, 함수형 프로그래밍이란 일종의 프로그래밍 패러다임이다. 소프트웨어 개발 패러다임의 역사가 절차지향에서 객체지향으로 변화했듯이 요즘에는 함수형 프로그래밍이 떠오르고 있다. 각 프로그래밍 패러다임을 아래와 같이 정리할 수 있다. * 절차지향 프로그래밍 - 알고리즘과 로직 중심으로 문제 해결이 주목적 (ex c, pascal) * 객체지향 프로그래밍 - 클래스 선언이 최우선, 데이터와 데이터를 처리할 메서드를 하나로 묶어 객체로 만들고 객체를 조합해서 프로그래밍을 작성 객체를 만들기 위한 추상화, 캡슐화, 상..