Notice
Recent Posts
Recent Comments
Link
반응형
변명은 만개 결과는 한개
[Kotlin] class 본문
728x90
반응형
Class
생성자
class 클래스이름 constructor(변수){
}
또한 아래와 같이 다중 생성자를 가질 수 있음
class Sample constructor(val name: String, val arg: Int) {
constructor(name: String) : this(name, 0)
}
class 를 정의함과 동시에 오는 생성자를 primary constructor
라 부르고,
그 이외의 생성자들을 secondary constructor
라 부른다.
primary constructor
- 아래와 같이
constructor
생략 가능하다
class Sample (val name: String, val age: Int) {
...
}
- 자바 생성자와 다르게 변수에 대한 타입을 바로 가질 수 있으며 이 변수들은
전역변수
로 취급된다.
secondary constructor
constructor
문구 생략 불가능하다- 반드시
this
에 값을 넘겨줘야함. 넘겨주지 않을 경우 오류 발생
default 생성자
아래와 같이 생성자의 인자에 default 값을 넣을 수 있다
fun test() {
Sample(age = 2)
}
class Sample(val name: String = "Name", val age: Int) {
}
init
fun test() {
Sample("me")
}
class Sample(val name: String, val age: Int) {
constructor(name: String) : this(name, 0) {
println("> name $name, age $age")
}
init {
println(">> name $name, age $age")
}
}
이때, 아래와 같은 출력이 나옴
>> name me, age 0
> name me, age 0
init
블럭이 먼저 호출됨
주의해야할점
- 생성자는
primary constructor
를 통해서만 전역변수 생성이 가능함.secondary constructor
는 단순히 생성자만 가지는게 유용함
Class 생성자에서의 초기화
fun test() {
Customer("name")
}
class Customer(name: String) {
val customerName = name.toUpperCase()
init {
print("name $name, customerName $customerName")
}
}
이때, 아래와 같은 출력이 나옴
name name, customerName NAME
Class 상속 - kotlin:abstract
abstract class Base(age: Int)
class UseBase(age: Int) : Base(age)
Class 상속 - kotlin:interface
interface Base {
fun getName(): String
}
class UseBase : Base {
override fun getName() = "name"
}
상속 종합 예제
class ExampleUnitTest {
@Test
@Throws(Exception::class)
fun test() {
var customerAge = Customer(23).getCustomerAge()
print("CUSTOMER AGE : $customerAge")
}
abstract class AbstractBase(val age: Int)
interface InterfaceBase {
fun getCustomerAge(): Int
}
class Customer(age: Int) : InterfaceBase, AbstractBase(age) {
override fun getCustomerAge(): Int = this.age
}
}
class open
코틀린에서는 abstract/interface 를 제외한 모든 클래스는 final
이다
그렇기때문에 코틀린은 기본적으로 클래스와 메소드 확장이 불가능한 형태이나, 아래 코드와 같이 open
키워드로 가능하게 만들어 줄 수 있음
...
open class Customer(age: Int) : InterfaceBase, AbstractBase(age) {
override fun getCustomerAge(): Int = this.age
}
class User(age: Int) : Customer(age) {
}
728x90
반응형
'공부 > Kotlin' 카테고리의 다른 글
[Kotlin] Control Flow (0) | 2020.11.13 |
---|---|
[Kotlin] Function (0) | 2020.11.12 |
[Kotlin] Types, Properties, Fields (0) | 2020.11.07 |
[Kotlin] findViewById 하는 세가지 방법 (0) | 2020.11.07 |
[Kotlin] 시작 전 (0) | 2020.08.20 |