전체 글

프로그래밍 관련 지식과 경험을 공유합니다
Arrow.kt - 디자인 카테고리의 Effects and contexts 번역입니다. Effects and contexts데이터를 어떻게 설계할지는 당신의 소프트웨어를 설계하는데 있어 핵심적인 부분입니다. 또 다른 핵심 부분은 당신의 행동을 어떻게 설계할지입니다. 우리는 이 글을 통해서 무거운 의존성 주입 프레임워크를 사용하지 않고도 어떻게 부수효과를 지닌 코드를 단순화할지 알아볼겁니다. 당신이 작성하는 모든 함수는 종종 필요한 주요 데이터와 기타 많은 부수적인 요소인 컨텍스트가 포함됩니다. 일반적인 예로는 사용자 정보를 데이터베이스에 작성하는 기능이 있습니다. 사용자 데이터 이외에도 데이터베이스 연결이 필요하며, 잠재적인 문제를 기록하기 위한 로깅 기능도 필요합니다. 한 가지 설계 방법은 다음과 ..
Arrow.kt - 디자인 카테고리의 Domain modeling 번역입니다. Domain modeling함수적인(functional) 도메인 모델링의 목표는 비즈니스 도메인을 가능한 한 정확하게 설명하여 타입 안정성을 높이고, 컴파일러의 활용성을 극대화하여 버그를 방지하고 단위 테스트를 줄이는 것입니다. 또한, 함수적인 도메인 모델링은 도메인을 현실 세계와의 접점이 되게 만드므로 도메인에 대해 소통하기 쉽게 만듭니다. 코틀린은 함수적인 도메인 모델링에 매우 적합한 언어입니다. 코틀린은 data class, sealed class, enum class, 그리고 value class를 제공해줍니다. 여기에 더해 Arrow는 Either와 Ior와 같은 흥미로운 제너릭 데이터 타입을 제공합니다. 일부 코드베..
Communicating Sequential Processeshttps://www.cs.cmu.edu/~crary/819-f09/Hoare78.pdf Go - goroutinehttps://go.dev/blog/waza-talk Concurrency is not parallelism - The Go Programming LanguageConcurrency is not parallelism Andrew Gerrand 16 January 2013 If there’s one thing most people know about Go, is that it is designed for concurrency. No introduction to Go is complete without a demonstration of..
원문: Scala Collections API - Trait TraversableTrait Traversable컬렉션 계층 구조의 최상단에는 trait Traversable이 존재합니다. 이 trait이 가지는 추상 함수는 foreach가 유일합니다.def foreach[U](f: Elem => U)Traversable 을 구현하는 컬렉션 클래스는 이 메서드만 정의하면 됩니다. 다른 모든 메서드는 Traversable 에서 상속받을 수 있습니다. foreach 메서드는 컬렉션의 모든 요소를 탐색하고, 주어진 연산인 f 를 각 요소에 적용하도록 설계되었습니다. 연산 f의 타입은 Elem => U 이며, 여기서 Elem 은 컬렉션 요소의 타입이고 U 는 임의의 결과 타입입니다. f 의 호출은 오직 부수 효과..
대수적 자료형이란?대수적 자료형(Algebraic Data Types, ADT)이란 다른 타입의 결합으로 만들어지는 합성 타입을 말하며, 이러한 합성 타입은 수학적인 합(sum)과 곱(product)의 개념을 조합해서 만들어지게 됩니다.곱타입(product)은 여러 값을 함께 가지며(AND를 뜻합니다) 대표적인 예시로 튜플(tuple)이나 우리가 평소에 객체지향적으로 프로그래밍하면서 만들게 되는 class 같은 자료형의 모음이 있습니다.합타입(sum)은 타입의 모음 중 하나에만 속하게 되는 타입을 말하고(OR을 뜻합니다) 대표적인 예시로 enum class, sealed trait(interface) 같은 조합이 있습니다. 곱타입(product)과 합타입(sum)곱타입(product)곱타입은 개요에서 설..
· Java/언어
Java에서는 문자열을 다루는 객체로 String, StringBuilder, StringBuffer의 세 가지 클래스를 제공해줍니다.이 글에서는 이 세 가지 클래스의 차이를 개념적으로 이해하고, 언제 어떤 클래스를 선택해야 할지에 대한 가이드를 작성해볼 것입니다. String: 불변(immutable)한 문자열 String은 가장 기본적으로 사용되는 문자열 클래스입니다. 중요한 특징은 불변(immutable) 이라는 점입니다. 한 번 생성된 String 객체는 내용을 바꿀 수 없습니다.String의 내부 구현을 보면 값을 저장하고 있고, 이 값은 final로 지정되어 있어 불변의 특성을 지니게 됩니다.public final class String implements java.io.Serializable..
이전에 설명한 functor 글을 읽어보시면 더욱 도움이 됩니다.여기서도 샘플 코드는 kotlin으로 작성합니다.오류에 대한 정정이나 의견은 언제든지 환영합니다. Option 타입은 일반적으로 Some, None의 두 타입으로 정의됩니다.Some은 값이 존재할 경우의 타입이고 None은 값이 존재하지 않을 경우의 타입입니다.sealed class Option { data object None : Option() data class Some(val value: A) : Option} Java의 Optional은 위에서 적은 것과 같이 타입으로 구분되지 않고, isPresent(), isEmpty() 같은 함수를 통해 Some, None을 구분한다고 이해할 수 있습니다.val t = Optional.of..
kotlin이나 scala를 사용한다면 굉장히 익숙한 함수로 array나 list, map 등의 class에 구현되어 있는 map 함수가 있습니다.이 map 함수를 잘 몰라도 대강 내부 원소를 A 에서 B로 변환해주는구나 정도로 이해하고 사용해도 상관 없습니다만 이게 어떤 함수인지 알아야 더 잘 사용할 수 있으니 최대한 도움이 될 정도로 정리해보겠습니다.코드는 kotlin으로 작성할 예정이고 어떤 피드백이든 환영합니다.Functor와 map범주론에서 함자(函子, 영어: functor)는 두 범주 사이의 함수에 해당하는 구조로, 대상을 대상으로, 사상을 사상으로 대응시킨다. 함자는 작은 범주의 범주의 사상으로 볼 수 있다.- wikipediamap은 원래 카테고리 이론의 Functor 에서 유래된 함수입니..
sleeptoy
쉬어가는 장난감