Kotlin
Arrow 함수형 라이브러리
Either, Option, IO 모나드로 함수형 에러 처리
<span class="cm">// Arrow 함수형 라이브러리 예제
// data/prompts.js의 생성 프롬프트로 상세 코드 생성 가능</span>
fun main() { println("Arrow 함수형 라이브러리") }LANGUAGE COMPARISON
같은 개념을 실제 예제로 나란히 확인하고, 각 언어의 개별 설명으로 이어갈 수 있습니다.
Kotlin
Either, Option, IO 모나드로 함수형 에러 처리
<span class="cm">// Arrow 함수형 라이브러리 예제
// data/prompts.js의 생성 프롬프트로 상세 코드 생성 가능</span>
fun main() { println("Arrow 함수형 라이브러리") }Python
Python의 비동기 I/O 라이브러리. 코루틴으로 I/O 대기 시간을 효율적으로 활용합니다.
import asyncio
import time
# 기본 코루틴
async def fetch_data(url: str, delay: float) -> str:
print(f"시작: {url}")
await asyncio.sleep(delay) # 비차단 대기
print(f"완료: {url}")
return f"data:{url}"
# asyncio.gather — 병렬 실행
async def main_parallel():
start = time.perf_counter()
results = await asyncio.gather(
fetch_data("url1", 1.0),
fetch_data("url2", 1.5),
fetch_data("url3", 0.5),
)
elapsed = time.perf_counter() - start
print(f"총 소요: {elapsed:.2f}초") # ~1.5초 (병렬)
print(results)
# asyncio.create_task — 태스크 생성
async def main_tasks():
task1 = asyncio.create_task(fetch_data("a", 1.0))
task2 = asyncio.create_task(fetch_data("b", 0.5))
# 여기서 다른 작업 가능
print("태스크 생성 후 바로 실행 가능")
r1 = await task1
r2 = await task2
return r1, r2
# 타임아웃
async def with_timeout():
try:
result = await asyncio.wait_for(
fetch_data("slow", 5.0),
timeout=2.0
)
except asyncio.TimeoutError:
print("타임아웃!")
asyncio.run(main_parallel())Go
Go 함수의 핵심 특징: 여러 값을 반환하고, 에러를 마지막 반환값으로 처리합니다.
package main
import (
"errors"
"fmt"
"strconv"
)
// 다중 반환값 — Go의 관용구
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("0으로 나눌 수 없습니다")
}
return a / b, nil
}
// Named return values
func minMax(nums []int) (min, max int) {
min, max = nums[0], nums[0]
for _, n := range nums[1:] {
if n < min { min = n }
if n > max { max = n }
}
return // naked return
}
// 가변 인자
func sum(nums ...int) int {
total := 0
for _, n := range nums { total += n }
return total
}
// 함수를 값으로 (일급 함수)
func apply(fn func(int) int, vals []int) []int {
result := make([]int, len(vals))
for i, v := range vals {
result[i] = fn(v)
}
return result
}
func main() {
// 에러 처리 패턴
result, err := divide(10, 3)
if err != nil {
fmt.Println("에러:", err)
} else {
fmt.Printf("%.4f
", result)
}
_, err = divide(5, 0)
if err != nil { fmt.Println(err) }
// Named return
lo, hi := minMax([]int{3, 1, 4, 1, 5, 9, 2, 6})
fmt.Println("min:", lo, "max:", hi)
// 가변 인자
fmt.Println(sum(1, 2, 3, 4, 5))
nums := []int{1, 2, 3}
fmt.Println(sum(nums...)) // 슬라이스 전개
// 고차 함수
doubled := apply(func(n int) int { return n * 2 }, nums)
fmt.Println(doubled)
_ = strconv.Itoa(0)
}Java
LinkedHashMap의 SequencedMap 인터페이스 활용
<span class="cm">// Sequenced Map 순회 예제
// data/prompts.js의 생성 프롬프트로 상세 코드 생성 가능</span>
fun main() { println("Sequenced Map 순회") }PHP
예외 대신 Result 모양의 배열을 반환하는 함수형 오류 처리 예제입니다.
<?php
function divide(int $a, int $b): array {
return $b === 0
? ['ok' => false, 'error' => 'division by zero']
: ['ok' => true, 'value' => $a / $b];
}
print_r(divide(10, 2));JavaScript
JavaScript에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
// try catch 기본
try {
JSON.parse("{");
} catch (error) {
console.log(error instanceof Error ? error.message : String(error));
}TypeScript
TypeScript에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
// try catch 기본
try {
JSON.parse("{");
} catch (error) {
console.log(error instanceof Error ? error.message : String(error));
}C#
C#에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
// try catch 기본
using System;
try { int.Parse("x"); } catch (Exception ex) { Console.WriteLine(ex.Message); }C++
C++에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
// try catch 기본
#include <exception>
#include <iostream>
#include <stdexcept>
int main() {
try { throw std::runtime_error("boom"); } catch (const std::exception& ex) { std::cout << ex.what() << "\n"; }
}Rust
Rust에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.
// try catch 기본
fn require_positive(value: i32) -> Result<i32, String> { if value <= 0 { Err("positive only".to_string()) } else { Ok(value) } }
fn main() {
println!("{:?}", require_positive(1));
}