반응형
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)
}
}
}
코드를 보면 감독 클래스와 배우 클라스에 겹치는 속성들이 많은데, 이를 하나의 상위 클래스로 빼, 코드중복을 줄일 수가 있다. 상위 클래스는 감독도, 배우도 둘 다 사람이니까 사람 클래스를 만들어 보는 걸로...
이제 위처럼 각 감독과 영화배우 클래스가 슈퍼클래스인 Person을 상속박으면 된다.
출처:
내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의
728x90
반응형
'언어 > Kotlin' 카테고리의 다른 글
Kotlin : Supertypes and Subtypes (0) | 2022.10.30 |
---|---|
Kotlin : Polymorphie (ft.오버라이딩) (0) | 2022.10.30 |
Kotlin : 상속 (inheritance) (0) | 2022.10.20 |
Kotlin : Movie Maker produce() 함수 (0) | 2022.10.19 |
Kotlin : Movie Maker 일단 클래스부터 (0) | 2022.10.19 |