인터페이스 선언
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 22번째.
인터페이스는 방법을 설명하지 않고 타입이 할 수 있는 일을 나열합니다. 인터페이스는 이를 구현하는 모든 클래스가 제공해야 하는 메서드와 속성을 선언합니다. 클래스는 슈퍼클래스와 마찬가지로 콜론을 사용하여 인터페이스를 구현하지만, 인터페이스에는 생성자가 없으므로 괄호는 사용하지 않습니다:
interface Drawable {
fun draw(): String
}
class Circle(val radius: Int) : Drawable {
override fun draw() = "circle with radius $radius"
}
class Line(val length: Int) : Drawable {
override fun draw() = "-".repeat(length)
}main 내부에서:
println(Circle(3).draw())
println(Line(5).draw())출력:
circle with radius 3
-----인터페이스는 프로퍼티도 선언할 수 있습니다. 클래스는 생성자 프로퍼티, 저장 프로퍼티 또는 getter로 이를 제공합니다. 인터페이스 자체에는 아무것도 저장되지 않습니다:
interface Vehicle {
val wheels: Int
val label: String
}
class Car(override val label: String) : Vehicle {
override val wheels = 4
}
class Bike : Vehicle {
override val wheels = 2
override val label: String
get() = "bike on $wheels wheels"
}main 내부:
println("${Car("taxi").label}: ${Car("taxi").wheels}")
println(Bike().label)출력:
taxi: 4
bike on 2 wheels인터페이스가 선언하는 모든 멤버는 각각 override를 사용하여 구현해야 하며, 그렇지 않으면 클래스가 컴파일되지 않습니다. 인터페이스는 인스턴스화할 수 없습니다:
interface Speaker {
fun speak(): String
val volume: Int
}
// class Mute : Speaker { override fun speak() = "" } // 오류: volume이 구현되지 않음
// class Loud : Speaker() { ... } // 오류: 인터페이스에는 생성자가 없음
// val s = Speaker() // 오류: 인터페이스를 생성할 수 없음인터페이스와 추상 클래스는 모두 본문 없이 멤버를 선언합니다. 인터페이스에는 생성자와 저장된 상태가 없으며, 클래스는 여러 인터페이스를 구현할 수 있지만 하나의 클래스만 상속할 수 있습니다. 서로 관련 없는 클래스들이 공유하는 기능인 Drawable 또는 Comparable과 같은 기능에는 인터페이스를 사용하고, 상태를 가진 공통 기반에는 추상 클래스를 사용하세요.
interface Drawable { fun draw(): String } // 능력
abstract class Shape(val name: String) { abstract fun area(): Double } // 상태를 가진 기반
class Square(val s: Double) : Shape("square"), Drawable { // 하나의 클래스, 임의의 인터페이스
override fun area() = s * s
override fun draw() = "[]"
}챌린지
쉬움인터페이스 Shape의 멤버를 선언하세요. 읽기 전용 프로퍼티 name과 Double을 반환하는 메서드 area() 및 perimeter()를 선언합니다. Rectangle(width, height)(이름은 rectangle)과 Circle(radius)(이름은 circle이며 Math.PI 사용)가 이를 구현하도록 하세요. 그런 다음 Shape의 멤버만 사용하여 소수점 두 자리 형식으로 rectangle: area 12.00, perimeter 14.00을 반환하는 describe(shape)를 완성하세요.
제공된 코드는 r,3,4 또는 c,2 형식의 줄을 읽고, 일치하는 도형을 생성한 다음 describe(shape)를 출력합니다.
코드는 Shape.kt, Rectangle.kt, Circle.kt, Functions.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 포함되어 있으며 편집할 수 없습니다.
직접 해보기
fun main() {
// 제공된 입력/출력 코드: 그대로 유지하세요
val input = generateSequence(::readLine).toList()
for (line in input) {
val p = line.split(",").map { it.trim() }
val shape: Shape = if (p[0] == "r") Rectangle(p[1].toDouble(), p[2].toDouble()) else Circle(p[1].toDouble())
println(describe(shape))
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드