liminfo

Gleam Language Reference

Gleam 문법, 타입, 패턴 매칭, BEAM 상호운용 레퍼런스

20개 결과

Gleam Language Reference 소개

Gleam 언어 레퍼런스는 Erlang과 JavaScript로 컴파일되는 정적 타입 함수형 프로그래밍 언어 Gleam의 검색 가능한 문법 치트 시트입니다. 기본 문법(불변 변수를 위한 let 바인딩, fn 함수 정의, 공개 API 함수를 위한 pub fn, 변환 체이닝을 위한 |> 파이프 연산자, 콜백 스타일 코드를 평탄하게 만드는 use 표현식, 이름 붙인 파라미터를 위한 레이블 인자), 타입 시스템(임의 정밀도의 Int, Float, UTF-8 String, Bool, prepend 구문이 있는 불변 List(a), 예외 없이 오류를 처리하는 Result(value, error) 타입, 널 가능 값을 위한 Option(a)), 패턴 매칭과 커스텀 타입(가드가 있는 case 표현식, Circle과 Rect 생성자를 가진 Shape 같은 커스텀 타입 정의, 타입 별칭), 모듈 시스템(선택적 임포트, 내보내는 타입을 위한 pub type), Erlang/OTP 통합(gleam.toml 프로젝트 설정과 gleam/otp/actor를 이용한 OTP 액터 패턴)의 다섯 가지 핵심 영역을 다룹니다.

Gleam은 Erlang과 Elixir가 구동되는 BEAM 가상 머신에서 안정적이고 동시성 높은 백엔드 서비스를 구축하는 팀을 위해 설계되었습니다. 정적 타입 시스템은 친절한 오류 메시지와 함께 컴파일 타임에 오류를 잡아내며, Erlang 상호운용성을 통해 슈퍼바이저, gen_server, 경량 프로세스 같은 OTP 기본 요소에 접근할 수 있습니다. JavaScript 컴파일 타겟은 프론트엔드 개발과 Node.js 스크립트에도 Gleam을 사용할 수 있게 합니다. Rust, Elm, Haskell 개발자는 Gleam의 타입 시스템과 함수형 패턴에 친숙함을 느낄 것이고, Elixir 개발자는 BEAM 런타임 모델을 알아볼 것입니다.

레퍼런스는 항목을 다섯 개의 탐색 가능한 카테고리로 구성합니다. 기본 문법 섹션은 불변 바인딩, fn과 pub fn의 차이, 파이프 연산자 |>가 중첩 괄호 없이 함수 호출을 체이닝하는 방법을 이해해야 하는 Gleam 입문 개발자에게 특히 유용합니다. 타입 섹션은 내장 타입과 안전한 오류 처리에 사용하는 핵심 Result/Option 타입을 설명합니다. 패턴 섹션은 Gleam의 완전한 case 표현식과 대수적 데이터 타입 정의 방법을 설명합니다. 각 항목에는 문맥 속에서 구문을 보여주는 코드 예제가 포함됩니다.

주요 기능

  • 기본 문법: let 바인딩(불변), fn/pub fn 정의, |> 파이프 연산자, 콜백 평탄화를 위한 use 표현식, 레이블 인자
  • 타입: Int(임의 정밀도), Float, String(UTF-8), Bool, prepend가 있는 List(a), Result(value, error), Option(a)
  • 패턴 매칭: 가드가 있는 case 표현식(n if n > 0), _ 와일드카드로 완전한 매칭
  • 커스텀 타입: 생성자가 있는 대수적 데이터 타입 정의(Circle, Rect), 타입 별칭
  • 모듈: 선택적 임포트(import gleam/string.{append}), 내보내는 타입을 위한 pub type
  • OTP 통합: gleam.toml 프로젝트 설정(name, version, target), gleam/otp/actor를 이용한 OTP 액터 패턴
  • <> 문자열 연결 연산자를 포함한 실제 Gleam 구문을 보여주는 모든 항목의 코드 예제
  • gleam.toml target 설정으로 Erlang(BEAM)과 JavaScript 두 컴파일 타겟 모두 지원

자주 묻는 질문

Gleam은 무엇이고 누구를 위한 언어인가요?

