[Kotlin] 6-1. 키워드와 연산자
키워드와 연산자
Hard 키워드
다음 토근은 항상 키워드로 해석하며 식별자로 사용할 수 없다
- as: 타입 변환 / 임포트 별칭
- as?: 안전한 타입 변환
- break: 루프 실행을 종료
- class: 클래스 선언
- continue: 가장 가까운 루프의 다음 단계를 실행
- do: do/while 루프 시작
- else: if식에서 조건이 false일 때 실행하는 브랜치 정의
- false: 불리언 타입의 false 값
- for: for루프를 시작
- fun: 함수 선언
- if: if식 시작
- in: for루프에서 반복할 객체를 지정 / 콜렉션이나 ‘contains’메서드를 정의한 다른 엔티티, 범위에 값이 속하는지 검사하기 위한 중위 연산자로 사용 / when식에서 같은 목적으로 사용 / 반공변으로 타입 파라미터 지정
- !in: 콜렉션이나 ‘contains’메서드를 정의한 다른 엔티티, 범위에 값이 속하지 않는지 검사하기 위한 중위 연산자로 사용 / when식에서 같은 목적으로 사용
- interface: 인터페이스
- is: 값이 특정 타입인지 검사 / when식에서 같은 목적으로 사용
- !is: 값이 특정 타입이 아닌지 검사 / when식에서 같은 목적으로 사용
- null: 어떤 객체도 가리키지 않는 객체 레퍼런스를 표현하는 상수
- object: 클래스와 그것의 인스턴스를 동시에 선언
- package: 현재 파일을 위한 패키지를 지정
- return: 가장 가깝게 둘러싼 함수나 임의 함수에서 리턴
- super: 메서드나 프로퍼티의 상위클래스 구현을 참조 / 보조 생성자에서 상위클래스의 생성자를 호출
- this: 현재 리시버를 참조 / 보조 생성자에서 같은 클래스의 다른 생성자를 호출
- throw: 익셉션을 발생
- true: 불리언 타입의 ‘true’값을 지정
- try: 익셉션 처리 블록을 시작
- typealias: 타입 별칭을 선언
- val: 읽기 전용 프로퍼티나 로컬 변수를 선언
- var: 수정 가능 프로퍼티나 로컬 변수를 선언
- when: when식 시작(주어진 브랜치 중 하나 실행)
- while: while루프(전위조건을 가진 루프)
Soft 키워드
다음 토큰은 적용 가능한 문맥에서는 키워드로 쓰이고, 다른 문맥에서는 식별자로 사용할 수 있다
- by: 인터페이스 구현을 다른 객체에 위임 / 프로퍼티를 위한 접근자 구현을 다른 객체에 위임
- catch: 특정 익셉션 타입을 처리하는 블록 시작
- constructor: 주요 또는 보조 생성자 선언
- delegate: 애노테이션 사용 위치 대상으로 사용
- dynamic: 코틀린/JS 코드에서 동적 타입을 참조
- field: 애노테이션 사용 위치 대상으로 사용
- file: 애노테이션 사용 위치 대상으로 사용
- finally: try블록이 끝날 때 항상 실행하는 블록 시작
- get: 프로퍼티의 getter선언 / 애노테이션 사용 위치 대상으로 사용
- import: 현재 파일에 다른 패키지의 선언을 임포트
- init: 초기화 블록 시작
- param: 애노테이션 사용 위치 대상으로 사용
- property: 애노테이션 사용 위치 대상으로 사용
- receiver: 애노테이션 사용 위치 대상으로 사용
- set: 프로퍼티 setter선언 / 애노테이션 사용 위치 대상으로 사용
- setparam: 애노테이션 사용 위치 대상으로 사용
- where: 지네릭 타입 파라미터에 대한 제약 지정
수식어 키워드
다음 토큰은 선언의 수식어 목록에서 키워드로 사용하며, 다른 문맥에서는 식별자로 사용할 수 있다
- abstract: 클래스나 멤버를 추상으로 표시
- annotation: 애노테이션 클래스 선언
- companion: 컴페니언 오브젝트 선언
- const: 컴파일 타입 상수로 프로퍼티 표시
- crossinline: 인라인 함수에 전달한 람다에서 비로컬 리턴 금지
- data: 컴파일러가 클래스를 위한 canonical멤버를 생성하도록 지시
- enum: 열거형 선언
- external: 선언을 코틀린이 아닌 구현으로 표시
- final: 멤버 오버라이딩 금지
- infix: 중위 표기법 함수 호출 허용
- inline: 호출 위치에서 전달한 함수와 람다를 인라인하도록 컴파일러에게 말함
- inner: 중첩 클래스에서 외부 클래스의 인스턴스 참조를 허용
- internal: 선언을 현재 모듈에 보이도록 표시
- lateinit: 생성자 밖에서 non-null 프로퍼티를 초기화하는 것을 허용
- noinline: 인라인 함수에 전달한 람다를 인라인하지 않음
- open: 클래스 상속 또는 멤버 오버라이딩을 허용
- operator: 함수를 연산자 오버로딩이나 컨벤션 구현으로 표시
- out: 타입 파라미터를 공변으로 표시
- override: 상위클래스 멤버의 오버라이드로 멤버를 표시
- private: 선언을 현재 클래스나 파일에 보이도록 표시
- protected: 선언을 현재 클래스와 그 클래스의 하위클래스에 보이도록 표시
- public: 선언을 모든 곳에 보이도록 표시
- reified: 인라인 함수의 타입 파라미터를 런타임에서 접근 가능하게 표시
- sealed: sealed클래스 선언(제한된 하위클래스를 갖는 클래스)
- suspend: 함수나 람다를 서스펜딩으로 표시
- tailrec: 꼬리 재귀 함수로 표시(컴파일러가 재귀를 반복으로 바꾸도록 허용)
- vararg: allow 파라미터를 가변 인자로 전달할 수 있게 허용
특수 식별자
컴파일러는 특정한 문맥에서 다음 식별자를 정의하며, 다른 문맥에서는 일반 식별자로 사용할 수 있다
- feild: 프로퍼티 접근자에서 프로퍼티의 지원 필드를 참조하기 위해 사용
- it: 람다 안에서 명시적 선언 없이 파라미터에 접근하기 위해 사용
연산자와 특수 문자
코틀린은 다음 연산자와 특수 문자를 지원한다
- !!: 식이 null이 아님을 단언한다
- ?.: 안전한 호출 수행(리시버가 null이 아니면 메서드를 호출하거나 프로퍼티에 접근)
- (?:): 왼쪽 값이 null이면 오른쪽 값을 취한다(엘비스 연산자)
- (::): 멤버 레퍼런스나 클래스 레퍼런스 생성
- ..: 범위 생성
- (:): 선언에서 타입과 이름을 구분
- ?: 타입을 null가능으로 표시
- ->: 람다식의 파라미터와 몸체를 분리 / 함수 타입에서 파라미터와 리턴 타입 선언을 분리 / when식 브랜치에서 조건과 몸체를 분리
- @: 애노테이션 시작 / 로프 라벨 시작 또는 참조 / 람다 라벨 시작 또는 참조 / 외부 범위에서 ‘this’식을 참조 / 외부 상위클래스를 참조
- (;): 같은 줄의 여러 문장을 구분
- $: 문자열 템플릿에서 변수나 식을 참조
- _: 람다식에서 사용하지 않는 파라미터 대체 / 분리 선언에서 사용하지 않는 파라미터 대체