class P(var name : String, val birth :Int) 클래스 속성들을 선언함과 동시에 생성자도 선언한 것
class Person constructor(firstName: Strint){}class Person (firstName: Strint){}기본생성자 코드는 init블록 안에 들어간다.
기본생성자의 파라미터는 init 블록 안에서 사용 가능
초기화는 초기화블록 안에서 작성해야함. init
fun main() {
val obj = Customer("kotlin")
println(obj)
}
class Customer constructor(name: String) {
init {
//프로퍼티 초기화 문장들. 프로퍼티 = name
println("$name")
}
}
기본 생성자의 파라미터는 프로퍼티 초기화 선언에도 사용 가능
class Customer(name: String) {
val key = name.toUpperCase()
}
프로퍼티 선언 및 초기화는 기본생성자에서 간결한 구문으로 사용가능
class Person(val firstNmae: String, val lastName: String){
}
기본생성자에 어노테이션, 접근지정자 등이 있는 경우 constructor키워드가 필요함 (이럴때는 생략 불가)
class Customer public @Ingect constructor(name: String){}
fun main(){
A(1)
}
class A(a: Int){
var a: Int = 3
init {
var a: Int =2
println(this.a) //class 속성 a
println(a) // init안의 a
}
fun print(){print(a)}
}
// 출력 3 2
constructor() 키워드 사용this()에 의한 생성자 연결
fun main(){
var a = P("이동수",1998) //인스턴스
var b = P("심섬재",1997) //위에는 아무 것도 출력을 못하는데 이거는 인스턴스 생성을하면서 init 이 호출돼 바로 init함수 실행
var c = P("소진호",1999)
var d = P("심성재") //보조 생성자가 1996년으로 해놨음
//출력 나는 심성재 1996년생입니다
//출력 보조생성자 사용
}
class P(var name : String, val birth :Int){
init{ //함수
println("나는 ${this.name}이고 ${this.birth}년생입니다") //this는 인스턴스 자신의 속성이나 함수를 호출하기위해 클래스 내부에서 사용되는 키워드 임
}
constructor(name : String) : this(name,1996){ //보조생성자함수 ()안에있는게 파라미터임, 년도는 1996으로 고정했다느뜻
println("보조생성자 사용")
}
}
class Person {
constructor(parent: Person){
parent.children.add(this)
}
}
직접적: 기본생성자에 위임
간접적: 다른 보조생성자에 위임
class Person(val name: String) {
constructor(name:String, parent: Person): this(name){
}
constructor(): this("홍길동", Person()) {
}
}
fun main(){
var a = P("이동수",1998) //인스턴스
var b = P("심섬재",1997) //위에는 아무 것도 출력을 못하는데 이거는 인스턴스 생성을하면서 init 이 호출돼 바로 init함수 실행
var c = P("소진호",1999)
var d = P("심성재") //보조 생성자가 1996년으로 해놨음
출력
나는 심성재 1996년생입니다
보조생성자 사용
}
class P(var name : String, val birth :Int){
init{ //함수
println("나는 ${this.name}이고 ${this.birth}년생입니다") //this는 인스턴스 자신의 속성이나 함수를 호출하기위해 클래스 내부에서 사용되는 키워드 임
}
constructor(name : String) : this(name,1996){ //보조생성자함수 ()안에있는게 파라미터임, 년도는 1996으로 고정했다느뜻
println("보조생성자 사용")
}
}
/*
출력
나는 이동수이고 1998년생입니다
나는 심섬재이고 1997년생입니다
나는 소진호이고 1999년생입니다
나는 심성재이고 1996년생입니다
보조생성자 사용
*/
class A private constructor(){}val invoice = Invoice()
val customer = Customer("lee")
class A constructor(){ //constructor()은 생략가능
}