언어/Kotlin

[Kotlin] 클래스 생성 , 생성자

implement 2023. 2. 28. 12:00
728x90

Kotlin은 객체지향언어로 클래스를 가지고 있다.

 

클래스 생성

클래스명은 대문자로 시작해야 한다.

class 클래스명 () {
    내용
}

매개변수가 없는 경우 ()를 삭제할 수 있다.객체생성은 다음과 같이 생성할 수 있다.

class 클래스명 {
    ...
}


fun main() {
    val 객체명 = 클래스명()
}

 

 

생성자

Kotlin에서 생성자는 기본생성자(Primary Constructor),  보조생성자(Secondary Constructor)로 나뉜다.

하나의 클래스는 하나의 기본생성자와 여러 보조생성자로가 있을 수 있다.

 

기본생성자

class 클래스명 {
    ...
}

class 클래스명() {
    ...
}

class 클래스명(val 매개변수명1: 매개변수1타입, val 매개변수명2: 매개변수2타입, ...) {
	...
}

ex)

class ClassName(val name: String, val age: Int) {
	val str = "${name}의 나이는 ${age}입니다"
}

fun main() {
    val cn = ClassName(name = "홍길동", age = 13)
    print(cn.str)
}

 

기본 생성자에서 초기값을 설정해주면 초기값을 입력해 준 매개변수는 입력을 안 해도 지장이 없다

class ClassName(val name1: String = "a", val name2: Int = 1) {
    val str = "${name}, ${name2}"
}

fun main() {
    val cn1 = ClassName()
    println(cn1.str)
    
    val cn2 = ClassName(name1 = "asdf")
    println(cn2.str)
    
    val cn3 = ClassName("qwer", 5)
    println(cn3.str)
}

 

보조생성자

보조생성자는 내용을 쓸 수 있으므로 조건에 따라 초기값을 설정하거나 특정 동작을 하게끔 할 수 있다.

constructor()로 보조 생성자를 선언할 수 있다.

class ClassName(name1: String) {
    constructor(name1: String, name2: String) : this(name1) {
        ...
    }
}

ex)

class ClassName(name1: String) {
    var n = 1
    constructor(name1: String, name2: String) : this(name1) {
        n = when(name2) {
            "a" -> 11
            "b" -> 22
            else -> 33
        }
    }
}

fun main() {
    val cn = ClassName("2", "a")
    println(cn.n)
}

 

getter / setter

변수를 만들면 알아서 get(), set() 메서드로 getter와 setter 함수를 내부적으로 생성한다.

var 변수명: 변수타입 = 초기값
    get() = field
    set(value) {
    	field = value
    }

하지만 val은 값 변경이 불가능 하므로 get()만 자동으로 생성한다.

 

get() 커스텀

ex)

class Name {
    var status: String = "online"
    var volume: String = "7"
    	get() {
            if (status == "online") return field
            else return "off" 
        }
}

fun main() {
    val n = Name()
    println(n.volume)
}

출력 : 7

status가 "offline"인 경우는 "off"가 출력

class Name {
    var color = "blue"
    var isRed: Boolean? = null
    	get() = color == "red"
}
fun main() {
    val n = Name()
    println(n.isRed)
}

출력 : false

color가 "red"인 경우는 true가 출력

 

set() 커스텀

ex)

var 변수명 = 초기값
    set(value) {
        if (조건) {
            field = value
        }
    }

 

반응형