Kotlin
인터페이스 & 추상 클래스
인터페이스의 기본 구현(default method)과 추상 클래스의 차이를 이해합니다.
// 인터페이스 — 기본 구현 가능
interface Drawable {
val color: String // 추상 프로퍼티
fun draw() // 추상 메서드
fun describe() = "나는 $color 색 도형" // 기본 구현
}
interface Resizable {
fun resize(factor: Double)
}
// 다중 인터페이스 구현
class Circle(
override val color: String,
var radius: Double
) : Drawable, Resizable {
override fun draw() = println("⭕ 반지름 $radius 원")
override fun resize(factor: Double) { radius *= factor }
}
// 추상 클래스 — 상태(필드)를 가질 수 있음
abstract class Shape(val name: String) {
var x = 0.0; var y = 0.0
abstract fun area(): Double
fun move(dx: Double, dy: Double) {
x += dx; y += dy
}
}
class Rectangle(val w: Double, val h: Double)
: Shape("사각형") {
override fun area() = w * h
}
fun main() {
val c = Circle("red", 5.0)
c.draw()
println(c.describe())
c.resize(2.0)
c.draw()
val r = Rectangle(3.0, 4.0)
r.move(1.0, 2.0)
println("넓이: ${r.area()}, 위치: (${r.x}, ${r.y})")
}