PHpullh
학습 라이브러리/Kotlin/인터페이스 & 추상 클래스

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)과 추상 클래스의 차이를 이해합니다.

인터페이스 & 추상 클래스 학습 시 주의할 점은 무엇인가요?

두 인터페이스에 같은 이름의 기본 구현이 있으면 반드시 오버라이드해야 합니다. 그렇지 않으면 컴파일 에러입니다.