KOTLIN · 객체지향
인터페이스 & 추상 클래스
인터페이스의 기본 구현(default method)과 추상 클래스의 차이를 이해합니다.
객체지향중급interfaceabstract다중구현상속override
핵심 설명
인터페이스의 기본 구현(default method)과 추상 클래스의 차이를 이해합니다.
Kotlin code
// 인터페이스 — 기본 구현 가능
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})")
}학습 팁
인터페이스는 상태(backing field)를 가질 수 없습니다. 상태가 필요하면 추상 클래스를 사용하세요. 인터페이스는 다중 구현이 가능합니다.
주의할 점
두 인터페이스에 같은 이름의 기본 구현이 있으면 반드시 오버라이드해야 합니다. 그렇지 않으면 컴파일 에러입니다.
자주 묻는 질문
인터페이스 & 추상 클래스란 무엇인가요?
인터페이스의 기본 구현(default method)과 추상 클래스의 차이를 이해합니다.
인터페이스 & 추상 클래스 학습 시 주의할 점은 무엇인가요?
두 인터페이스에 같은 이름의 기본 구현이 있으면 반드시 오버라이드해야 합니다. 그렇지 않으면 컴파일 에러입니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.