Kotlin : 상속 (inheritance) 적용해보기

언어/Kotlin

Kotlin : 상속 (inheritance) 적용해보기

해리누나 2022. 10. 28. 03:14
반응형

https://bruders.tistory.com/41 에서 썼던 코드에 상속을 적용해보자.

 

[코드]

import kotlin.random.Random
import kotlin.math.round

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

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

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

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

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

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

}
 
 
class Skill{

    val maxSkill = Random.nextInt(250,500)
    var currentSkill = Random.nextInt(100,maxSkill)
        set(value){
            if(value > field && value <= currentSkill){
               field = value
            }
        }

    val learningSpeed = Random.nextInt(2,10)

}


class Movie(val title: String, val director: Director, val mainActor: Actor, val budget: Int, val genre : Genre){

    private val ratings = mutableListOf<Double>()

    val costs = director.salary + mainActor.salary + budget
    var revenue = 0.0
        private set

    fun produce()
    {
        val baseRevenue = round(Random.nextDouble(1_000_000.0,2_000_000.0))
        rating()

        var totalRevenue = 0.0

        for(rating in ratings){
            val additionalRevenue = (baseRevenue * rating)
            totalRevenue +=  additionalRevenue
            println("영화 새 평점이 등록되었습니다. 평점: $rating | 영화수익: $additionalRevenue")
        }

        this.revenue = totalRevenue
        println("영화 총 수익: $revenue")

        val profit = revenue - costs
        if(profit > 0) {
            println("성공!")
            println("영화 이윤은 $profit 입니다.")
        }else{
            println("실패!")
            println("영화 적자는 ${profit*(-1)} 입니다.")
        }

        mainActor.movieSuccessfullyProduced()
        director.movieSuccessfullyProduced()
    }

    fun rating(){
        for( x in 1..5){
            val rating = round(Random.nextDouble(0.0,5.0))
            ratings.add(rating)
        }
    }

}

코드를 보면 감독 클래스와 배우 클라스에 겹치는 속성들이 많은데, 이를 하나의 상위 클래스로 빼, 코드중복을 줄일 수가 있다.  상위 클래스는 감독도, 배우도 둘 다 사람이니까 사람 클래스를 만들어 보는 걸로...

 

Super Class

 

이제 위처럼 각 감독과 영화배우 클래스가 슈퍼클래스인 Person을 상속박으면 된다.

 

 

 

 

출처:

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

728x90
반응형