// 클래스 선언
class Person{}
// 프로퍼티를 파라미터로 받기
class Person(val name: String) {}
// 주생성자와 부생성자
class Person(val name: String) {
constructor(name: String, age: Int): this(age)
}
// 코틀린은 생성자 파라미터에 초기값을 정할 수 있기 때문에
// 위에 부생성자는 잘 사용하지 않고 아래와 같이 사용
class Person(name: String, age: Int = 20)
클래스로 만드는 객체
// 생성자에 파라미터가 있을 때
val person = Person("john", 23)
// 생성자에 파라미터가 없을 때
class Store {}
val store = Store()
- 코틀린에서 최상위 클래스 : Any
- 동시에 여러 클래스를 상속받을 수는 없다.
- open된 클래스만 상속 가능
- 인스턴스화 불가
- open없이도 subclass가 상속 가능
- abstract 함수는 구현할 수 없다. -> subclass에서 구현해야 함
abstract class Polygon {
abstract fun draw()
}
class Rectangle: Polygon() {
override fun draw() {
// draw the rectangle
}
}
- 프로퍼티 정의 가능
- 상태를 저장할 수는 없다. 단, 프로퍼티의 접근자를 제공
- 본문이 있는 함수도 정의 가능
- 인터페이스 구현 상속은 클래스와 달리 갯수 제한이 없다.
interface MyInterface {
val prop: Int
val property: String = "" // 상태 저장 불가능
val propertyWithImplement
get() = "foo"
fun foo() {
print(prop)
}
fun start()
- 데이터를 저장할 때 toString, equals, hashCode를 override할 필요가 없다.
- 프로퍼티는 val, var 둘다 가능하지만, 데이터의 원본이 이후 연산으로부터 영향을 받지 않도록 val을 권장한다.
val john = Person("john", 23)
val tom = john.copy(name = "tom")
val john = Person("john", 23)
val (name, age) = john
// 필요하지 않은 경우
val (name, _) = john