나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-04-14 07:43:37

식별자


프로그래밍 언어 문법
{{{#!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 · 배커스-나우르 표기법
}}}}}}
프로그래밍 언어 목록 · 분류 · 문법 · 예제
파일:idents-in-java.png
Hello, world를 출력하는 Java 코드 예제에 포함된 식별자들
1. 개요2. 렉싱 규칙3. 예약어4. 컨벤션5. 언어별 상세
5.1. C5.2. Haskell5.3. Perl5.4. Ruby
6. 기타7. 관련 문서

1. 개요

identifier

프로그래밍 언어 등의 컴퓨터 언어에서 변수, 상수, 함수, 매크로, 클래스, 프로퍼티, 레이블[1], 타입, 모듈 등 특정 구성 요소를 참조(reference)하기 위해 개발자가 작명하는 고유한 이름. symbol, word[2] 등으로도 불린다.

2. 렉싱 규칙

언어별로 규칙이 상이하나 대부분의 주요 프로그래밍 언어에서 찾을 수 있는 특징들을 나열하면 다음과 같다.

이외에도 직렬화 등 이유로 이미 등록된 예약어와 같은 이름의 식별자를 만들어야 하는 경우, 이를 우회할 수 있게끔 이스케이프하는 문법을 지원하는 언어들도 존재한다.

3. 예약어

reserved word, keyword

식별자 중 문법(syntactic) 요소로 쓰이기 위해 언어 스펙 상에서 사전에 예약해둔 식별자들을 말하며 키워드라고도 불린다. 대표적인 예시들로 if, else, for, while, break 등 개별 문법 형태를 이루는 키워드들이 있으며, 언어나 구현에 따라 자료형도 예약어로 고정하는 경우도 있다.

대부분의 언어에서는 예약어가 식별자의 렉싱 규칙과 겹치기 때문에, 둘 다로 판단할 수 있는 경우 예약어로 판단하는 것을 우선한다. 예를 들어 i는 식별자, if는 예약어, iff는 식별자로 판단하는 식.

다만 렉서 수준에서 구현하지 않고 문법상 사용된 위치에 따라 같은 토큰이라도 예약어로 쓰였는지 식별자로 쓰였는지 똑똑하게 구분해 낼 수 있는 언어도 존재한다. 이러한 언어들은 파서 제작이 다소 까다로운 편이지만, 하위 호환성에 매우 민감한 언의 경우 이러한 방법을 채택하기도 한다. 대표적인 예시로 JavaScript가 있다.
#!syntax javascript
of = async async => async

4. 컨벤션

문법상으로 차이가 나는 것은 아니나, 관습적으로 많은 언어에서 의미에 따라 식별자의 형태를 일정한 규칙에 맞출 것을 권고하고 있다.

5. 언어별 상세

5.1. C

가장 보편적인 식별자 규칙을 가지고 있다. 숫자로 시작할 수 없고 글자는 [A-Za-z0-9] 그리고 _만 사용할 수 있으며, 공백은 허용되지 않는다.

길이의 경우 내부 단일 식별자 최대 길이는 63자, 외부(extern) 식별자 최대 길이는 31자이나, 실제 제한은 컴파일러 구현체마다 매우 상이한 편.

5.2. Haskell

유니코드 글자와 숫자, _, '를 사용할 수 있으며 반드시 글자나 _로만 시작한다. '는 주로 기존의 변수명 뒤에 붙혀 수학에서의 [math(A')]과 비슷한 의미로 사용한다.

5.3. Perl

각 자료형마다 식별자 규칙이 다르다. 예를 들어 일반 변수의 경우 $로, 배열의 경우 @로, 해시의 경우 %로 시작한다.

5.4. Ruby

식별자 규칙이 매우 복잡하고 상세한 편으로, 일반적인 언어에서는 허용되지 않는 여러 경우들을 사용할 수 있다.

예를 들어 10과 20을 더하는 간단한 표현식을 떠올려 보자.
#!syntax ruby
10 + 20
이는 충분히 직관적이나, 루비에서 +는 연산자가 아니라 Integer의 메서드로 정의되어 있다. 문법적 설탕(syntactic sugar)을 제거하면 이는 다음과 같다.
#!syntax ruby
10.+(20)
즉 이 메서드는 다음과 같이 정의되어 있고, 또 다음과 같이 오버라이딩 할 수 있다.
#!syntax ruby
class Integer
    def +(other)
        # ...
    end
end
이외에도 대부분의 유니코드 글자(letter)와 특수문자들을 유효한 식별자로 사용할 수 있다.

속성 또는 의미를 나타내기 위해 식별자 맨 앞 또는 뒤에 붙는 한두 글자의 기호를 sigil이라 부른다.end}}}
이외에도 _는 타 언어와 비슷하지만, 루프 등에서 변수를 넣어야 하나 해당 값을 사용하고 싶지 않을 때 자리 채움 용도로 사용하는 용례가 많다.

6. 기타

7. 관련 문서


[1] GOTO, labeled break 등에서 쓰이는 요소.[2] 주로 어휘 분석기 구현에서 사용되는 용어.