본 글은 https://kotlinlang.org/docs/home.html 를 기반으로 작성자 마음대로 번역한 글입니다.
오역 & 의역이 빈번하며 모든 질문 및 태클 환영합니다!
2022-01-24 기준으로 작성되었습니다.
코틀린의 클래스는 class 키워드로 선언됩니다:
클래스는 클래스 이름, (타입 파라미터와 기본 생성자, 그외의 것들을 지정하는)클래스 헤더, 중괄호로 둘러싸인 클래스 바디로 구성됩니다. 헤더와 바디는 부가적입니다; 클래스의 바디가 없다면 중괄호는 생략될 수 있습니다.
Constructors
코틀린의 클래스는 하나의 primary constructor와 그 이상의 secondary constructors를 가질 수 있습니다. 기본 생성자는 클래스 헤더의 일부이며 클래스 이름과 부가적인 타입 파라미터의 다음에 위치합니다.
기본 생성자에 어노테이션이나 가시적인 지시자가 없는 경우, constructor 키워드는 생략될 수 있습니다.
기본 생성자에는 코드를 포함할 수 없습니다. 초기화 코드는 init 키워드로 시작하는 initializer blocks에 위치할 수 있습니다.
인스턴스의 초기화 중, 초기화 블록은 프로퍼티 이니셜라이져와 함께 클래스 바디에 표시되는 순서로 실행됩니다:
기본 생성자 매개변수는 초기화 블록이 사용될 수 있습니다. 또한 클래스 바디에 선언된 프로퍼티 이니셜라이져에 사용될 수 있습니다.
코틀린은 기본 생성자로부터 프로퍼티의 선언과 초기화를 위한 간결한 구문을 가집니다.
이러한 선언에는 클래스 프로퍼티의 기본값도 포함될 수 있습니다.
클래스 프로퍼티를 선언할 때 trailing comma↗를 사용할 수 있습니다:
일반 속성과 마찬가지로, 기본 생성자에 선언된 프로퍼티는 수정가능(var)이거나 읽기 전용(val)일 수 있습니다.
생성자에 어노테이션이나 가시적인 지시자가 있는 경우, constructor 키워드는 지시자 앞에 요구됩니다:
- Secondary constructors
클래스는 constructor를 앞에 붙인 secondary constructors를 선언할 수 있습니다:
만약 클래스가 기본 생성자를 가진다면, 보조 생성자는 다른 보조 생성자를 통해 직·간접적으로 기본 생성자에게 위임해야합니다. 같은 클래스의 다른 생성자로의 위임은 this 키워드를 사용해 완료할 수 있습니다:
초기화 블록의 코드는 실질적으로 기본 생성자의 일부가 됩니다. 기본 생성자로의 위임은 보조 생성자의 첫 문장이 되기 때문에 초기화 블록과 프로퍼티 이니셜라이져의 코드는 보조 생성자의 바디 이전에 실행됩니다.
만약 클래스의 기본 생성자가 존재하지 않더라도, 위임은 암시적으로 일어나며, 초기화 블록 또한 여전히 실행됩니다.
추상 클래스가 아닌 클래스에서 생성자가 선언되지 않았을 경우, 인수가 없는 생성자가 생성됩니다. 생성자의 가시성은 public입니다.
클래스가 public 생성자를 가지지 않게 하려면, 기본 가시성이 아닌 빈 기본 생성자를 선언하세요.
JVM에서 기본 생성자의 모든 파라미터가 기본 값일 경우 컴파일러는 기본 값을 사용하는 파라미터가 없는 생성자를 추가로 만들 것입니다. 이를 통해 파라미터가 없는 생성자로 인스턴스를 만드는 Jackson과 JPA같은 라이브러리에서 코틀린을 쉽게 사용할 수 있습니다.
Creating instances of classes
클래스의 인스턴스를 생성하려면, 일반 함수처럼 생성자를 호출합니다.
코틀린에는 new 키워드가 없습니다.
중첩, 내부, 익명 내부 함수의 인스턴스 생성 과정은 Nested classes↗에 설명되어 있습니다.
Class members
클래스는 다음을 포함할 수 있습니다:
- Constructors and initializer blocks↗
- Functions↗
- Properties↗
- Nested and inner classes↗
- Object declarations↗
Inheritance
클래스들은 서로 파생되어 상속 계층을 형성할 수 있습니다.
Abstract classes
클래스는 멤버의 일부 혹은 저체와 함께 abstract로 선언되는 경우가 있습니다. 추상 멤버는 해당 클래스 내부에서 구현되지 않습니다. 추상 클래스나 함수에 open으로 표시할 필요 없습니다.
추상이 아닌 open 멤버를 추상 멤버로 오버라이드할 수 있습니다.
Companion objects
클래스의 내부에서만 (팩토리 메소드 같이) 접근해야 하지만 클래스의 인스턴스 없이 호출할 수 있는 함수를 작성해야 하는 경우, 클래스 내부에 object declaration↗의 멤버로 작성할 수 있습니다.
더 구체적으로, 클래스 내부에 companion object↗를 선언한다면, 클래스 이름을 구분자로 사용함으로서 멤버에 접근할 수 있습니다.
https://kotlinlang.org/docs/classes.html
Classes | Kotlin
kotlinlang.org
'Kotlin > Docs' 카테고리의 다른 글
[Kotlin Docs] Properties (0) | 2022.02.03 |
---|---|
[Kotlin Docs] Inheritance (0) | 2022.01.24 |
[Kotlin Docs] Packages and imports (0) | 2022.01.20 |
[Kotlin Docs] Exceptions (0) | 2022.01.20 |
[Kotlin Docs] Returns and jumps (0) | 2022.01.19 |