4-1 클래스와 생성자

StrayCat·2022년 10월 3일
0

클래스 선언

class User{ }
  • 코틀린에는 클래스 생성자를 선언부에 작성할 수 있어서 본문이 없는 클래스가 있다. ( 자바와의 차이 )

constructor() 부분이 생성자이다.(예시는 보조생성자)

class User{ 
    var name = "lumine"
    constructor(name:String){
        this.name = name
    }
    fun someFun(){
        println("asdf")
    }
    class SecondClass{} 
}

코틀린 선언에는 new를 쓰지 않는다.

val user = User("lumine")

주생성자

  • constructor 키워드로 클래스 선언부에 선언
  • 클래스당 한개
  • 선언하지 않을 경우, 매개변수 없는 주생성자 자동 추가
class User constructor(){ 
    
}

constructor 생략

class User(){ 
    
}

init : 주생성자로 객체생성 시 로직 수행

class User(name:String){
    init {
        println("asdf")
    }
}

생성자 매개변수 사용 시, init에서 접근 필요

class User(name:String){
    var name: String
    init {
        this.name = name
    }
    fun someFun(){
        println("$name")
    }
}

혹은 매개변수를 var또는 val로 선언하면 클래스 멤버변수로 사용가능 ( 주생성자만 가능 )

class User(val name:String){
    fun someFun(){
        println("$name")
    }
}

보조생성자

클래스 본문에 constructor 키워드로 선언하는 생성자

class User{
    constructor(name:String){
        println("asdf")
    }
    constructor(name:String, id: Int){
        println("qwer")
    }
}

주생성자와 보조생성자를 같이 선언할 경우, 서로 연결해줘야한다.

class User(name:String){
    constructor(name:String, id: Int):this(name){//주 생성자 연결
        println("asdf")
    }
    constructor(name:String, id: Int,email: String):this(name,id){//첫번째 보조생성자 연결
        println("qwer")
    }
}

0개의 댓글