이제 어느정도 틀은 잡아두었으니, 본격적으로 프로젝트를 생성해보자.
1. enum Class Genre 구현하기
먼저 가장 간단한 Genre 를 위한 enum 클래스를 만들어보자. 코틀린데이터 생성 후 생각해둔 장르를 넣어주면 된다.
enum class Genre {
ACTION,
COMEDY,
DRAMA,
FANTASY,
HORROR,
THRILLER
}
2. Actor와 Director 클래스 구현하기
영화가 하나 성공적으로 제작될때마다, 감독과 배우 모두 그만큼 능력치가 올려가야하니, 각자 배우는 속도에 따라 능력치가 올라가게 해준다. 개개인의 능력치 한계치가 존재하니, 그 한계치를 넘지 않도록 제한도 두고.
++
저번글에서 객체들은 또 다른 객체들로 구성되어 있다는 얘기를 했다. 그건 우리가 사는 세상속에서 이미 익숙한 개념인데, 예를 들면 우리의 몸이란 객체는 다른 객체들(머리, 다리, 팔, 발, ...)로 이루어져있다. 또 이 머리라는 객체는 눈, 코, 입 등의 다른 객체들로 이루어져 있다. 즉, 개별구성 요소가 각각 전체를 구성하고 있다는 것이다. 또한, 데이터는 항상 그 데이터가 속한 객체에 저장되어야 한다. 예로, 머리 라는 객체 내부엔 한 쌍의 눈이라는 객체가 존재한다. 그럼 이 눈이라는 객체의 속성(눈 색깔)은 머리라는 객체가 아니라 눈이라는 객체 내에 저장되어야 한다.
위에 코드를 보면 두 클래스 모두에서 중복되는 부분이 보인다.
코드 작성 시 중복되는 부분이 많이 보이는 건 코드가 이뻐?보이지 않는다. 저 3개의 속성들은 서로 연관되어 있으니, 차라리 하나의 다른 클래스에 집어 넣어 사용하는 것이 좋다. (자연스럽게 함께 속하는 데이터들은 프로그램 코드에서 하나의 단위로 매핑되는게 좋다.)
3. Skill 클래스 구현하기
Skill 클래스가 구현되었으니 이제 Director와 Actor 클래스 내부에서 속성 skill은 이 Skill 클래스를 이용하면 된다.
Skill 클래스 내에서 이미 Set 메서드를 통해 변경될 값에 대한 제한을 걸어두었으니 fun movieSuccessfullyProduced() 에서 다시 관련 코드를 작성하지 않아도 된다.
4. Movie 클래스 구현하기
Actor와 Director 클래스가 만들어졌으니, 이제 가장 중요한 Movie 클래스를 만들어보자. 생성자에 director와 mainActor가 있는데, 이는 영화 오브젝트를 하나 생성할 시, 감독와 배우의 오브젝트가 필요하다는 뜻이다. 영화를 만드는데 드는 비용은 감독과 배우의 급여와 영화제작에 필요한 예산을 합한 걸로 했다. 수익은 읽기로만 참조할 수 있게 private 걸어두고 영화가 만들어졌을 때 그 값이 변경되어야 하니 var 가변변수로 했다.
영화의 평점들이 저장되어있는 ratings 리스트는 나중에 평점들이 추가될테니 변경이 가능한(mutable) 리스트로 둔다.
5. main()
클래스도 다 완성되었으니, 이제 객체들을 생성해보자.
음.... 예상비용 숫자가 너무 더럽다.... 감독과 주연배우의 급여를 올림값으로 받아 좀 깔끔하게 바꿨다.
kotlin.math.round 를 import 해오면 round() 사용이 가능해진다. round()는 소숫점 아래부분을 반올림해준다.
역시 깔끔하게 보기 좋다.
출처:
내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의
'언어 > Kotlin' 카테고리의 다른 글
Kotlin : 상속 (inheritance) (0) | 2022.10.20 |
---|---|
Kotlin : Movie Maker produce() 함수 (0) | 2022.10.19 |
Kotlin : Movie Maker 시물레이션, 구상 (0) | 2022.10.18 |
Kotlin : 간단한 for 과 while, do..While 문의 이용 (0) | 2022.10.13 |
Kotlin : 리스트 (list) (0) | 2022.10.12 |