728x90
코틀린에서 생성자는 클래스의 인스턴스를 초기화하는데 사용되는 함수입니다. 코틀린에서는 주 생성자와 부 생성자(secondary constructor)로 나뉘며, 주 생성자는 클래스 헤더 부분에 선언되고, 부 생성자는 클래스 본문 부분에 선언됩니다
init
- 주로 클래스의 초기화 로직을 담당하는 특별한 종류의 함수입니다. 이 함수는 클래스가 생성될 때 호출되며, 주로 프로퍼티 초기화나 다른 초기화 코드를 담는 데 사용됩니다. init 함수는 주 생성자(Primary Constructor)의 일부로 정의되며, 클래스 내에 여러 개의 init 블록을 가질 수 있습니다
- 코틀린을 별도의 생성자 영역이 없기 때문에 init 영역에서 초기화해주어야 한다.
class MyClass(name: String, age: Int) {
// 주 생성자에서 프로퍼티 초기화
val name: String
val age: Int
init {
// init 블록에서 초기화 로직 수행
this.name = name
this.age = age
// 여기에서 다양한 초기화 로직 수행 가능
println("객체가 생성되었습니다.")
}
// 다른 init 블록도 추가할 수 있음
init {
// 다른 초기화 로직 수행
println("다른 init 블록입니다.")
}
}
fun main() {
// 클래스 인스턴스 생성 시 init 함수가 호출됨
val myObject = MyClass("Korea", 33)
}
This ?
- 객체 내부에서 현재 인스턴스를 가리키는 참조입니다. 즉, 현재 메서드나 코드 블록이 속해있는 객체를 가리킵니다. this를 사용하여 객체 내부에서 인스턴스 변수나 메서드에 접근할 수 있습니다. 주로 멤버 변수와 메서드 매개변수의 이름이 충돌할 때 구분하기 위해 사용됩니다.
Constructor
- 부 생성자는 클래스를 생성할 때 추가적인 초기화 로직이나 다른 생성자를 호출하기 위해 사용됩니다. 다음은 부 생성자의 예제입니다
class MyClass {
// 주 생성자의 프로퍼티 선언
val property1: Type1
// 부 생성자 정의
constructor(parameter1: Type1) {
// 부 생성자의 초기화 로직
this.property1 = parameter1
}
// 다른 부 생성자도 추가 가능
constructor(parameter1: Type1, parameter2: Type2) : this(parameter1) {
// 추가적인 초기화 로직
}
// 나머지 클래스 멤버 선언
fun myMethod() {
// 메서드 로직
}
}
- 코틀린에서는 클래스에 주 생성자와 부 생성자를 함께 사용할 수 있습니다. 주 생성자는 클래스 선언 부분에, 부 생성자는 클래스 내부에 constructor 키워드를 사용하여 정의됩니다.
주의사항
- 주 생성자를 사용하면 기본 생성자가 자동으로 생성되지 않습니다. 따라서 다음과 같이 기본 생성자 형태로 클래스 변수를 초기화하는 것은 허용되지 않습니다:
// 이렇게는 사용할 수 없습니다.
class MyClass(name: String, age: Int) {
val myName = name // 에러 발생!
val myAge = age
}
- constructor로 생성한 생성자는 기본생성자가 아니기 때문에 (인자 = 변수)같은 형태로 쓸 수는 없습니다. 때문에 생성자 영역에서 매개변수를 클래스변수에 할당을 해야합니다.
class MyClass {
constructor(var name : string, var num :Int){
}
}
728x90
반응형
'Kotlin Language > Kotlin 기본 문법' 카테고리의 다른 글
Kotlin(코틀린) - 람다함수 (Lambda Expression) (0) | 2023.12.03 |
---|---|
Kotlin(코틀린) - 인터페이스(Interface) (0) | 2023.12.03 |
Kotlin(코틀린) - 상속(inheritance) (0) | 2023.12.01 |
Kotlin(코틀린) - 생성자 클래스(Class) (0) | 2023.11.30 |
Kotlin(코틀린) - 콜렉션(Map, Set) (0) | 2023.11.30 |
Kotlin(코틀린) - 콜렉션(List) 사용법 (0) | 2023.11.29 |