Class

작성일

Class

class MyInfo {
  enum GenderType {
    case male
    case female
  }

  var genderType: GenderType?

  var name = " "
  var age = 0

  func isAdult() -> Bool {
    if age > 19 {
      return true
    }
    return false
  }
}

class는 초기타입을 무조건 설정해줘야 한다.
안하려면 이렇게

class MyInfo {

  //추가된 부분
  init(gender: GenderType) {
    self.genderType = gender
  }

  enum GenderType {
    case male
    case female
  }

  var genderType: GenderType?

  var name = " "
  var age = 0

  func isAdult() -> Bool {
    if age > 19 {
      return true
    }
    return false
  }
}

이렇게 추가하는 이유는

var myInfo = MyInfo(gender: .female)

에서 MyInfo가 생성되는 순간에 값을 입력해야하는 정도가 있을때 이렇게 init함수를 사용해야 한다.

참조

위에 코드랑 이어서 보면,

var myInfo = MyInfo(gender: . female)
myInfo.age = 20

var myInfo2 = myInfo
myInfo2.age = 100

var myInfo3 = myInfo2

이렇게 하면 100으로 잡힌다.(계속 참조하기 때문이다.)

상속

class Soccer {

  var homeScore = 0
  var awayScore = 0

  func presentScore() -> String {
    return homeSore.description + " : " + awayScore.description
  }
}

let soccer = Soccer()
soccer.awayScore = 1
soccer.homeSocre = 2
soccer.presentScore()

이렇게 축구가 있는데, 야구를 추가하고 싶을때 상속을 사용하면 쉽게 사용이 가능하다.

class Soccer {

  var homeScore = 0
  var awayScore = 0

  func presentScore() -> String {
    return homeSore.description + " : " + awayScore.description
  }
}

class Baseball {

  var homeScore = 0
  var awayScore = 0

  func presentScore() -> String {
    return homeSore.description + " : " + awayScore.description
  }
}

let soccer = Soccer()
soccer.awayScore = 1
soccer.homeSocre = 2
soccer.presentScore()

이렇게 계속 써야하면 매우 안좋은 코드이다. 따라서 방금 말한 상속을 이용해서

class GameInfo{
  var homeScore = 0
  var awayScore = 0

  func presentScore() -> String {
    return homeSore.description + " : " + awayScore.description
  }
}

class Soccer: GameInfo{
}

class Baseball: GameInfo{
}

이렇게 상속시켜주면 부모에 있는 변수와 메서드들을 가져와서 사용할 수 있다.
만약에 특정게임에 추가하고싶은 변수가 있으면

class Soccer: GameInfo{
  var time = 0
}

class Baseball: GameInfo{
  var round = 0
}

이렇게 따로 따로 사용이 가능하다.

override

부모에 있는 함수 메서드를 그대로 가져와서 몇가지 기능을 수정한다는 뜻이다.

  func presentScore() -> String {
    return homeSore.description + " : " + awayScore.description
  }

  override func presentScore() -> String {
    return homeSore.description + " 대 " + awayScore.description
  }

final

만약에, override를 사용하지 말라고 지정해주고 싶으면,

  final func presentScore() -> String {
    return homeSore.description + " : " + awayScore.description
  }

이렇게 사용해주면 override가 되지 않고 고정값으로 바뀐다.(바뀌어지지않는다.)