최근 수정 시각 : 2025-04-24 22:36:14

숨(프로그래밍 언어)/문법

파일:상위 문서 아이콘.svg   상위 문서:
#!if top1 != null && 문서명1 == null
[DEPRECATED] top1 파라미터는 더 이상 사용되지 않습니다! 대신 문서명1 파라미터를 사용해 주세요.
#!if top1 == null && 문서명1 != null
[[숨(프로그래밍 언어)|숨(프로그래밍 언어)]]

프로그래밍 언어 문법
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
프로그래밍 언어 문법
C(포인터 · 구조체 · size_t) · C++(클래스 · 이름공간 · 상수 표현식 · 특성) · C# · Java · Python(함수 · 모듈) · Kotlin · MATLAB · SQL · PHP · JavaScript(표준 내장 객체) · Haskell(모나드) ·
마크업 언어 문법
HTML · CSS
개념과 용어
함수(인라인 함수 · 고차 함수 · 콜백 함수 · 람다식) · 리터럴 · 문자열 · 식별자(예약어) · 상속 · 예외 · 조건문 · 반복문 · 비트 연산 · 참조에 의한 호출 · eval · 네임스페이스 · 호이스팅
기타
#! · == · === · deprecated · GOTO · NaN · null · undefined · 배커스-나우르 표기법
}}}}}}
프로그래밍 언어 목록 · 분류 · 문법 · 예제



1. 객체
1.1. 접근 영역
1.1.1. 접근문
2. 진입점3. 상속
1. 함수
1.1. 생성자1.2. 소멸자1.3. 재정의1.4. 고차 함수
2. 기본 자료형3. 형변환4. 값5. 실행문과 연산자6. 변수
6.1. 배열6.2. 참조 자료형
6.2.1. 지시자6.2.2. 할당자6.2.3. 참조자6.2.4. 혼합참조
7. 조건문8. 간이 반복문9. 반복문10. 일반화11. 예외 처리12. 임시 문법
12.1. 입력12.2. 렌더링 시작, 끝12.3. 그림그리기12.4. 변형12.5. 텍스트 출력12.6. 소리 출력

1. 객체

파일 생성 직후 나오는 객체 선택 화면에서 좌측의 UI에서 객체 버튼을 클릭하거나 아무 글자나 입력하면 생성된다. 객체가 선택된 상태에서 클릭하거나 엔터 키를 입력해 객체 내부로 진입해 내용을 볼 수 있다.

객체의 구성원을 사용하려면 객체 변수의 이름을 적은 뒤 ; 키를 입력한다.

1.1. 접근 영역

객체 내부에선 3가지 접근 영역이 있으며, 어디까지 접근할 수 있는지를 지정한다. Ctrl 방향키로 선언된 식별자의 영역을 옮길 수 있다.

공용: 어디서나 접근 가능하다.
보호: 해당 객체와 그 객체를 상속받은 객체만 접근할 수 있다.
전용: 해당 객체에서만 접근할 수 있다.

1.1.1. 접근문

보호나 전용 영역의 구성변수에서 Alt Y 단축키를 입력해 선언한다. 변수가 보호나 전용 영역에 있어서 객체 외부에서 접근할 수 없더라도 접근문이 있으면 접근문의 위치에 따라 변수를 사용할 수 있다. 접근문에서 Alt C 단축키를 입력해 상수로 만들면 접근문을 통해 변수를 사용할 시 변수를 수정할 수 없다. 또한 접근문을 통해 변수를 사용하면 기본적으로 참조 자료형을 사용할 수 없지만 Alt R 단축키로 참조 자료형 사용을 허용할 수 있다. 여기서도 Alt C 단축키로 수정은 금지할 수 있다.

2. 진입점

객체를 선택하고 Ctrl E 단축키를 눌러 만들 수 있다. 프로그램 실행시 자동으로 생성되는 객체로, 기본 생성자를 실행한다.

3. 상속

객체 내부에서 객체 이름을 선택한 상태에서 방향키 아래 버튼을 누르면 객체를 상속할 수 있다. 상속의 대상인 객체를 부모 객체, 상속을 받는 객체를 자식 객체라 칭하며, 자식 객체에선 부모 객체의 변수와 함수를 사용할 수 있다.

