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가 되지 않고 고정값으로 바뀐다.(바뀌어지지않는다.)