Unibase 언어 안내
Unibase의 문법은 클래스·메서드·타입을 명시하는 구조입니다. 문법을 읽고 값을 처리하는 코드를 작성한 뒤, 사용한 언어 요소의 실제 결과를 비교하는 순서로 학습할 수 있습니다.
언어 요소를 읽는 순서
섹션 제목: “언어 요소를 읽는 순서”| 알고 싶은 것 | 문서 | 익히는 내용 |
|---|---|---|
| 프로그램의 형태 | 프로그램 구조와 타입 | package·import·main·변수 타입·범위·접근 |
| 값을 계산하는 방법 | 변수와 제어 흐름 | 대입·비교·분기·반복·매개변수·반환 |
| 상태와 동작 묶기 | 클래스와 객체 | 생성자·this·상속·인터페이스·조합 |
| 여러 값 처리 | List·Set·Map | 순회·중복 제거·집합 연산·키별 집계 |
| 작업과 완료 구분 | Thread와 비동기 작업 | Runnable·Callable·Thread·Task·Future |
| 연결과 데이터 전달 | Net과 소켓 통신 | 주소·connect·output·accept·close |
| 저장할 값 전달 | SQL과 값 바인딩 | 문장·실행·ResultSet의 구분 |
| 실패를 찾아 처리 | 오류와 예외 | 검사·빌드·실행·비교 오류, throw·catch |
본문의 전체 소스에는 빌드·실행 버튼과 원본 다운로드가 있습니다. 문법 형태나 잘못된 코드를 설명하는 조각은 전체 실행 프로그램과 구분해 표시합니다.
문자열과 이스케이프
섹션 제목: “문자열과 이스케이프”문자열은 큰따옴표로 감쌉니다. 문자열 안의 \n은 줄바꿈이며, \"는 큰따옴표를 나타냅니다.
아래 예제의 언어 탭에서 이스케이프의 표현을 비교하고, 예상 출력을 펼쳐 줄바꿈과 따옴표가 어떻게 표시되는지 확인할 수 있습니다.
class EscapedText {
static void main() {
print("Hello,\nUnibase! Say \"Hello\".");
}
}public class EscapedText {
public static void main(String[] args) {
System.out.println("Hello,\nUnibase! Say \"Hello\".");
}
}class EscapedText:
@staticmethod
def main():
print("Hello,\nUnibase! Say \"Hello\".")
if __name__ == "__main__":
EscapedText.main()using System;
class EscapedText {
public static void Main() {
Console.WriteLine("Hello,\nUnibase! Say \"Hello\".");
}
}class EscapedText {
static main(): void {
console.log("Hello,\nUnibase! Say \"Hello\".");
}
}
EscapedText.main();package main
import "fmt"
func main() {
fmt.Println("Hello,\nUnibase! Say \"Hello\".")
}다른 언어의 탭은 직접 작성한 대응 코드이며 컴파일러의 자동 생성 결과가 아닙니다. 언어마다 API와 실행 환경이 다릅니다. 이 페이지의 빌드·실행은 Unibase 탭에서 사용할 수 있습니다.
Unibase 실행 결과
빌드·실행 메시지
예상 출력
Hello,
Unibase! Say "Hello".
탭으로 항목 구분하기
섹션 제목: “탭으로 항목 구분하기”\t는 탭 문자입니다. 두 줄의 항목과 수량 사이에 탭을 넣습니다. 탭의 표시 너비는 화면에 따라 다를 수 있습니다.
class TabbedText {
static void main() {
print("항목\t수량\n사과\t2");
}
}public class TabbedText {
public static void main(String[] args) {
System.out.println("항목\t수량\n사과\t2");
}
}class TabbedText:
@staticmethod
def main():
print("항목\t수량\n사과\t2")
if __name__ == "__main__":
TabbedText.main()using System;
class TabbedText {
public static void Main() {
Console.WriteLine("항목\t수량\n사과\t2");
}
}class TabbedText {
static main(): void {
console.log("항목\t수량\n사과\t2");
}
}
TabbedText.main();package main
import "fmt"
func main() {
fmt.Println("항목\t수량\n사과\t2")
}다른 언어의 탭은 직접 작성한 대응 코드이며 컴파일러의 자동 생성 결과가 아닙니다. 언어마다 API와 실행 환경이 다릅니다. 이 페이지의 빌드·실행은 Unibase 탭에서 사용할 수 있습니다.
Unibase 실행 결과
빌드·실행 메시지
예상 출력
항목 수량
사과 2
역슬래시와 경로 문자열
섹션 제목: “역슬래시와 경로 문자열”문자열에서 역슬래시 한 개를 표현하려면 \\를 씁니다. 이 예제는 경로를 문자열로 출력하며 파일을 열거나 만들지 않습니다.
class FilePath {
static void main() {
print("C:\\samples\\hello.uni");
}
}public class FilePath {
public static void main(String[] args) {
System.out.println("C:\\samples\\hello.uni");
}
}class FilePath:
@staticmethod
def main():
print("C:\\samples\\hello.uni")
if __name__ == "__main__":
FilePath.main()using System;
class FilePath {
public static void Main() {
Console.WriteLine("C:\\samples\\hello.uni");
}
}class FilePath {
static main(): void {
console.log("C:\\samples\\hello.uni");
}
}
FilePath.main();package main
import "fmt"
func main() {
fmt.Println("C:\\samples\\hello.uni")
}다른 언어의 탭은 직접 작성한 대응 코드이며 컴파일러의 자동 생성 결과가 아닙니다. 언어마다 API와 실행 환경이 다릅니다. 이 페이지의 빌드·실행은 Unibase 탭에서 사용할 수 있습니다.
Unibase 실행 결과
빌드·실행 메시지
예상 출력
C:\samples\hello.uni
JSON 모양의 문자열
섹션 제목: “JSON 모양의 문자열”JSON의 키와 문자열 값에는 큰따옴표가 들어갑니다. Unibase 문자열 안에서는 \"로 표현합니다.
아래 예제는 고정된 JSON 모양의 텍스트를 출력합니다. JSON 객체 생성이나 파싱 예제는 아닙니다.
class JsonText {
static void main() {
print("{\"language\":\"Unibase\",\"ready\":true}");
}
}public class JsonText {
public static void main(String[] args) {
System.out.println("{\"language\":\"Unibase\",\"ready\":true}");
}
}class JsonText:
@staticmethod
def main():
print("{\"language\":\"Unibase\",\"ready\":true}")
if __name__ == "__main__":
JsonText.main()using System;
class JsonText {
public static void Main() {
Console.WriteLine("{\"language\":\"Unibase\",\"ready\":true}");
}
}class JsonText {
static main(): void {
console.log("{\"language\":\"Unibase\",\"ready\":true}");
}
}
JsonText.main();package main
import "fmt"
func main() {
fmt.Println("{\"language\":\"Unibase\",\"ready\":true}")
}다른 언어의 탭은 직접 작성한 대응 코드이며 컴파일러의 자동 생성 결과가 아닙니다. 언어마다 API와 실행 환경이 다릅니다. 이 페이지의 빌드·실행은 Unibase 탭에서 사용할 수 있습니다.
Unibase 실행 결과
빌드·실행 메시지
예상 출력
{"language":"Unibase","ready":true}
문자열 표기의 선택
섹션 제목: “문자열 표기의 선택”| 소스 안의 표기 | 표현하는 문자 | 사용할 상황 |
|---|---|---|
\n |
줄바꿈 | 여러 줄의 메시지 |
\t |
탭 | 고정 항목을 구분한 출력 |
\" |
큰따옴표 | 인용문·JSON 모양 텍스트 |
\\ |
역슬래시 | 역슬래시가 들어가는 경로 문자열 |
문자열 안의 표기와 실행 뒤의 실제 문자는 다릅니다. 출력 결과에 역슬래시 n이 그대로 보이는지, 줄바꿈으로 바뀌었는지 비교해야 합니다. 파일 경로를 출력했다고 그 파일을 열거나 저장한 것은 아닙니다.
클래스와 시작 지점
섹션 제목: “클래스와 시작 지점”첫 번째 예제는 클래스 내부에 static void main()을 둡니다.
이 콘솔 예제의 실행은 main()에서 시작합니다. 문장 끝에는 세미콜론을 사용하고, 클래스와 메서드 본문은 중괄호로 감쌉니다.
소스 구성
섹션 제목: “소스 구성”다른 패키지의 타입을 사용할 때는 import로 가져올 수 있습니다.
Console 예제에서 unibase.system.Console을 가져오는 소스를 확인할 수 있습니다.
인터페이스와 객체 구성은 클래스와 객체에서 이어서 설명합니다. 다중 소스 프로젝트 구성은 별도 확인 후 안내합니다.
라이브러리 사용
섹션 제목: “라이브러리 사용”변수 하나에서 시작하는 변수와 제어 흐름, 여러 값을 다루는 List·Set·Map, 작업 완료를 기다리는 Thread와 비동기 작업, 연결과 전송을 설명하는 Net과 소켓 통신으로 이어집니다. 각 장의 코드는 언어 요소를 설명하는 본문에 포함되며, 소스별 검증 결과도 함께 표시합니다. 현재 실행 확인 범위에서 실제 동작 확인과 출력 불일치를 구분할 수 있습니다. 선언 목록과 콘솔 출력은 Standard 라이브러리에서 확인하세요.