Kotlin : 추상클래스 (Abstract class)

언어/Kotlin

Kotlin : 추상클래스 (Abstract class)

해리누나 2022. 11. 5. 01:20
반응형

1. 추상클래스의 필요성

 

클래스를 정의할 필요가 없는 고유한 개체 (object 키워드) 가 있듯, 객체가 없는 클래스가 존재한다. 그런 클래스가 과연 유용할까? 클래스는 ( https://bruders.tistory.com/21 ) 에서 얘기했듯 동일한 유형의 객체에 대한 일반적인 구조를 정의한다.

 

 

위 코드는 지난번에 코틀린 상속관련 예시로 작성한 코드다.  Actor 클래스는 Actor 객체의 구조를, Director 클래스는 Director 클래스만의 구조를 정의했었는데, 두 사이 공통분모가 존재해 이를 따로 빼둘 둘의 상위 클래스인 Person 클래스를 만들었던 것이다. 사실 Actor 클래스와 Director 클래스의 객체만이 필요했을 뿐, Person 클래스의 객체는 따로 필요하지가 않은 상태라 Person 클래스의 객체를 생성할 수 없게 만들려고 한다. 그치만 Person 클래스를 기반으로  한 특정 클래스의 객체는 만들고 싶을 때, 추상 클래스의 개념이 필요하다.

 

 

1.5 추상클래스란? | 예시

 

추상 클래스는 아직 완전한 구조를 정의하지 않은 클래스이다. 이 추상 클래스는 아직 구현되어 있지 않기 때문에, 이 클래스의 어떤 객체도 생성할 수 가 없을음 의미한다. 추상 클래스는 구조와 동작을 부분적으로만 정의한다. (부분구현) 추상 클클래스 내 추성 메서드는 반드시 하위 클래스에서 구체화되어야한다.

 

abstract class Person(val firstName: String, val lastName: String){

    var salary = round(Random.nextDouble(100000.0, 2000000.0))
    val skill : Skill = Skill()

    fun movieSuccessfullyProduced(){
        skill.currentSkill += skill.learningSpeed
    }

    abstract fun increaseSalary()

}

class Director(firstName: String, lastName: String, val preferredActor: Actor) : Person(firstName, lastName){

    override fun increaseSalary() {
        salary += 100.0
    }

}


class Actor(firstName: String, lastName: String, val genres : List<Genre>) : Person(firstName, lastName){

    override fun increaseSalary() {
        salary *= 1.1
    }

}

추상클래스는 키워드 abstract 을 통해 명시해준다. 상속 허용을 위한 open 키워드는 추가로 작성하지 않아도 된다 (추상클래스는 어떤 경우에라도 하위클래스로부터 더 전문화/구체화 되어야 한다는 규정이 되어있어서).

 

 

 

 

출처:

내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의

 

728x90
반응형