패스트캠퍼스) ios 개발 챌린지

[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 25회차 미션

student513 2020. 11. 26. 12:47

구조체 vs 클래스

구조체를 사용해야하는 경우

프로퍼티는 동일하되, 각 프로퍼티의 value가 달라야하는 경우
여러 다른 코드들이 해당 오브젝트를 참조할 경우 

클래스를 사용해야하는 경우

여러 대상을 아우르는 하나의 클래스가 필요한 경우

클래스의 상속에 대해 알아보자

Person을 상속받은 Student 클래스

struct Grade {
    var letter: Character
    var points: Double
    var credits: Double
}

class Person {
    var firstName: String
    var lastName: String

    init(firstName: String, lastName: String) {
        self.firstName = firstName
        self.lastName = lastName
    }

    func printMyName() {
        print("My name is \(firstName) \(lastName)")
    }
}

class Student: Person {
    var grades: [Grade] = []
}

// 학생인데 운동선수
class StudentAthlete: Student {
    var minimumTrainingTime: Int = 2
    var trainedTime: Int = 0
    
    func train() {
        trainedTime += 1
    }
}

// 운동선인데 축구선수
class FootballPlayer: StudentAthlete {
    var footballTeam = "FC Swift"
    
    override func train() {
        trainedTime += 2
    }
}

위에서부터 클래스를 상속받고 있다. 자식 클래스는 부모 클래스의 프로퍼티와 메소드를 참조할 수 있다.

반대방향은 성립하지 않는다.

 

var athelete1 = StudentAthlete(firstName: "Yuna", lastName: "Kim")
var athelete2 = FootballPlayer(firstName: "Heung", lastName: "Son")

// FootballPlayer는 StudentAthlete을 상속받은 것이므로 할당이 가능하다
// as StudentAthlete은 athelete2를 StudentAthlete에 할당한다고 명시한 것
// uppercast
athelete1 = athelete2 as StudentAthlete

// downcast
// athelete1을 FootballPlayer로 다운한다.
if let son = athelete1 as? FootballPlayer {
    print("--> team:\(son.footballTeam)")
}

 

올인원 패키지 : iOS 앱 개발👉https://bit.ly/2FjWizq