시길 (컴퓨터 프로그래밍)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
시길은 컴퓨터 프로그래밍에서 변수, 함수, 자료형 등의 식별자를 나타내기 위해 사용되는 문자나 기호를 의미한다. 베이직, 펄, 라쿠 등 여러 프로그래밍 언어에서 시길이 사용되었으며, 각 언어마다 시길의 종류와 사용법이 다르다. 시길은 변수의 자료형이나 범위를 지정하거나, 식별자와 다른 요소를 구분하는 역할을 한다. 유사한 개념으로 셸 스크립트의 변수, 식별자 규칙, 스트로핑, 헝가리안 표기법, 리터럴 접미사/접두사 등이 있다.
더 읽어볼만한 페이지
- 변수 (컴퓨터 과학) - 멤버 변수
멤버 변수는 객체 지향 프로그래밍에서 객체의 속성을 저장하고 관리하며 객체의 상태를 나타내는 변수로, 지역 변수와 달리 객체의 생명 주기와 함께 값을 유지한다. - 변수 (컴퓨터 과학) - 정적 변수
정적 변수는 프로그램 실행 시간 동안 값을 유지하며, C 언어에서 `static` 키워드로 정의되어 함수 호출 간에 값을 유지하고, 객체 지향 프로그래밍에서 클래스의 모든 인스턴스에서 공유되는 클래스 변수로 사용된다. - 소스 코드 - 헤더 파일
헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다. - 소스 코드 - 헝가리안 표기법
헝가리안 표기법은 변수 이름에 데이터 타입이나 목적을 나타내는 접두사를 붙이는 명명 규칙으로, 찰스 시모니가 고안하여 마이크로소프트에서 널리 사용되었으나, 코드 가독성 향상에 대한 유용성 논란과 함께 최신 IDE 환경에서는 불필요하다는 비판도 있다.
시길 (컴퓨터 프로그래밍) | |
---|---|
정의 | |
정의 | 컴퓨터 프로그래밍에서 변수 이름에 첨부된 특수 문자 또는 기호 |
개요 | |
설명 | 변수의 데이터 형식이나 용도를 나타내는 데 사용됨 |
프로그래밍 언어별 시길 | |
PHP | 달러 기호($)는 변수 이름을 나타냄 (예: `$myVariable`) |
펄 | "$ (스칼라): 단일 값 (숫자, 문자열, 참조)" "@ (배열): 값의 목록" "% (해시): 키-값 쌍의 집합" "& (서브루틴): 코드 블록" "* (글로벌 변수): 모든 위치에서 접근 가능한 변수" "(예: `$name`, `@array`, `%hash`)" |
루비 | "$ (전역 변수): 프로그램 전체에서 접근 가능한 변수" "@ (인스턴스 변수): 특정 객체 인스턴스에 속하는 변수" "@@ (클래스 변수): 클래스 자체에 속하는 변수" "(예: `$name`, `@instance_variable`, `@@class_variable`)" |
스위프트 | "? (옵셔널): 값이 있거나 없을 수 있음을 나타냄" "! (암시적 언래핑 옵셔널): 옵셔널 값이 항상 있다고 가정하고 자동으로 언래핑" "(예: `var name: String?`, `var label: UILabel!`)" |
리습 | "* (전역 변수): 프로그램 전체에서 접근 가능한 변수" "(예: `*name*`)" |
클로저 | "* (전역 변수): 프로그램 전체에서 접근 가능한 변수" "(예: `*name*`)" |
레프 | "$ (전역 변수): 프로그램 전체에서 접근 가능한 변수" "(예: `$name`)" |
셰이디 | "@ (그룹): 데이터 그룹을 나타냄" "(예: `@group(0) var |
SQL | "@ (변수): 변수를 나타냄" "(예: `@my_variable`)" |
2. 역사적 문맥
시길의 사용은 베이직에서 시작되었다. 베이직에서 가장 잘 알려진 시길은 모든 문자열 이름 뒤에 붙는 달러 기호("$")이다. 많은 베이직 언어들은 정수와 부동소수점, 정밀도를 나타내기 위해 다른 시길(예: "%")을 사용했다.
래리 월은 펄에 셸 스크립트의 시길을 채택했다.
2. 1. 베이직 (BASIC)
베이직에서 시길 사용이 시작되었으며, 가장 잘 알려진 예는 모든 문자열 변수 이름에 추가되는 달러 기호 ("$
")이다. 많은 베이직 언어들은 정수와 부동소수점 숫자, 정밀도를 나타내기 위해 다른 시길(예: "%
")을 사용했다.[14]1980년대~1990년대 대한민국에서 MSX, 애플 II, IBM PC 호환기종 등 8/16비트 컴퓨터가 널리 보급되면서, 베이직은 컴퓨터 프로그래밍을 배우는 사람들이 많이 사용하는 언어가 되었다. 이로 인해 당시 프로그래머들에게 시길은 매우 친숙한 개념이었다.
2. 2. 펄 (Perl)
래리 월은 자신의 펄 프로그래밍 언어에 셸 스크립트의 시길을 채택하여 사용하였다.[14] 펄은 동적 자료형 언어이기에 시길은 문자열과 정수와 같은 세세한 자료형을 지정하지는 않으며, 스칼라(`$`를 두문자로 사용), 배열 (`@` 사용), 해시 (`%` 사용), 함수 (`&` 사용)와 같이 더 일반적인 형태를 나타낸다. 펄 6는 트위길(twigil)이라 불리는 이차적 시길을 도입하였으며, 이는 변수의 영역을 지시하기 위해 사용된다. 펄 6의 트위길의 저명한 예로는 `^`가 있으며 자가 선언 매개변수(입력 매개변수)와 객체 속성 접근자(예: 인스턴스 변수)와 함께 사용된다.2. 3. 라쿠 (Raku)
래리 월은 셸 스크립트의 시길을 펄 프로그래밍 언어에 채택했다. 펄은 동적 자료형 언어이기에 시길은 문자열, 정수와 같은 세분화된 자료형을 지정하지 않고, 스칼라(접두사 "$
" 사용), 배열( "@
" 사용), 해시( "%
" 사용), 서브루틴( "&
" 사용)과 같은 더 일반적인 형태를 지정한다. 라쿠는 변수의 범위를 나타내기 위해 보조 시길 또는 '''트위길'''을 사용한다.[2] 라쿠에서 트위길의 주요 예는 자체 선언된 형식 매개변수("자리 표시자 변수")와 함께 사용되는 "^
" (캐럿)과 객체 속성 접근자(인스턴스 변수)와 함께 사용되는 ".
"이다.3. 여러 언어에서의 시길 사용
베이직은 시길 사용을 대중화한 언어이다. 베이직에서 가장 잘 알려진 시길은 모든 문자열 변수 이름에 추가되는 달러 기호 ("`$`")이다. 다양한 베이직 언어들은 정수, 부동소수점 수, 정밀도 등을 나타내기 위해 다른 시길들("`%`" 등)을 사용한다.
래리 월은 펄 프로그래밍 언어에 셸 스크립트의 시길을 도입했다. 펄은 동적 자료형 언어이므로, 시길은 문자열이나 정수와 같은 세부 자료형을 지정하지 않는다. 대신, 더 일반적인 분류인 스칼라 (두문자 "`$`"), 배열 ("`@`"), 해시 ("`%`"), 함수 ("`&`") 형태를 나타낸다. 펄 6에서는 변수의 영역을 나타내는 이차 시길인 트위길(twigil)이 도입되었다.[14] 펄 6 트위길의 예로는 자가 선언 매개변수(입력 매개변수)와 객체 속성 접근자(예: 인스턴스 변수)에 사용되는 "`^`"가 있다.
이 외에도 다양한 프로그래밍 언어에서 고유한 시길을 사용하고 있으며, 자세한 내용은 하위 섹션에서 확인할 수 있다.
3. 1. CLIPS
CLIPS에서 스칼라 변수는 "?" 시길로 시작하고, 다중 필드(예: 1단계 목록) 변수는 "$?"로 시작한다.3. 2. Common Lisp
Common Lisp에서 특수 변수(동적 범위)는 일반적으로 이어머프 컨벤션이라고 불리는 `*`로 묶는다. 이것은 관례일 뿐 강제되지는 않지만, 언어 자체에서 이 관행을 채택한다(예: `*standard-output*`). 마찬가지로, 일부 프로그래머는 상수를 `+`로 묶는다.[3]3. 3. CycL
CycL에서 변수는 "?" 시길로 시작하며, 상수 이름은 "#$"(발음: "해시-달러")로 시작한다.[3][4]3. 4. Elixir
Elixir에서 시길은 "~" 기호로 제공되며, 시길의 유형을 나타내는 문자와 구분 기호가 뒤따릅니다. 예를 들어, `~r(foo)`는 "foo"의 정규 표현식입니다. 다른 시길에는 문자열의 `~s`와 날짜의 `~D`가 있습니다. 프로그래머는 자체 시길을 만들 수도 있습니다.[5]3. 5. INTERCAL
INTERCAL은 난해한 프로그래밍 언어 중 하나로, 변수 사용에 있어 독특한 시길을 사용한다.[6] 각 시길은 특정 데이터 유형을 나타낸다.| 시길 | 의미 | 비고 |
|-------------|-------------------|----------------------------|
| `.` (spot) | 16비트 정수 | |
| `:` (twospot) | 32비트 값 | |
| `,` (tail) | 16비트 값 배열 | |
| `;` (hybrid) | 32비트 값 배열 | |
| `@` (whirlpool) | 값을 포함할 수 없는 변수 ( 클래스에 사용) | CLC-Intercal 추가 |
| `_` | 수정된 컴파일러 저장 | CLC-Intercal 추가 |[6] [7]
3. 6. MAPPER (BIS)
MAPPER (일명 BIS)에서 명명된 변수는 문자열이나 문자 값이 따옴표를 필요로 하지 않기 때문에 "<"로 시작하고 ">"로 끝난다.[6]3. 7. mIRC 스크립트
mIRC영어 스크립트에서 식별자는 "$" 시길을 가지며, 모든 변수는 "%"로 시작한다(지역 변수, 전역 변수, 데이터 유형에 관계없이). 이진 변수는 "&"로 시작한다.종류 | 시길 | 설명 |
---|---|---|
식별자 | $ | |
변수 | % | 지역 변수, 전역 변수, 데이터 유형에 관계없이 사용 |
이진 변수 | & |
3. 8. MUMPS
MUMPS 프로그래밍 언어에서 `$`는 내장 함수 이름과 "특수 변수 이름"(실행 상태에 접근하기 위한 내장 변수) 앞에 붙는다. `$Z`는 비표준 내장 함수 이름 앞에 붙고, `$$`는 외부 함수 이름 앞에 붙는다. 루틴(프로시저, 서브루틴, 함수에 사용) 및 전역 변수(데이터베이스 저장소)는 캐럿(`^`)으로 시작한다. 마지막 전역 변수 하위 트리는 캐럿과 마지막 첨자를 통해 간접적으로 참조될 수 있는데, 이를 "네이키드 참조"라고 한다. 시스템 전체의 루틴과 전역 변수(특정 공유 데이터베이스에 저장)는 `^%`로 시작하며, "퍼센트 루틴"과 "퍼센트 전역"이라고 불린다.3. 9. Objective-C
Objective-C에서 문자열 리터럴은 `@`로 시작하며, 객체 유형 `NSString`의 인스턴스이다. clang v3.1 / LLVM v4.0 이후에는 `NSNumber`, `NSArray`, 또는 `NSDictionary`의 인스턴스일 수도 있다. `@` 접두사는 클래스 정의 구조를 표현하기 위해 `interface`, `implementation`, `end`와 같은 키워드에도 사용된다. 클래스 선언과 정의 내에서 접두사 `-`는 멤버 메서드와 변수를 나타내는 데 사용되는 반면, 접두사 `+`는 클래스 요소를 나타낸다.3. 10. PHP
PHP 언어는 주로 Perl에서 영감을 받아, 모든 변수 이름 앞에 '$
'를 붙인다.[8] 이 시길로 시작하지 않는 이름은 상수, 함수, 또는 클래스 이름(혹은 클래스와 같은 네임스페이스를 공유하는 인터페이스나 트레이트 이름)으로 간주된다.[8]예를 들어, ` $name`은 변수를 나타내지만, `name`은 상수, 함수, 또는 클래스 이름을 나타낸다. 이러한 `$` 시길 사용법은 PHP가 한국에서 널리 사용되는 웹 개발 언어 중 하나이기에, 한국 개발자들에게 매우 익숙하며 중요한 특징으로 여겨진다.
3. 11. PILOT
PILOT는 버퍼(문자열 변수)에 "$
"를, 정수 변수에 "#
"을, 프로그램 레이블에 "*
"를 사용한다.3. 12. Python
Python영어은 "private" 속성에 "`__`" 접두사 (''dunder'')를 사용한다.[2]3. 13. Ruby
Ruby에서 일반 변수는 시길(특수 기호)이 없지만, 전역 변수 앞에는 `$`를 붙이고, 인스턴스 변수 앞에는 `@`를, 클래스 변수 앞에는 `@@`를 붙인다.[8]Ruby는 또한 접미사 시길을 사용하는데, `?`는 부울(참 또는 거짓) 값을 반환하는 메서드를 나타내고, `!`는 메서드에 예기치 않은 효과가 있을 수 있어 주의해서 처리해야 함을 나타낸다.[8]
시길 | 의미 | 설명 |
---|---|---|
(없음) | 일반 변수 | - |
`Ruby에서 일반 변수는 시길(특수 기호)이 없지만, 전역 변수 앞에는 `$`를 붙이고, 인스턴스 변수 앞에는 `@`를, 클래스 변수 앞에는 `@@`를 붙인다.[8] Ruby는 또한 접미사 시길을 사용하는데, `?`는 부울(참 또는 거짓) 값을 반환하는 메서드를 나타내고, `!`는 메서드에 예기치 않은 효과가 있을 수 있어 주의해서 처리해야 함을 나타낸다.[8] | 전역 변수 | 프로그램 전체에서 접근 가능한 변수 |
`@` | 인스턴스 변수 | 특정 객체에 속하는 변수 |
`@@` | 클래스 변수 | 특정 클래스의 모든 인스턴스에서 공유하는 변수 |
`?` | 부울 또는 진실/거짓 값을 반환하는 술어 메서드 (접미사) | 예: `empty?` (비어 있는지 확인) |
`!` | 주의해서 처리해야 하는 메서드 (접미사) | 예: `sort!` (원본 배열 자체를 정렬) |
3. 14. Scheme
Scheme에서 관례적으로 항상 부울 값을 반환하는 프로시저(함수)의 이름은 보통 "?"로 끝난다. 마찬가지로, 이전에 할당된 Scheme 객체(예: 쌍, 벡터 또는 문자열)의 일부에 값을 저장하는 프로시저의 이름은 보통 "!"로 끝난다.[8]3. 15. Standard ML
Standard ML에서 타입을 참조하는 변수에는 접두사로 작은따옴표(`'`) 시길이 사용된다. 동일성이 정의된 타입을 참조할 경우, 시길은 두 개의 작은따옴표(`''`)로 표시된다. `'` 문자는 변수 이름 안이나 끝에도 나타날 수 있는데, 이 경우에는 특별한 의미를 가지지 않는다.3. 16. Transact-SQL
Transact-SQL에서 `@`는 지역 변수 또는 매개변수 이름 앞에 붙는다. 시스템 함수(이전에는 전역 변수로 알려짐)는 `@@` 접두사로 구분된다.[4] 임시 테이블은 `#` 접두사(지역)와 `##` 접두사(전역)로 범위를 표시한다.[4]시길 | 설명 |
---|---|
`@` | 지역 변수 또는 매개변수 |
`@@` | 시스템 함수 (이전의 전역 변수) |
`#` | 지역 임시 테이블 |
`##` | 전역 임시 테이블 |
3. 17. Windows PowerShell
Windows PowerShell은 Unix 셸과 Perl에서 부분적으로 영감을 받았으며, 변수 이름은 `$` 시길로 시작한다.[8] PowerShell은 한국의 시스템 관리자와 개발자들 사이에서 윈도우 환경 관리에 널리 사용된다.3. 18. XSLT와 XQuery
XSLT에서 변수와 매개변수는 사용할 때 앞에 "$
" 기호를 붙이지만, `<xsl:param>` 또는 `<xsl:variable>`에서 `name` 속성을 사용하여 정의할 때는 이 기호를 사용하지 않는다. XSLT와 관련된 XQuery는 정의와 사용 모두에서 "$
" 기호 형식을 사용한다.[8]3. 19. MEL
MEL에서 변수 이름은 함수, 명령 및 기타 식별자와 구별하기 위해 "$" 시길로 시작한다.[9]4. 유사한 현상
시길과 혼동될 수 있거나 유사한 기능을 하는 다른 프로그래밍 개념은 다음과 같다.
- 셸 스크립트 변수: 유닉스 셸 스크립트와 Makefile에서 `$`는 변수 이름을 해당 내용으로 변환하는 단항 연산자이다. 이는 시길과 유사하지만, 변수에 값을 할당할 때는 달러 기호($)가 생략된다는 점에서 C의 포인터에 대한 `*` 역참조 연산자와 유사하다.
- 스트로핑 (Stropping): .NET 공통 언어 인프라(CLI)를 사용하는 여러 언어에서, 호출하는 언어에서 키워드일 수 있는 다른 언어의 변수를 사용해야 할 때가 있다. C#에서는 모든 변수 이름에 "@"를 접두사로 사용할 수 있으며,[9] VB.NET에서는 `[end]`와 같이 이름을 대괄호로 묶어 같은 결과를 얻는다.[10]
- 헝가리안 표기법 (Hungarian Notation): 헝가리안 표기법은 변수 이름에 특정 알파벳 접두사를 붙여 변수 유형을 지정하는 명명 규칙이다. 그러나 시길과 달리 헝가리안 표기법은 컴파일러에게 어떠한 정보도 제공하지 않는다.[1]
- 리터럴 접미사/접두사 (Literal Affixes): 시길은 이름(식별자)에 적용되지만, 이와 비슷한 접두사와 접미사는 리터럴, 특히 정수 리터럴과 문자열 리터럴에 적용되어 리터럴의 평가 방식이나 데이터 유형을 지정한다. 예를 들어, C++에서 `0x10ULL`은 부호 없는 long long 정수로 값 16으로 평가된다. `0x` 접두사는 16진수를 나타내고, `ULL` 접미사는 부호 없는 long long을 나타낸다.
- 자바 애노테이션 (Java Annotations): 자바 애노테이션은 `@Override` 및 `@Deprecated`와 같은 것들을 예로 들 수 있다.
4. 1. 셸 스크립트 변수
유닉스 셸 스크립트와 Makefile에서 "$"는 변수의 이름을 해당 내용으로 변환하는 단항 연산자이다. 이는 시길과 유사해 보이지만, 변수에 할당할 때는 달러 기호($)가 생략된다는 점에서 C의 포인터에 대한 `*` 역참조 연산자와 유사한, 어휘적 간접 참조를 위한 단항 연산자이다.4. 2. 식별자 규칙
프롤로그, 하스켈, 루비, Go 등 여러 프로그래밍 언어에서는 대문자로 시작하는 식별자와 소문자로 시작하는 식별자를 다르게 취급한다.[1]4. 3. 스트로핑 (Stropping)
.NET 공통 언어 인프라(CLI)에서 여러 언어를 사용하는 경우, 호출하는 언어에서 키워드일 수 있는 다른 언어의 변수를 사용하는 방법이 필요하다. 이는 때때로 접두사를 사용하여 수행된다. C#에서 모든 변수 이름은 "@
"를 접두사로 사용할 수 있다. 이는 주로 키워드와 충돌할 수 있는 변수 이름을 사용할 수 있도록 하기 위해 사용된다.[9] VB.NET에서는 `[end]`와 같이 이름을 대괄호로 묶어 동일한 결과를 얻는다.[10]4. 4. 헝가리안 표기법 (Hungarian Notation)
헝가리안 표기법은 변수 이름에 특정 알파벳 접두사를 붙여 변수 유형을 지정하는 명명 규칙이다. 그러나 시길과는 달리, 헝가리안 표기법은 컴파일러에게 어떠한 정보도 제공하지 않는다. 따라서 (타입 추론을 사용하는 언어가 아닌 경우) 변수에 대해 명시적인 유형을 중복해서 지정해야 한다. 대부분의 표준 컴파일러는 접두사 사용을 강제하지 않으므로 생략이 가능하며, 실수로 잘못 사용되어 코드에 혼란을 야기하기 쉽다.[1]4. 5. 리터럴 접미사/접두사 (Literal Affixes)
시길은 이름(식별자)에 적용되지만, 유사한 접두사와 접미사는 리터럴, 특히 정수 리터럴과 문자열 리터럴에 적용되어 리터럴의 평가 방식 또는 데이터 유형을 지정할 수 있다. 예를 들어, C++에서 `0x10ULL`은 부호 없는 long long 정수로 값 16으로 평가된다. `0x` 접두사는 16진수를 나타내고, `ULL` 접미사는 부호 없는 long long을 나타낸다. 마찬가지로, 접두사는 종종 raw string을 나타내는 데 사용되며, 예를 들어 Python에서 `r"C:\Windows"`는 값 `C:\Windows`를 가진 문자열을 나타낸다. 이 문자열은 이스케이프된 문자열로 `"C:\\Windows"`로 작성된다.이는 식별자(이름)의 구문이나 의미가 아닌 리터럴의 의미(값)에 영향을 미치므로, 스트로핑(식별자 구문)도 아니고 시길(식별자 의미)도 아니지만, 구문적으로 유사하다.
4. 6. 자바 애노테이션 (Java Annotations)
자바 애노테이션은 `@Override` 및 `@Deprecated`와 같은 것들을 비교해볼 수 있다.5. 혼동
C#에서 "@" 접두사는 예약어를 식별자로 사용할 수 있도록 허용하는 스트로핑, 또는 원시 문자열을 나타내는 리터럴의 접두사로 사용될 수 있어 혼란을 야기할 수 있다. 이 경우 "@"는 식별자 구문이나 리터럴 의미에 영향을 미치지만, 식별자 의미 자체에는 영향을 미치지 않으므로 시길은 아니다.
참조
[1]
웹사이트
Definition of sigil
http://www.collinsdi[...]
2012-05-22
[2]
문서
Perl 6 variables:Twigils
http://doc.perl6.org[...]
[3]
웹사이트
Variables – Cycorp
http://www.cyc.com/c[...]
2017-12-31
[4]
웹사이트
Constants – Cycorp
http://www.cyc.com/c[...]
2017-12-31
[5]
웹사이트
Getting Started: Sigils
https://elixir-lang.[...]
2022-01-18
[6]
웹사이트
C-INTERCAL 0.29 Revamped Instruction Manual
http://catb.org/~esr[...]
2022-06-30
[7]
웹사이트
CLC-INTERCAL Reference
https://oshaboy.gith[...]
2022-06-30
[8]
웹사이트
Bang methods; or, Danger, Will Rubyist!
http://dablog.rubypa[...]
2007-08-15
[9]
웹사이트
C# Keywords
http://msdn.microsof[...]
2011-03-23
[10]
웹사이트
string (C# Reference)
http://msdn.microsof[...]
2011-03-23
[11]
문서
Linux kernel coding style
https://slurm.schedm[...]
[12]
웹인용
Definition of sigil
http://www.collinsdi[...]
2012-05-22
[13]
웹인용
Re: sigil
http://www.perlmonks[...]
The Perl Foundation
2009-09-12
[14]
문서
Perl 6 variables:Twigils
http://doc.perl6.org[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com