Gleam은 Erlang 바이트코드(BEAM VM에서 실행)나 JavaScript로 컴파일되는 정적 타입 함수형 프로그래밍 언어입니다. Erlang/OTP의 안정성과 동시성 모델에 현대적이고 친절한 타입 시스템을 더하고 싶은 개발자를 위해 설계되었습니다. 내결함성 백엔드 서비스, API, 분산 시스템 구축에 특히 적합합니다. Rust, Elm, Elixir, TypeScript 배경의 개발자들이 쉽게 접근할 수 있습니다.

Gleam의 파이프 연산자 |>는 무엇인가요?

파이프 연산자 |>는 왼쪽 표현식의 결과를 오른쪽 함수의 첫 번째 인자로 전달합니다. 깊게 중첩된 괄호 없이 데이터 변환 체인을 왼쪽에서 오른쪽, 위에서 아래로 읽는 순서로 작성할 수 있게 합니다. 예를 들어, "hello" |> string.uppercase |> string.append(" WORLD")는 string.append(string.uppercase("hello"), " WORLD")와 동일합니다.

Gleam은 예외 없이 오류를 어떻게 처리하나요?

Gleam은 실패할 수 있는 함수에 Result(value, error) 타입을 사용합니다. 함수는 성공 시 Ok(value)를, 실패 시 Error(reason)를 반환합니다. 호출자는 case 표현식이나 gleam/result 모듈의 헬퍼 함수로 두 변형을 모두 처리해야 합니다. result.try와 결합된 use 표현식은 Rust의 ? 연산자와 유사하게 중첩된 case 블록 없이 실패 가능한 연산을 체이닝하는 간결한 방법을 제공합니다.

Gleam에서 Result와 Option의 차이는 무엇인가요?

Result(value, error)는 값을 포함한 성공적인 계산이나 오류 이유를 포함한 실패를 나타냅니다. Option(a)는 값이 있는 경우(Some(value))나 값이 없는 경우(None)를 나타냅니다. 실패 케이스가 의미 있는 정보(오류 메시지, 오류 코드)를 담을 때 Result를 사용하세요. 존재하지 않을 수 있는 리스트의 항목을 찾는 것처럼 값이 단순히 선택적일 때는 Option을 사용하세요.

Gleam에서 커스텀 타입은 어떻게 작동하나요?

Gleam의 커스텀 타입은 type 키워드와 하나 이상의 생성자로 정의하는 대수적 데이터 타입입니다. 각 생성자는 타입이 있는 이름 붙인 필드를 가질 수 있습니다. 예를 들어, type Shape { Circle(radius: Float) Rect(width: Float, height: Float) }는 두 개의 변형을 가진 타입을 만듭니다. case를 이용한 패턴 매칭은 완전해야 합니다. 컴파일러는 모든 생성자를 처리하도록 요구하여 런타임에 처리되지 않는 케이스를 방지합니다.

Gleam의 use 표현식은 무엇인가요?

use 표현식은 여러 중첩된 콜백 함수가 있는 코드를 평탄하고 순차적으로 보이게 만드는 문법적 설탕입니다. result.try(read_file("data.txt"), fn(file) { ... })처럼 함수를 중첩하는 대신 use file <- result.try(read_file("data.txt")) 뒤에 file을 사용하는 코드를 작성합니다. 여러 Result나 Future 연산을 체이닝할 때 특히 유용합니다.

BEAM 타겟과 JavaScript 타겟은 어떻게 다른가요?

gleam.toml에서 target = "erlang"으로 설정하면 Gleam은 BEAM 가상 머신에서 실행되는 Erlang 바이트코드로 컴파일됩니다. 슈퍼바이저, gen_server, 고도의 동시성과 내결함성 시스템 구축을 위한 프로세스 모델 같은 OTP 기본 요소에 접근할 수 있습니다. target = "javascript"로 설정하면 브라우저나 Node.js 환경에 적합한 JavaScript로 컴파일됩니다. 두 타겟 모두 언어 구문은 동일하지만 사용 가능한 표준 라이브러리 모듈이 다릅니다.

Gleam의 레이블 인자는 어떻게 작동하나요?

Gleam 함수는 호출자가 이름으로 사용해야 하는 레이블(이름 붙인) 인자를 가질 수 있습니다. 함수 시그니처에서 label name:으로 정의합니다: fn create(name name: String, age age: Int) { }. create(name: "Jo", age: 30)처럼 호출합니다. 레이블 인자는 호출 위치의 가독성을 높이고, 인자를 어떤 순서로도 전달할 수 있게 하며, 여러 파라미터가 같은 타입일 때의 혼란을 없애줍니다.