코틀린 기초 : 클래스, 추상화, 인터페이스
클래스 선언
//함수 없이 속성만 가진 클래스 선언
class Person (var name:String, val birthYear:Int)
인스턴스 선언
var a = Person("박보영", 1990)
문자열 포맷 출력
println("안녕하세요, ${a.birthYear}년생 ${a.name}입니다")
//인스턴스의 변수를 문자로 오인할수 있기때문에 {}를 사용함.
생성자 init
class Person (var name:String, val birthYear:Int){
init {
//인스턴스 생성시 실행되는 구문.
}
}
보조생성자 constructor
class Person (var name:String, val birthYear:Int){
init {
//인스턴스 생성시 실행되는 구문.
}
constructor(name:String) : this(name, 1997) {
//보조생성자를 통해 인스턴스 생성시 실행되는 구문.
//보조생성자는 초기화 되지 않은 변수를 생성자를 호출하여 초기화 해주어야 한다.
}
}
상속 open
//상속을 위해서는 부모(슈퍼)클래스에 open을 붙여주어야 한다.
open class Animal (){}
class Dog() : Animal() {}
함수 오버라이딩 open/override
open class Animal{
open fun eat {}
}
class Tiger : Animal() {
override fun eat() {}
}
추상화 abstract
abstract class Animal {
abstract fun eat()
}
class Rabbit : Animal {
override fun eat() {}
}
인터페이스 Interface
//코틀린에서는 속성, 추상함수, 일반함수를 가질수 있음.
//추상함수는 생성자를 가질수 있지만, 인터페이스는 생성자를 가질수 없음.
//여러 인터페이스에서 같은 이름과 형태를 가진 함수가 있다면 오버라이딩 해주어야 함.
interface Runner {
fun run() // 인터페이스는 구현부가 없다면 abstract로 간주.
}
interface Eater {
fun eat() { } // 인터페이스는 구현부가 있다면 Open으로 간주.
}
class Dog : Runner, Eater{
override fun run() {}
override fun eat() {}
}