상속할 객체를 작성한 다음 방향키 오른쪽 버튼을 눌러 다중상속을 받을 수 있다. 이 때 다중상속의 대상이 될 수 있는 객체는 인터페이스와 조상객체로 한정되며, 일반적인 객체는 한개만 상속 가능하다.

인터페이스는 추상함수만으로 구성된 객체를 말하며, 조상객체는 다른 어떤 객체도 상속하지 않는 객체를 선택하고 스페이스바를 입력해서 만든다.

Alt Z 단축키로 해당 객체의 상속을 금지할 수 있다.

1. 함수

모든 함수는 객체에 속해 있다. 호출하면 내부의 코드를 실행하는 코드 묶음이며, 수학의 함수처럼 데이터를 넘길 수 있고, 종료될 때 데이터를 반환할 수 있다. 받는 데이터는 매개변수라 하고, 넘기는 값을 인자라 한다.

함수를 선언하려면 객체 내의 접근 영역중 하나를 선택하고 스페이스바를 입력하거나, 구성변수에서 Alt F 단축키를 입력해 구성변수를 함수로 만들 수도 있다.

함수의 최상단에는 함수 정의가 있으며, 좌측엔 반환형, 우측엔 이름을 작성한다. 함수를 선택하지 않을 경우 함수 정의만 표시된다. 함수 정의에서 아래 키를 눌러 매개변수 영역으로 갈 수 있다.

매개변수 영역에서 아래로 가면 함수 내용을 작성할 수 있으며, 반환형이 있을 경우 맨 밑에 반환문이 생겨 값을 반환할 수 있다.

사용할 땐 이름을 작성하고 스페이스바를 입력하면 괄호 안에 들어가 인자를 작성할 수 있다.

함수 정의에서 Alt S 단축키를 입력해 참조함수로 만들 수 있다. 참조함수는 할당자나 참조자, 혼합참조로 선언된 객체에서만 호출할 수 있다.

Alt U 단축키로 정적함수로 만들 수 있다. 접근 영역만 맞으면 객체를 생성하지 않아도 객체 이름을 적고 ; 키를 입력해 사용할 수 있다.

1.1. 생성자

객체를 생성할 때 실행되는 특수한 함수이다. 함수 정의에서 반환형과 이름을 모두 비우면 생성자가 된다. 매개변수도 없고 참조함수도 아닐 경우 기본 생성자가 될 수 있다. 기본 생성자는 숫자가 붙어있지 않아 함수 정의가 완전히 비어있다. 이미 기본 생성자가 있을 경우 탭 키를 눌러 조건을 만족하는 다른 생성자를 기본 생성자로 지정할 수 있다.

생성자의 매개변수 영역에서 아래 키를 누르면 객체를 초기화하는 구문이 나온다. 이곳에서 구성변수를 초기화할 수 있으며 부모 객체의 생성자를 선택해 호출하거나 다른 생성자를 호출할 수도 있다. 구성변수를 초기화하지 않으면 구성변수에 작성된 초기화를 사용한다.

진입점의 기본 생성자는 프로그램이 시작할 때 호출된다.

1.2. 소멸자

객체 삭제시 실행되는 함수로 접근 영역중 한 곳에서 Alt X 단축키로 선언한다.

1.3. 재정의

접근 영역 중 한 곳 또는 기존의 함수에서 Alt V 단축키를 눌러 받을 수 있다. 객체를 상속 받으면 자식 객체에서 부모 객체의 함수를 재정의 할 수 있다. 부모 객체의 참조가 자식 객체를 가리키고 있는 상태에서 자식 객체에서 재정의한 함수를 사용하면 재정의된 함수가 호출된다.

함수에서 Alt Z 단축키를 사용해 해당 함수의 재정의를 금지할 수 있다.

재정의된 함수를 사용할 때 탭 키를 눌러 특정 함수에서 정의된 함수를 호출하도록 할 수 있다.

1.4. 고차 함수

