Kotlin/포스팅

코틀린 추상 클래스

짜집퍼박사(짜박) 2024. 1. 2. 12:28

코틀린에서 추상 클래스는 일부 메서드를 구현하지 않고 나머지를 하위 클래스에게 위임하는 클래스입니다. 추상 클래스는 abstract 키워드를 사용하여 선언하며, 일반적으로 추상 메서드를 포함할 수 있습니다. 추상 메서드는 본문이 없는 메서드이며 하위 클래스에서 반드시 구현되어야 합니다.

아래에서는 코틀린에서 추상 클래스를 선언하고 사용하는 방법에 대해 설명하겠습니다.

 

1. 추상 클래스 선언

추상 클래스는 abstract 키워드를 사용하여 선언됩니다. 추상 메서드를 포함할 수 있으며 일반 메서드도 가질 수 있습니다.

abstract class Shape {
    abstract fun area(): Double // 추상 메서드
    fun description(): String {
        return "This is a shape."
    }
}

위의 예제에서 Shape 클래스는 추상 메서드인 area()를 선언하고, 일반 메서드인 description()을 가지고 있습니다.

 

2. 추상 클래스의 상속과 구현

추상 클래스를 상속받는 하위 클래스에서는 추상 메서드를 반드시 구현해야 합니다. 하위 클래스에서 추상 메서드를 구현하지 않으면 컴파일 오류가 발생합니다.

class Circle(val radius: Double) : Shape() {
    override fun area(): Double {
        return 3.14 * radius * radius
    }
}

위의 예제에서 Circle 클래스는 Shape 클래스를 상속하면서 area() 메서드를 구현하고 있습니다.

 

3. 추상 클래스의 인스턴스 생성 방지

추상 클래스는 직접 인스턴스를 생성할 수 없습니다. 하위 클래스를 통해 추상 클래스의 객체를 생성해야 합니다.

// 아래 코드는 컴파일 에러를 발생시킵니다.
val shape = Shape() // 오류: Cannot create an instance of an abstract class

 

4. 추상 클래스의 추상 프로퍼티

추상 클래스는 추상 프로퍼티도 가질 수 있습니다. 추상 프로퍼티는 반드시 하위 클래스에서 구현되어야 합니다.

abstract class Shape {
    abstract val sides: Int
}

하위 클래스에서는 이 추상 프로퍼티를 구현해주어야 합니다.

class Square : Shape() {
    override val sides: Int
        get() = 4
}

 

5. 인터페이스와의 차이

추상 클래스와 인터페이스는 비슷해 보일 수 있지만, 추상 클래스는 일부 메서드를 구현하고 나머지를 하위 클래스에게 위임하는 반면, 인터페이스는 모든 메서드가 추상이며, 다중 상속을 지원합니다.

interface Shape {
    fun area(): Double
}

class Circle(val radius: Double) : Shape {
    override fun area(): Double {
        return 3.14 * radius * radius
    }
}

추상 클래스와 인터페이스는 상황에 따라 다르게 선택되며, 추상 클래스는 주로 코드를 재사용하고 공통된 메서드를 제공하기 위해 사용됩니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 인터페이스  (0) 2024.01.02
코틀린 추상클래스의 추상 멤버  (0) 2024.01.02
코틀린 공통 메서드  (0) 2024.01.02
코틀린 상속 캐스팅  (0) 2024.01.02
코틀린 타입 검사  (0) 2024.01.02