본문 바로가기

프로그래밍/Kotlin

[Kotlin 요약 정리] 5. 클래스

5. 클래스

1) 선언 및 생성

- 선언 형식: class 클래스명 {}

 

class Class{

   val property = 1

   fun function() = println("function")

}



fun main() {

   val cls = Class()

   println(cls.property)

   cls.function()

}

// 결과

1

function

 

2) 주 생성자

- 생성자: 클래스를 통해 객체를 생성하기 위한 함수

- 코틀린에서는 주 생성자와 보조 생성자로 구분

- 주 생성자는 클래스 선언부에 작성하며 클래스당 하나의 주 생성자만 정의 가능하다. (필수 사항은 아님)

 

class Class1 {}

class Class2() {}

class Class3 constructor() {}

class Class4 constructor(arg1: String, arg2: Int){

   val arg1 = arg1

   val arg2 = arg2

   fun pr() = println("$arg1, $arg2")

}

class Class5 constructor(arg1: String, arg2: Int){

   val arg1 = arg1

   val arg2 = arg2

   init{

       println("$arg1, $arg2")

   }

}

class Class6 constructor(val arg1: String, val arg2: Int){

   init {

       println("$arg1, $arg2")

   }

}



fun main() {

   val cls1 = Class1()

   val cls2 = Class2()

   val cls3 = Class3()

   val cls4 = Class4("4", 4)

   cls4.pr()

   val cls5 = Class5("5", 5)

   val cls6 = Class6("6", 6)

}

// 결과

4, 4

5, 5

6, 6



3) 보조 생성자

- 보조 생성자는 클래스 내에 constructor 예약어로 선언한다.

- 보조 생성자를 선언하면 주 생성자를 선언하지 않아도 된다.

- init{} 초기화 블럭은 보조 생성자 블록 수행 전에 먼저 수행된다.

 

class Cls1{

   constructor(){}

}

class Cls2{

   constructor(){}

   constructor(arg1: String, arg2: Int){

       this.arg1 = arg1

       this.arg2 = arg2

   }

   var arg1: String = "a"

   var arg2: Int = 0

   fun pr() = println("$arg1, $arg2")

}

class Cls3 constructor(val name: String){

   constructor(name: String, age: Int) : this(name) {

       println("$name, $age")

   }

}



fun main() {

   val cls1 = Cls1()

   val cls2_1 = Cls2()

   val cls2_2 = Cls2("some", 3)

   cls2_1.pr()

   cls2_2.pr()

   val cls3_1 = Cls3("john")

   val cls3_2 = Cls3("james", 10)

}

// 결과

a, 0

some, 3

james, 10