본문 바로가기
언어/코틀린

[Kotlin] 클래스와 생성자

by 코딩히어로 2022. 6. 14.
728x90

제목


코틀린에서 클래스는 자바와 마찬가지로 class 키워드를 통해 선언합니다

클래스의 멤버는 생성자, 변수, 함수, 클래스로 구성되고

코틀린의 생성자는 constructor라는 키워드로 선언하는 함수입니다

그리고 코틀린에서는 클래스 내에 클래스를 선언할 수 있습니다

class DevelUser{
	var name = "Devel"
    constructor(name: String){
    	this.name = name
    }
    fun TestFun(){
    	println("name : $name")
    }
}

자바의 경우에 멤버가 없고 선언부만 있는 클래스는 의미가 없지만

코틀린에서는 클래스의 생성자를 본문이 아닌 선언부에 작성할 수 있기 때문에

본문이 없는 클래스도 의미가 있습니다

 

코틀린에서 객체를 생성할때 new 키워드를 사용하지 않습니다

위에서 만든 DevelUser 객체를 만들 때 클래스의 이름으로 생성을 합니다

val user = DevelUser("devel")
user.TestFun()

 

 

주 생성자


class DevelUser constructor(){}   // 주 생성자 선언

class DevelUser(){}				// constructor 키워드 생략 예

class DevelUser{}				// 매개변수가 없는 주 생성자 자동 선언

class DevelUser(name: String, data: Int){}	// 매개변수가 있는 주 생성자

코틀린 클래스는 생성자를 주생성자와 보조 생성자로 구분합니다

한 클래스 안에 주생성자만 선언할 수도 있고 보조 생성자만 선언할 수도 있습니다

또한 둘다 선언하여 사용할 수도 있습니다

 

주 생성자라는 말이 처음에 아리송한데 class 키워드 옆에 클래스의 이름에

매개변수 및 constructor가 붙는 게 주 생성자라고 이해하시면 될 거 같습니다

 

주생 성자는 init 키워드를 이용해서 본문을 구현할 수 있습니다

init 영역은 반드시 선언되어야 되는 부분은 아니지만 본문을 구현할 때 사용합니다

class DevelUser(name: String, data: Int){
    init{
    	println(" init in... ")
    }
}

fun main(){
	val user = DevelUser("devel", 30);
}

위에 코드는 실행하면 init in..이라는 문구를 출력하게 됩니다

init은 사용할 때 주의해야 하는 점이 생성자의 매개변수는 지역변수이기 때문에

클래스 내의 다른 함수에서 사용할 수 없다는 것입니다

class DevelUser(name: String, data: Int){
    init{
    	println("name : $name, data : $data")		// 성공!!!
    }
    fun TestFun(){
    	println("name : $name, data : $data")		// 에러!!!
    }
}

위에서 처럼 주생성자의 매개변수는 init 외에 접근할 수 없습니다

다른 함수에서 매개변수에 접근해야 한다면 다음과 같은 방법을 사용합니다

class DevelUser(name: String, data: Int){
    var name: String
    val data: Int
    init{
    	this.name = name
        this.data = data
    }
}

init에서 클래스 내의 var,val로 매개변수를 대입하여 사용하게 되면

다른 함수에서도 매개변수의 값을 사용할 수 있습니다

 

또 다른 방법으로는 주생성자 매개변수에 타입을 지정해주는 방법입니다

class DevelUser(val name: String, var data: Int){
    fun TestFun(){
    	println("name : $name, data : $data")
    }
}

위 코드처럼 매개변수에 val, var 키워드를 통해 주생성자를 구성하게 되면

클래스 내의 함수에서 매개변수에 접근이 가능합니다

728x90
반응형

'언어 > 코틀린' 카테고리의 다른 글

[Kotlin] 널 안전성이란?  (2) 2022.07.20
[Kotlin] 조건문 When  (2) 2022.06.13
[Kotlin] 함수 선언  (2) 2022.06.13
[Kotlin] 데이터 타입  (2) 2022.06.10
[Kotlin] 변수 선언  (1) 2022.06.10

댓글