함수 정의에서 Alt H 단축키로 선언한다. 사용할 땐 함수 내용에서 Alt H 단축키로 고차함수 실행문을 만들어서 그 안에서 사용해야 한다. 고차함수는 반환형이 없으며, 함수 정의에서 위 방향키를 눌러 익명함수의 매개변수를 작성할 수 있다. 고차함수 안에서 Alt E 단축키를 누르면 고차함수 실행문 아래쪽에 있는 익명함수가 실행하도록 할 수 있으며 구문 안에 익명함수의 인자를 입력할 수 있다. 고차함수 안에서 Alt J 단축키를 누르면 익명함수의 매개변수가 일치하는 다른 고차함수를 실행시킬 수 있으며 익명함수는 그대로 전달한다. 익명함수 내부에서 외부의 지역변수나 매개변수를 사용할 수 있다.

함수형 프로그래밍을 지원하기 위한 구문이 아닌 반복문을 대체하기 위한 구문이기에 기능은 제한적이다. 익명함수를 반환받을 수 없고, 익명함수 자체를 고차함수로 만들 수도 없다.

2. 기본 자료형

숨 언어에는 7종류의 기본 자료형이 있다.
자료형 입력 범위
1바이트 논리형 Alt 1 참 또는 거짓
1바이트 정수형 Alt 2 -128~127
2바이트 정수형 Alt 3 -32768~32767
4바이트 정수형 Alt 4 -2147483648~2147483647
8바이트 정수형 Alt 5 -9223372036854775808~9223372036854775807
4바이트 실수형 Alt 6 약 -340간~340간 (절댓값이 1/14재 보다 작을 수 없다.)
8바이트 실수형 Alt 7 약 -(1구골)³~(1구골)³ (절댓값이 약 1/(1구골)³ 보다 작을 수 없다.)

3. 형변환

식별자에서 Alt T 단축키를 입력해 형변환을 할 수 있다. 객체의 경우 참조 자료형에서만 가능하며 참조하는 변수의 원래 자료형이 변환하려는 자료형에 맞는 경우에만 변환하며 맞지 않으면 0을 반환한다. C++의 dynamic_cast와 같은 방식.

4.

10진수 숫자를 쓸 땐 그냥 숫자를 쓰면 되고, 16진수를 쓰려면 앞에 0x를 붙이면 된다.

작은 따옴표 키로 문자를 입력할 수 있으며, 스페이스바나 엔터 등의 특수 문자는 이스케이프 문자를 사용할 수도 있지만 키를 직접 입력할 수도 있다. 문자 입력에서 나가려면 방향키를 누르면 된다. 문자는 UTF-16 인코딩을 사용하여 2바이트 정수형으로 취급한다.

큰 따옴표 키로 문자열을 입력할 수 있으며, 2바이트 정수형 배열의 참조 자료형 모두 사용할 수 있다.

Alt O를 입력하면 ⌾가 입력되며 이는 참이라는 뜻이고, 값은 1이다.
Alt X를 입력하면 ⦻가 입력되며 이는 거짓이라는 뜻이고, 값은 0이다.

5. 실행문과 연산자

