키워드 및 연산자
하드 키워드
다음 토큰은 항상 키워드로 해석되며 식별자로 사용할 수 없습니다.
as- 타입 캐스트에 사용됩니다.
- 임포트 별칭(alias)을 지정합니다.
as?는 안전한 타입 캐스트에 사용됩니다.break는 루프 실행을 종료합니다.class는 클래스를 선언합니다.continue는 가장 가까운 바깥쪽 루프의 다음 단계로 진행합니다.do는 do/while 루프 (사후 조건 루프)를 시작합니다.else는 조건이 거짓일 때 실행되는 if 표현식의 분기를 정의합니다.false는 Boolean 타입의 'false' 값을 지정합니다.for는 for 루프를 시작합니다.fun은 함수를 선언합니다.if는 if 표현식을 시작합니다.in- for 루프에서 반복되는 객체를 지정합니다.
- 중위(infix) 연산자로 사용되어 값이 범위, 컬렉션 또는 'contains' 메서드가 정의된 다른 엔티티에 속하는지 확인합니다.
- when 표현식에서 동일한 목적으로 사용됩니다.
- 타입 파라미터를 반공변(contravariant)으로 표시합니다.
!in- 값이 범위, 컬렉션 또는 'contains' 메서드가 정의된 다른 엔티티에 속하지 않는지 확인하는 연산자로 사용됩니다.
- when 표현식에서 동일한 목적으로 사용됩니다.
interface는 인터페이스를 선언합니다.is- 값에 특정 타입이 있는지 확인합니다.
- when 표현식에서 동일한 목적으로 사용됩니다.
!is- 값에 특정 타입이 없는지 확인합니다.
- when 표현식에서 동일한 목적으로 사용됩니다.
null은 어떤 객체도 가리키지 않는 객체 참조를 나타내는 상수입니다.object는 클래스와 그 인스턴스를 동시에 선언합니다.package는 현재 파일의 패키지를 지정합니다.return은 가장 가까운 바깥쪽 함수나 익명 함수에서 반환합니다.superthis- 현재 수신 객체(receiver)를 참조합니다.
- 보조 생성자에서 같은 클래스의 다른 생성자를 호출합니다.
throw는 예외를 던집니다.true는 Boolean 타입의 'true' 값을 지정합니다.try는 예외 처리 블록을 시작합니다.typealias는 타입 별칭(type alias)을 선언합니다.typeof는 향후 사용을 위해 예약되어 있습니다.val은 읽기 전용 프로퍼티 또는 지역 변수를 선언합니다.var은 변경 가능한 프로퍼티 또는 지역 변수를 선언합니다.when은 when 표현식을 시작합니다 (주어진 분기 중 하나를 실행).while은 while 루프 (사전 조건 루프)를 시작합니다.
소프트 키워드
다음 토큰은 해당 문맥에서만 키워드로 작동하며, 다른 문맥에서는 식별자로 사용할 수 있습니다.
bycatch는 특정 예외 타입을 처리하는 블록을 시작합니다.constructor는 기본 생성자 또는 보조 생성자를 선언합니다.delegate는 어노테이션 사용 지점 대상(annotation use-site target)으로 사용됩니다.dynamic은 Kotlin/JS 코드에서 동적 타입(dynamic type)을 참조합니다.field- 명시적 뒷받침 필드(explicit backing field)를 선언합니다.
- 어노테이션 사용 지점 대상으로 사용됩니다.
file은 어노테이션 사용 지점 대상으로 사용됩니다.finally는 try 블록이 종료될 때 항상 실행되는 블록을 시작합니다.get- 프로퍼티의 게터(getter)를 선언합니다.
- 어노테이션 사용 지점 대상으로 사용됩니다.
import는 다른 패키지의 선언을 현재 파일로 가져옵니다.init는 초기화 블록을 시작합니다.param은 어노테이션 사용 지점 대상으로 사용됩니다.property은 어노테이션 사용 지점 대상으로 사용됩니다.receiver은 어노테이션 사용 지점 대상으로 사용됩니다.set- 프로퍼티의 세터(setter)를 선언합니다.
- 어노테이션 사용 지점 대상으로 사용됩니다.
setparam은 어노테이션 사용 지점 대상으로 사용됩니다.value는class키워드와 함께 인라인 클래스(inline class)를 선언합니다.where는 제네릭 타입 파라미터에 대한 제약 조건을 지정합니다.
수정자 키워드
다음 토큰은 선언의 수정자 목록에서 키워드로 작동하며, 다른 문맥에서는 식별자로 사용할 수 있습니다.
abstract는 클래스나 멤버를 추상(abstract)으로 표시합니다.actual은 멀티플랫폼 프로젝트에서 플랫폼별 구현임을 나타냅니다.annotation은 어노테이션 클래스를 선언합니다.companion은 동반 객체(companion object)를 선언합니다.const는 프로퍼티를 컴파일 타임 상수로 표시합니다.crossinline은 인라인 함수로 전달된 람다에서 비지역(non-local) 반환을 금지합니다.data는 컴파일러가 클래스에 대한 표준 멤버들을 생성하도록 지시합니다.enum은 열거형(enumeration)을 선언합니다.expect는 선언을 플랫폼별로 표시하며, 플랫폼 모듈에서의 구현을 기대합니다.external은 선언이 Kotlin 외부에서 구현되었음을 표시합니다 (JNI 또는 JavaScript를 통해 접근 가능).final은 멤버 오버라이딩을 금지합니다.infix는 중위 표기법(infix notation)을 사용하여 함수를 호출할 수 있게 합니다.inline은 컴파일러가 함수와 함수에 전달된 람다를 호출 지점에 인라인하도록 지시합니다.inner는 중첩 클래스에서 외부 클래스 인스턴스를 참조할 수 있게 합니다.internal은 선언을 현재 모듈 내에서만 표시되도록 합니다.lateinit은 생성자 외부에서 null이 아닌 프로퍼티를 초기화할 수 있게 합니다.noinline은 인라인 함수로 전달된 람다의 인라이닝을 끕니다.open은 클래스 상속이나 멤버 오버라이딩을 허용합니다.operator는 함수가 연산자를 오버로딩하거나 관례(convention)를 구현함을 표시합니다.out은 타입 파라미터를 공변(covariant)으로 표시합니다.override는 멤버가 슈퍼클래스 멤버를 오버라이드함을 표시합니다.private은 선언을 현재 클래스나 파일 내에서만 표시되도록 합니다.protected는 선언을 현재 클래스와 그 하위 클래스 내에서만 표시되도록 합니다.public은 선언을 어디에서나 표시되도록 합니다.reified는 인라인 함수의 타입 파라미터를 런타임에 접근 가능하도록 표시합니다.sealed는 봉인된(sealed) 클래스 (상속이 제한된 클래스)를 선언합니다.suspend는 함수나 람다를 일시 중단 가능한 것(코루틴)으로 표시합니다.tailrec은 함수를 꼬리 재귀(tail-recursive)로 표시합니다 (컴파일러가 재귀를 루프로 대체할 수 있게 함).vararg는 파라미터에 가변 인자를 전달할 수 있게 합니다.
특수 식별자
다음 식별자들은 특정 문맥에서 컴파일러에 의해 정의되며, 다른 문맥에서는 일반 식별자로 사용할 수 있습니다.
field는 프로퍼티 접근자 내부에서 프로퍼티의 뒷받침 필드(backing field)를 참조하는 데 사용됩니다.it는 람다 내부에서 파라미터를 암시적으로 참조하는 데 사용됩니다.
연산자 및 특수 기호
Kotlin은 다음과 같은 연산자와 특수 기호를 지원합니다.
+,-,*,/,%- 수학 연산자*는 가변(vararg) 파라미터에 배열을 전달할 때도 사용됩니다.
=- 대입 연산자.
- 파라미터의 기본값을 지정하는 데 사용됩니다.
+=,-=,*=,/=,%=- 복합 대입 연산자(augmented assignment operators).++,--- 증가 및 감소 연산자.&&,||,!- 논리 'and', 'or', 'not' 연산자 (비트 연산의 경우 해당 중위 함수(infix functions)를 대신 사용하세요).==,!=- 동등성 연산자(equality operators) (기본 타입이 아닌 경우equals()호출로 변환됨).===,!==- 참조 동등성 연산자(referential equality operators).<,>,<=,>=- 비교 연산자(comparison operators) (기본 타입이 아닌 경우compareTo()호출로 변환됨).[,]- 인덱스 접근 연산자(indexed access operator) (get및set호출로 변환됨).!!- 표현식이 null이 아님을 단언(assert)합니다.?.- 안전한 호출(safe call)을 수행합니다 (수신 객체가 null이 아닌 경우에만 메서드를 호출하거나 프로퍼티에 접근).?:- 왼쪽 값이 null인 경우 오른쪽 값을 취합니다 (엘비스(elvis) 연산자).::- 멤버 참조 또는 클래스 참조를 생성합니다...,..<- 범위를 생성합니다.:- 선언에서 이름과 타입을 구분합니다.?- 타입을 nullable로 표시합니다.->@- 어노테이션을 도입합니다.
- 루프 레이블(label)을 도입하거나 참조합니다.
- 람다 레이블을 도입하거나 참조합니다.
- 외부 스코프의 'this' 표현식을 참조합니다.
- 외부 슈퍼클래스를 참조합니다.
;- 한 줄에 있는 여러 문(statement)을 구분합니다.$- 문자열 템플릿 내의 변수나 표현식을 참조합니다._- 람다 표현식에서 사용되지 않는 파라미터를 대체합니다.
- 구조 분해 선언(destructuring declaration)에서 사용되지 않는 파라미터를 대체합니다.
연산자 우선순위는 Kotlin 문법의 이 참조를 확인하세요.
