Programming/Kotlin 3

[Kotlin] 함수형으로 데이터 구조 만들기

주요 개념 - 함수형 개념을 사용하여 List를 구현 - 순수 함수 (Pure function) - 꼬리 재귀 (Tail recursion) - 고차 함수 (High order function) - 패턴 매칭 & 코틀린 매칭 - 이진트리를 직접 구현 아래의 코드는 단일 연결리스트의 구조 정의로, 비어있는 리스트와 값이 들어가 있는 리스트를 생성할 수 있는 형태이다. 값을 넣는 head와 리스트를 연결할 수 있는 tail 형태로 이루어져있다. 다형적으로 사용하기 위해서 A로 타입을 추상화 했다. sealed class List object Nil: List() data class Cons(val head: A, val tail: List): List() 아래는 companion object를 통해서 Jav..

Programming/Kotlin 2023.09.06

[Kotlin] 함수형 프로그래밍 시작하기

주요 개념 - 꼬리 재귀 함수를 이용한 루프 작성 - 고차 함수 (High-order function) - 타입 추상화 순수함수 만을 사용하여 프로그래밍을 하는 것이 함수형 프로그래밍의 기본이다. 그럼 순수함수만 이용해서 루프를 구현하라고 하면 대부분의 사람들은 어려워할 것이다. 이를 위해서 우리는 꼬리 재귀 함수를 사용한다. 아래와 같이 피보나치 함수를 꼬리재귀를 이용해서 짜보자. 피보나치 말고도 구구단 출력이나 기타 수열 문제들을 꼬리 재귀를 통해서 해결해보도록 한다. 재귀함수는 오로지 매개변수만을 참조하여 처리하도록 구현한다. 즉, 순수함수를 이용한 재귀 호출로 루프를 구현하는 것이다. fun factorial(i: Int): Int { fun go(n: Int, acc: Int): Int = if..

Programming/Kotlin 2023.09.05

[Kotlin] 함수형 프로그래밍이란? (순수함수)

Side effect를 유발하는 코드 - 블럭 외부에서 변수를 변경하는 경우 (공유 자원) - 메모리에 직접 접근하여 값을 변경하는 경우 (공유 자원) - 객체에 필드를 설정하는 경우 (공유 자원) - 예외를 던지거나 발생해서 프로그램을 중단 (실행 흐름) - 콘솔 출력이나 사용자의 입력 대기 (실행 흐름) - 파일을 입출력 (공유 자원) - 화면 출력 (공유 자원 /. 실행 흐름) 위와 같은 Side effect를 줄이는 방법으로 프로그래밍을 하도록 한다. IO 수행, 오류 처리, 데이터 변경 등의 처리를 보다 제한적이고 안전한 방법으로 한다. 이를 위해 함수형 프로그래밍을 살펴본다. 함수형 프로그래밍을 하기 위해서는 순수 함수를 이해하는 것이 중요하다. 위의 Side effect를 유발하는 코드의 공..

Programming/Kotlin 2023.09.05