[Kotlin] 클래스, Interface, data class

이주형·2022년 12월 17일
0

Kotlin

목록 보기
1/2

📌 클래스

// 클래스 선언
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()

📌 inheritance(상속)

  • 코틀린에서 최상위 클래스 : Any
  • 동시에 여러 클래스를 상속받을 수는 없다.
  • open된 클래스만 상속 가능

📌 abstract(추상) 클래스

  • 인스턴스화 불가
  • open없이도 subclass가 상속 가능
  • abstract 함수는 구현할 수 없다. -> subclass에서 구현해야 함
abstract class Polygon {
	abstract fun draw()
}

class Rectangle: Polygon() {
	override fun draw() {
    	// draw the rectangle
    }
}

📌 Interface

  • 프로퍼티 정의 가능
  • 상태를 저장할 수는 없다. 단, 프로퍼티의 접근자를 제공
  • 본문이 있는 함수도 정의 가능
  • 인터페이스 구현 상속은 클래스와 달리 갯수 제한이 없다.
interface MyInterface {
	val prop: Int
    val property: String = "" // 상태 저장 불가능
    val propertyWithImplement
    	get() = "foo"
        
    fun foo() {
    	print(prop)
    }
    
    fun start()

📌 data class

  • 데이터를 저장할 때 toString, equals, hashCode를 override할 필요가 없다.
  • 프로퍼티는 val, var 둘다 가능하지만, 데이터의 원본이 이후 연산으로부터 영향을 받지 않도록 val을 권장한다.
  • copy() : 동일한 값을 가진 프로퍼티는 유지한 채, 지정한 값만 변경
val john = Person("john", 23)
val tom = john.copy(name = "tom")
  • Destructuring
val john = Person("john", 23)
val (name, age) = john

// 필요하지 않은 경우
val (name, _) = john

0개의 댓글