• 코틀린(abstract) 추상 함수와 추상 클래스, 추상 프로퍼티의 개념

    2022. 3. 1.

    by. 하루플스토리

    반응형

    안녕하세요, 하루플입니다😋

     

    추상 함수, 추상 클래스, 추상 프로퍼티의 정의 살펴보기

    추상함수

    코틀린에서 추상 함수는 실행 영역이 없는 함수입니다.

    abstract fun name()

    이렇게 함수는 선언되어 있는데 아무 내용도 없는 경우가 추상 함수입니다. 이렇게 추상함수를 선언하기 위해서는 앞에 반드시 abstract를 붙여줘야 합니다.

     

    추상 클래스

    추상 클래스는 이러한 추상 함수를 가지고 있는 클래스입니다.

    abstract class User{
        abstract fun name()
    }

    추상 클래스 역시 클래스 앞에 abstract를 붙여주어야 합니다.

     

    추상 프로퍼티

    객체지형 언어에서는 기본적으로 추상 함수와 추상 클래스를 지원하는데 코틀린에서는 추상 프로퍼티라는 것을 지원합니다.

    abstract val name: String

    코틀린에서 프로퍼티는 무조건 값을 포함해야하지만 추상 프로퍼티로 선언하면 값을 가지지 않아도 선언부만 가지고 선언이 가능합니다.


    추상 클래스를 이용하는 방법

    abstract class User{
        abstract val name: String
        val age: Int = 0
        
        abstract fun password()
    }
    
    Class Sub: User(){
        override val age = 26
        override fun password() {
            println("패스워드는 1234")
        }
    }
    
    fun main(args: Array<string>) {
        val sub: Sub()
    }

    User라는 추상 클래스가 있고 User를 상속받는 Sub 클래스가 있습니다.

    코틀린에서는 상속을 가능하게 하려면 부모 클래스에 open을 명시해야 하지만 추상 클래스는 open 없이도 상속이 가능합니다. 왜냐하면 추상 클래스 하나만 만들었을때는 객체 생성을 하지 않기 때문에 아무 의미가 없습니다. 그래서 추상 클래스에는 반드시 상속받는 자식 클래스가 존재 해야하며 override를 통해 멤버들을 재정의 해주어야 합니다. override 역시 추상 함수와 추상 프로퍼티에서는 open을 하지 않아도 됩니다.

     

    이런 추상 클래스는 다양한 방법으로 활용할 수 있는데요, 제가 실제로 개발해서 출시한 '스마트폰 요금 계산기' 안드로이드 앱을 예시로 들어보겠습니다. 스마트폰 요금은 공시지원금인지 선택약정인지 중고폰인지에 따라 계산 공식이 다릅니다. 그래서 상위 클래스에 계산 하겠다는 추상 함수 abstract fun calPhoneCharge()만 생성해두고 하위 클래스에서 override 하여 공시지원금, 선택약정, 중고폰에 공식을 사용해줍니다. 추상 클래스는 그래서 어느 정도의 함수 틀을 짜주는 역할로 보면 좋을 것 같습니다.

    반응형

    댓글