지시자는 클래스의 상속이나 멤버들의 접근 범위를 제한함.
oepn
: 상속할 수 있는 클래스를 만들 때 지정final
: 코틀린 클래스의 default는 final
임. 지시자를 표시하지 않으면 상속할 수 없는 클래스임.private
) : 파일(.kt) 내부에서만 사용 가능protected
) : 파일(.kt) 내부나 상속한 경우에만 사용 가능.internal
) : 프로젝트 내의 컴파일 단위의 모듈에서만 사용public
) : 어디서나 사용 가능. public
은 default임.class Person constructor(var age: Int) : Any() {
var message = ""
var name: String = ""
var isMarried = false
init {
message = "안녕하세요"
println(message)
}
// 주 생성자 위임 호출
constructor(age: Int, name: String) : this(age) {
this.name = name
this.age = age
}
// 보조 생성자 위임 호출
constructor(age: Int, name: String, isMarried: Boolean = false) : this(age, name) {
this.name = name
this.age = age
this.isMarried = isMarried
}
fun printAge() {
print(age)
}
class Parent() {
// 내부 클래스 로직
}
object Object {
// 내부 객체 로직
}
}
fun main() {
val person = Person(18) // 주 생성자 호출
val sister = Person(19, "누나임") // 보조 생성자 호출 (주 생성자 위임 호출)
val brother = Person(20, "형임", false) // 보조 생성자 호출 (보조 생성자 위임 호출)
}
constructor
) 주 생성자 : class
예약어 다음에 오는 생성자. age 프로퍼티를 생성함.
컴파일러는 생성자가 없는 클래스는 주 생성자를 자동으로 만들어준다.
: Any()
: 콜론으로 클래스를 상속하거나 인터페이스를 구현할 수 있음.init { ... }
: 초기화 블록임. 이는 주 생성자가 실행될 때 같이 실행됨.
constructor
: 보조 생성자. 클래스 내부에서 constructor
예약어를 사용해서 정의함.
this
)를 호출해야함.this
)를 호출해야함.주 생성자와 보조 생성자를 모두 정의하면 항상 주 생성자까지 호출하여 전체 속성에 값을 갱신할 수 있어야 함.
**Tip**
너무 많은 보조 생성자가 만들어지면 불편하므로, 초깃값 등을 부여해 보조 생성자의 작성을 줄이자.
fun main() {
val singleton = Singleton.instance
}
class Singleton private constructor() {
// 싱글톤 객체 생성
companion object {
val instance: Singleton by lazy { Singleton() }
}
// 클래스 내부 로직
}
private
으로 지정하면 객체를 생성할 수 없음.
companion object
내부에서 객체를 생성하는 메서드를 정의할 수 있음.class
, object
선언 등에 지정하여 ::
더블콜론으로 사용함.