// BASE CLASS
class Person {
// PROPERTY
var name: String = ""
var age: Int = 0
// COMPUTED PROPERTY
var description: String{
return "This person's name is \(name) and \(age) years old"
}
//METHOD
func greeting() -> String {
return "Hi my name is \(name)"
}
}
// CLASS
class Movie {
// PROPERTY
var title: String = ""
var year: Int = 0
// INSTANCE PROPERTY
var director: Person = Person()
// ARRAY OF INSTANCE PROPERTY
var actors: [Actor] = []
// METHOD
func description() -> String {
return "영화 \"\(title)\"은 \(year)년에 개봉된 영화입니다. \(director.name) 감독이 감독하였으며 배우 \(actors[0].name)과 배우 \(actors[1].name)이 연기로 참여 하였습니다"
}
}
// SUBCLASSING
class Actor: Person {
var isAwarded: Bool = false
// OVERRIDE
override func greeting() -> String {
return "Hi my name is \(name) and I am an actor"
}
}
// SUBCLASSING
class Director: Person {
var isAwarded: Bool = false
// OVERRIDE
override func greeting() -> String {
return "Hi my name is \(name) and I am a director"
}
}
let 우민호 = Director()
우민호.name = "우민호"
우민호.age = 51
우민호.isAwarded = true
let 이병헌 = Actor()
이병헌.name = "이병헌"
이병헌.age = 51
이병헌.isAwarded = true
let 곽도원 = Actor()
곽도원.name = "곽도원"
곽도원.age = 48
곽도원.isAwarded = true
let 남산의부장들 = Movie()
남산의부장들.title = "남산의부장들"
남산의부장들.year = 2020
남산의부장들.director = 우민호
남산의부장들.actors.append(이병헌)
남산의부장들.actors.append(곽도원)
print(남산의부장들.description())
print(이병헌.greeting())
print(곽도원.greeting())
print(우민호.greeting())
// -> 영화 "남산의부장들"은 2020년에 개봉된 영화입니다. 우민호 감독이 감독하였으며 배우 이병헌과 배우 곽도원이 연기로 참여 하였습니다
// -> Hi my name is 이병헌 and I am an actor
// -> Hi my name is 곽도원 and I am an actor
// -> Hi my name is 우민호 and I am a director