C#에서 키워드(keyword)란 컴파일러가 미리 정의해 놓은 예약어(reserved word)를 의미합니다. 키워드는 언어 문법에서 특별한 의미를 갖기 때문에 변수명, 클래스명, 메서드명과 같은 식별자(identifier)로 사용할 수 없습니다.
하지만 부득이하게 키워드를 식별자로 사용해야 하는 경우라면, 키워드 앞에 @ 문자를 붙이면 됩니다. 예를 들어 다음과 같이 작성하면 오류 없이 컴파일됩니다.
int @int = 100; // @ 접두사를 붙이면 예약어도 식별자로 사용 가능
Console.WriteLine(@int);C# 키워드의 두 가지 유형
C#의 키워드는 성격에 따라 크게 두 가지로 나뉩니다.
- 예약 키워드(Reserved Keywords): 코드 어디에서든 항상 특별한 의미로 해석되며, 원칙적으로 식별자로 사용할 수 없습니다.
- 문맥 키워드(Contextual Keywords): 특정 문맥에서만 의미를 가지며, 그 외의 경우에는 일반 식별자처럼 자유롭게 사용할 수 있습니다.
예약 키워드(Reserved Keywords)
아래 표는 C#에 미리 정의된 예약 키워드의 전체 목록입니다. 참고로 in과 out은 제네릭 형식 매개변수에서 공변성·반공변성을 지정하는 한정자로도 활용됩니다.
| abstract | as | base | bool | break | byte | case |
| catch | char | checked | class | const | continue | decimal |
| default | delegate | do | double | else | enum | event |
| explicit | extern | false | finally | fixed | float | for |
| foreach | goto | if | implicit | in | int | interface |
| internal | is | lock | long | namespace | new | null |
| object | operator | out | override | params | private | protected |
| public | readonly | ref | return | sbyte | sealed | short |
| sizeof | stackalloc | static | string | struct | switch | this |
| throw | true | try | typeof | uint | ulong | unchecked |
| unsafe | ushort | using | virtual | void | volatile | while |
문맥 키워드(Contextual Keywords)
문맥 키워드는 LINQ 쿼리(from, select, orderby 등)나 비동기 프로그래밍(async, await)처럼 특정 기능과 함께 사용될 때에만 특별한 의미를 가집니다. 따라서 예약 키워드보다 제약이 적으며, 해당 문맥이 아니라면 일반적인 이름으로 자유롭게 사용할 수 있습니다.
| add | alias | ascending | async | await | descending | dynamic |
| from | get | global | group | into | join | let |
| orderby | partial (type) | partial (method) | remove | select | set | unmanaged (generic modifier) |
| value | var | when | where | yield |