PHpullh

LANGUAGE COMPARISON

Error를 언어별로 비교하기

같은 개념을 실제 예제로 나란히 확인하고, 각 언어의 개별 설명으로 이어갈 수 있습니다.

Kotlin

Arrow 함수형 라이브러리

Either, Option, IO 모나드로 함수형 에러 처리

<span class="cm">// Arrow 함수형 라이브러리 예제
// data/prompts.js의 생성 프롬프트로 상세 코드 생성 가능</span>
fun main() { println("Arrow 함수형 라이브러리") }

Python

asyncio — async/await 기초

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

함수 — 다중 반환값 & Named Return

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

Sequenced Map 순회

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

try catch 기본

JavaScript에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.

// try catch 기본
try {
  JSON.parse("{");
} catch (error) {
  console.log(error instanceof Error ? error.message : String(error));
}

TypeScript

try catch 기본

TypeScript에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.

// try catch 기본
try {
  JSON.parse("{");
} catch (error) {
  console.log(error instanceof Error ? error.message : String(error));
}

C#

try catch 기본

C#에서 try catch 기본 개념을 코드로 빠르게 확인하는 에러 처리 예제입니다.

// try catch 기본
using System;

try { int.Parse("x"); } catch (Exception ex) { Console.WriteLine(ex.Message); }

C++

try catch 기본

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

try catch 기본

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));
}