콘텐츠로 이동

문법 레퍼런스 개요

이 레퍼런스는 Unibase 소스(.uni)의 선언·문장·식과 내장 언어 규칙을 설명합니다. 학습용 장(변수와 제어 흐름, 클래스와 객체 등)이 예제를 따라 읽는 문서라면, 이 레퍼런스는 작성할 형태와 지원 제한을 찾아보는 문서입니다.

  • 문법 설명은 현행 언어 명세와 구현을 기준으로 합니다. 예제 카드의 보존된 검사 결과와 서버에서 새로 받은 결과는 확인 시점·도구가 다를 수 있으므로 각각 읽습니다.
  • 전체 소스는 파일 단위 예제이고, 오류 예는 거절되는 형태를 설명합니다. 모든 예제를 모든 생성 대상에서 빌드·실행했다는 뜻은 아닙니다.
  • unic check 통과는 문법·의미 검사 통과를 뜻합니다. 모든 실행 대상(native, Web, 서버 코드 생성)에서 같은 기능이 실행된다는 뜻은 아닙니다. 예제의 실행 방법은 변환과 실행 사용 안내를 참고하세요.
  • 언어 명세 문서에는 있지만 컴파일러가 아직 받아들이지 않는 문법은 로드맵으로 따로 표시합니다. 로드맵 문법은 작성하지 마세요.
표기 의미
지원 unic check가 받아들이고 의미 검사까지 수행합니다.
제한 지원 받아들이지만 형태·위치·실행 대상에 제한이 있습니다. 해당 절의 조건을 따르세요.
구문만 구문은 통과하지만 내용을 검사하거나 타입을 만들지 않습니다.
미지원 컴파일러가 거절합니다. 표의 대체 문법을 사용하세요.
로드맵 언어 명세에 계획으로만 있습니다. 현재 거절되거나 의미가 없습니다.
장 다루는 문법
어휘 구조 소스 인코딩, 식별자, 주석, 예약어, 숫자·문자·문자열 리터럴, 이스케이프, 기호
선언과 타입 package·import, class·interface·enum, 수식어, 제네릭, 필드·생성자·메서드, 매개변수와 이름 있는 인수, 상속, 기본 타입·null 허용 타입
문장 지역 변수, 대입, if·while·do-while·for, break·continue·return, throw·try/catch, print, await, 도달할 수 없는 문장
식과 연산자 리터럴, 연산자 우선순위와 타입 규칙, 삼항 연산자, 호출·생성자 호출, 컬렉션 리터럴, 인덱스, this·super
내장 언어와 schema sql { }, sql"""…""", 직접 SQL 문장, json { }, html { }, css { }, schema grpc, 로드맵 DSL
어노테이션과 문법 확장 @Service·@Mapper·@Store, @External·@Bind, native·partial, Unibase가 문법을 확장하는 방식
문법 요약과 미지원 목록 전체 문법 EBNF 요약, 다른 언어에서 가져오기 쉬운 미지원 문법과 대체 문법
전체 소스: Hello.uni
class Hello {
static void main() {
print("Hello, Unibase");
}
}
  • 실행 프로그램에는 static void main()과 그 안의 실행 문장이 하나 이상 필요합니다.
  • print는 값을 한 줄로 출력하는 내장 문장입니다. Console.write는 줄바꿈 없는 텍스트 출력, Console.error는 오류 출력을 제공합니다.
  • 문장은 세미콜론으로 끝내고, 클래스·메서드·제어 흐름 본문은 중괄호로 감쌉니다.

Java·C#에 익숙한 경우 먼저 알아 둘 차이

섹션 제목: “Java·C#에 익숙한 경우 먼저 알아 둘 차이”
다른 언어의 습관 Unibase에서 쓰는 형태
new User("Kim") User("Kim") — new는 거절됩니다.
for (User u : users) for (User u in users) — 컬렉션을 순회합니다. 실제 대상의 진단을 확인합니다.
i++, x += 1 i = i + 1, x = x + 1
switch 분기는 if/else if로 작성합니다.
try/catch/finally 예외를 처리하고 자원을 정리합니다. 대상별 오류 문구·경계값 동작을 확인하세요.
Console.println(count) print(count)는 한 줄 출력, Console.write("" + count)는 줄바꿈 없는 텍스트 출력입니다.
boolean bool과 boolean 모두 사용 가능합니다. 문서는 bool을 사용합니다.
멤버 기본 접근이 package/internal 멤버의 기본 접근은 private입니다. 공개할 멤버에는 public을 씁니다.

함수 값은 (int) -> int 같은 타입과 x => … 람다로 작성하고 f(value)로 호출합니다. 람다와 캡처, 모델링 DSL과 추적성, 직접 작성하고 실행하기로 이어서 읽으세요.

전체 목록은 문법 요약과 미지원 목록에 있습니다.