실행문은 함수 내용에서 아무 글자나 입력하면 만들어진다. 변수를 적고 : 키를 입력하면 값을 대입할 수 있다. 실행문이나 초기화에서 사용할 수 있으며, ( 키를 입력하면 괄호를 만들 수 있고 괄호 안의 연산을 가장 먼저 수행하며 그 뒤엔 우선순위에 따라 연산한다. 괄호의 양 옆에서 Ctrl 방향키로 괄호를 연장시키거나 축소시킬 수 있다.
모양 입력 우선순위 기능
^ ^ 0 거듭제곱
\\ 0 제곱근
* * 1 곱셈
÷ / 1 나눗셈
% % 1 나머지
+ + 2 덧셈
- - 2 뺄셈
<< 3 왼쪽 시프트
>> 3 오른쪽 시프트
&& 4 비트 논리곱
| | 5 비트 논리합
@@ 6 비트 동치
$$ 6 비트 배타적 논리합
= = 7 같음
! 7 다름
<= 7 오른쪽이 크거나 같음
>= 7 왼쪽이 크거나 같음
< < 7 오른쪽이 큼
> > 7 왼쪽이 큼
& 8 논리곱
| 9 논리합
$ 10 동치
@ 10 배타적 논리합

식별자 하나에 적용하는 단항 연산자도 있다.
입력 기능
Alt - 음수
~ 비트 반전
` 부정
, 논리 변환[1]

6. 변수

변수에는 객체를 구성하는 구성변수, 함수에 전달되는 매개변수, 함수 내부에서 사용되는 지역변수가 있다. 구성변수는 접근 영역중 한 곳을 선택해 아무 글자를 입력하거나 기본 자료형을 입력해서 선언한다. 매개변수는 함수의 이름이나 자료형을 적는 곳에서 아래 방향키를 눌러 매개변수 영역으로 간 뒤 아무 글자나 입력하거나 기본 자료형을 입력해서 선언한다. 지역변수는 함수 내용에서 스페이스바나 기본 자료형을 입력해서 선언할 수 있다.

이름에서 : 키를 눌러 초기화할 수 있으며, 참조 자료형을 선언하지 않은 객체 변수는 스페이스바를 눌러 생성자를 선택해 사용할 수 있다.

Alt U 단축키로 정적변수로 만들 수 있다. 정적변수는 프로그램 실행시 단 한개만 존재하는 변수로, 구성변수의 경우 객체를 생성하지 않아도 접근 가능한 영역에 있으면 객체 이름을 적고 ; 키를 입력해 사용할 수 있다. Alt C 단축키를 입력하면 초기화 외에는 수정할 수 없는 상수가 된다.

6.1. 배열

자료형이 같은 데이터를 나열하고 색인을 부여한 자료구조이다. 변수에서 '['를 입력해서 선언하며, 안에 크기를 지정할 수 있다. 사용할 땐 변수 이름을 적고 '[' 키를 입력해 색인번호를 입력할 수 있다.

배열을 초기화할 땐 배열의 크기만큼 : 키를 입력해 각각의 원소를 초기화할 수 있다. 초기화 수보다 배열이 더 클 경우 나머지 원소들은 맨 마지막 초기화가 적용된다.

2바이트 정수형 배열은 큰 따옴표를 입력해 문자열로 초기화할 수 있다.

6.2. 참조 자료형

다른 변수를 참조하는 자료형이다. 공통적으로 '[' 키를 입력해 변수를 가리키게 할 수 있으며, 참조하는 변수가 없을 때 사용하면 0을 반환하고, 사용할 때 Alt P 단축키를 입력해 가리키는 변수가 있으면 1을, 없으면 0을 반환한다.

지시자를 제외하면 여러번 선언해서 참조 자료형 변수를 참조하는 참조 자료형을 만들 수 있으며, 그냥 사용하면 참조하는 변수를 사용하고, 다른 변수를 참조하게 하려면 Alt R 단축키를 입력해 변경할 참조 자료형을 선택해야 한다.

2바이트 정수형 배열로 선언했을 경우 큰따옴표를 입력해 문자열을 참조하게 할 수 있다.

자기 자신의 참조를 전달할 때는 Alt S 단축키를 입력한다. 참조함수가 아니면 지시자로만 전달 가능하다.

6.2.1. 지시자

매개변수나 지역변수에서만 선언할 수 있으며 Alt P 단축키로 선언한다. C++참조에 해당하는 자료형으로, 만들어지는 순간에만 참조하는 변수를 선택할 수 있고 한번 만들어진 지시자는 다른 변수를 참조하도록 변경할 수 없다.

지역변수나 매개변수를 참조할 수 있는 유일한 참조 자료형이다.

6.2.2. 할당자

변수에서 Alt A 단축키로 선언한다. 운영체제에 메모리를 요청하는 동적할당을 받기 위한 전용 참조이다. 대입할 때 Alt N 단축키로 동적할당을 받을 수 있고, 바로 초기화할 수도 있다. 배열 할당자는 배열 크기를 선언해야 하며 객체 할당자는 다른 객체를 대입하면 복사할 수 있다. 객체는 Alt N 단축키를 쓰지 않고 생성자를 사용해 할당받을 수도 있다. 객체 이름을 적고 ';' 키를 입력하면 생성자를 선택할 수 있다.

할당자에는 소유권 개념이 있어서 동적할당을 받은 특정 메모리를 참조하는 할당자는 하나만 존재할 수 있다. 할당자에 다른 할당자를 대입할 경우, 원래의 할당자는 0으로 초기화된다. 따라서 그 하나뿐인 할당자가 사라지면 동적할당 받은 메모리의 해제도 확정된다.

6.2.3. 참조자

변수에서 Alt R 단축키로 선언한다. 할당자로 동적할당 받은 메모리를 참조한다. 또한 정적변수도 참조 가능하다. 참조하는 메모리를 할당한 할당자가 사라지면 참조자도 무효화된다.

할당자를 상수 참조자로 취급해 참조자의 상수 참조자에 전달할 수 있다.

6.2.4. 혼합참조

변수에서 Alt D 단축키로 선언한다. 참조자로도 쓸 수 있고 할당자로도 쓸 수 있는 자료형이다. 기본적으로 참조자를 대입하면 참조자로서, 할당자를 대입하면 할당자로서 취급되지만, 할당자나 다른 혼합참조를 대입할 때 Alt P 단축키를 이용해 참조자로만 취급하도록 할 수 있다.

7. 조건문

함수 내용에서 Alt I 단축키로 선언한다. 기본적으로 왼쪽의 조건식과 오른쪽에 ⦻가 적힌 분기 한개가 있다. 분기의 값이 조건식에 온 값과 일치한다면 분기로 진행하며, 조건식의 값과 일치하는 분기가 없을 경우 조건식 아래로 진행한다. 따라서 기본적으로 조건식이 거짓일 때 오른쪽으로, 참일 때 아래쪽으로 진행한다. 방향키로 분기문 사이에서 이동하거나 아래로 가서 내용을 입력할 수 있다. 조건식이나 분기 쪽에서 스페이스바를 입력해 새로운 분기를 만들 수 있다. 조건문 안쪽에서 Alt Enter 단축키를 입력해 함수를 끝낼 수 있다.

8. 간이 반복문

Alt W 단축키로 선언한다. 일정 횟수 반복이나 배열 순회같은 간단한 작업을 하는 반복문이다. 상단의 구문에 숫자를 입력하면 아래의 변수가 정수형으로 추론되며 그 변수에 0부터 해당 숫자가 나올 때까지 1씩 더한 값이 대입되며 진행한다.

상단의 구문에 배열을 입력하면 아래의 변수는 해당 배열 원소의 지시자를 추론하며 그 배열을 순회해 각 원소의 지시자를 변수에 대입한다.

9. 반복문

Alt L 단축키로 선언한다. 자체적으로는 반복문으로서 기능하지 않지만, 내부의 조건분기에서 Alt ↑ 키를 누르면 위쪽으로, Alt ↓ 키를 입력하면 아래쪽으로 연결된다. Alt ← 키로 더 깊은 반복문으로 연결할 수 있고 Alt → 키로 연결을 해제할 수도 있다. 반복문과 연결된 조건 분기로 가면 연결된 반복문으로 이동한다. 이를 이용해 위쪽과 연결 시키면 위쪽부터 다시 실행하며 아래쪽과 연결하면 남은 구문을 무시하고 반복문 아래로 나간다.

기본적인 용법은 다른 언어로 치면 do~while(false)와 같다. 자체적으론 반복문이 아니지만 continue문으로 반복시키고 break문으로 빠져나갈 수 있는 방식인데, 다중 반복문을 한번에 나갈 수 있다는 장점이 있다.

10. 일반화

객체 이름이 있는 곳에서 Alt G 단축키를 입력해 선언한다. 자료형을 미리 정하지 않고 객체를 사용할 때 정해서 쓸 수 있는 자료형이다. 변수에서 쓸 때 참조 자료형을 적용해야 한다. 일반화가 선언된 객체를 사용할 땐 자료형을 매개변수 넣듯이 사용하며 이를 자료형 매개변수라 한다. 객체 외부에선 일반화가 적용된 변수를 사용할 땐 자료형 매개변수에 정의된 자료형으로서 사용한다. : 키를 입력해서 일반화의 부모 객체를 지정할 수 있다. 이 경우 자료형 매개변수를 작성할 때 해당 부모 객체를 상속한 자식 객체만 사용할 수 있으며, 객체 내부에서 해당 일반화 변수를 사용할 때 부모 객체의 구성원에 접근할 수 있다.

일반화 목록을 작성할 때 ;키를 눌러 공변으로 할 수 있다. 공변의 기호는 ⟄다. 공변은 그 객체를 상속하는 객체가 오도록 변수를 대입할 수 있다. 사용할 땐 공변 객체의 구성원에 접근하거나 참조를 받을 수 있지만 전달할 수는 없다.

일반화 목록을 작성할 때 ,키를 누르면 반변으로 할 수 있다. 반변의 기호는 ⟃다. 반변은 그 객체의 부모 객체가 오도록 할 수 있다. 사용할 땐 반변 객체에 참조를 전달할 수 있지만 구성원에 접근하거나 참조를 받을 수 없다.

일반화 목록을 비우면 일반화 목록과 관계없이 참조를 대입할 수 있지만 빈 일반화를 사용하는 변수나 함수 반환형은 사용시 참조의 유무를 받거나 공백을 대입할 수만 있다.

11. 예외 처리

예외를 던질 땐 Alt Q 단축키를 사용한다. 다른 언어와 달리 던지는 값이 없으며 함수 스택만 건너뛴다. 조건문의 분기에서 Alt Q를 입력해 그 분기에 왔을때만 예외를 던지게 할 수 있다.

반복문에서 Alt Q 단축키를 사용하면 예외를 받게 할 수 있다.

동적할당을 받을 메모리가 부족하거나 스택 오버플로가 발생하면 직접 던지지 않아도 예외를 자동으로 던진다. 이 때 Alt . 단축키로 만들 수 있는 ⚠ 모양 예외 전용 변수의 값이 바뀐다. 메모리 부족은 1, 스택 오버플로는 2다.

그 외에 0으로 나눴을 경우 예외는 던지지 않지만 예외 전용 변수의 값이 3이 되고 연산은 실행하지 않는다.

12. 임시 문법

모두 함수 내용에서 선언하는 구문으로 입력과 출력을 위해 만들어진 임시 문법으로, 정식 입출력 라이브러리가 추가되면 비활성화될 수 있다.

12.1. 입력

Alt M 단축키로 선언한다. Windows API의 메시지 큐에서 메시지를 받아온다. 3개의 변수를 넣을 수 있는데, 첫번째는 4바이트 정수형으로 메시지 종류를 받아오고, 나머지 둘은 8바이트 정수형으로 각각 WPARAM, LPARAM을 받아온다. 메시지의 값이 바뀌지 않았다면 메시지가 없는 것이므로, 첫 변수를 0으로 하고 메시지를 받았을 때 여전히 0이라면 메시지가 없는 것이다.

12.2. 렌더링 시작, 끝

Alt Home 단축키로 렌더링을 시작하며 주어진 색상 코드로 색을 채우고, Alt End 단축키로 렌더링을 종료한다. 렌더링 관련 코드는 렌더링 시작과 끝 사이에 있어야 한다.

12.3. 그림그리기

Alt Insert 단축키로 선언한다. Ctrl I 단축키나 메뉴의 가저오기 기능으로 포함한 그림을 그린다. 포함된 그림엔 번호가 있어서 가운데엔 해당 번호를 쓰고, 사방엔 그림을 표시하는 상자의 크기로 왼쪽과 위는 기본적으로 0, 오른쪽과 아래는 기본적으로 1로 되어 그림이 그대로 출력되고 그림의 일부만 표시하고 싶을때 해당 숫자를 변경한다.

12.4. 변형

Alt T 단축키로 선언한다. 그림을 변형할 행렬을 지정하는 구문으로, 2×3 행렬을 사용한다.

12.5. 텍스트 출력

Alt Space 단축키로 선언한다. 위쪽엔 출력할 문자를 적고 아래쪽엔 색상 코드를 적는다.

12.6. 소리 출력

Ctrl I 단축키나 메뉴의 가저오기 기능으로 포함한 소리를 출력한다. 포함된 소리엔 번호가 있어 위쪽에 번호를 적고, 아래쪽에 소리의 볼륨을 적는다. 볼륨은 최대 10000이며 0을 적으면 해당 소리가 끝난다.



[1] 값이 0이면 0, 0이 아니면 1이 된다.

분류