클래스
클래스는 아래와 같이 선언할 수 있다. 클래스 내부에 함수나 변수를 선언할 수 있고 변수는 프로퍼티(Property), 함수는 메서드(Method)라고 부른다.
class MyClass {
var property: String = "property"
func method() -> String {
return "method"
}
}
클래스에 소괄호를 붙여 인스턴스(instance)를 생성할 수 있다. 즉, 클래스라는 객체를 만들고 그것의 인스턴스를 만들어서 객체를 활용할 수 있는 것이다.
let instanceOfHuman = MyClass()
print(instanceOfMyClass.property) // "property"
print(instanceOfMyClass.method()) // "method"
프로퍼티를 초기화해주지 않으면 에러가 발생한다. 따라서 프로퍼티 선언 시 혹은 init() 함수 안에서 초기값을 할당해야 한다. 프로퍼티 이름 앞 self를 통해 현재 인스턴스의 값을 가리킬 수 있다. self는 인자 이름과의 구분에 활용될 수 있다.
class Human {
var name: String
init() {
self.name = "Kam"
}
func eat(food name: String) {
print("\(self.name) eats the \(name)")
}
}
let instanceOfHuman = Human()
print(instanceOfHuman.eat(food: "burger")) // "Kam eats the burger"
인스턴스 객체의 할당이 해제되는 경우 deinit이 실행된다. 할당 해제 전 필요한 작업을 처리할 수 있다.
class Human {
...
deinit {
print("deinit")
}
}
클래스는 서브클래스에 상속될 수 있다. 아래에선 Animal이 상위 클래스가 되고 Human이 Animal 클래스를 상속받는 서브클래스가 된다. 상위 클래스를 상속받은 서브클래스는 상위 클래스의 프로퍼티나 메서드에 접근할 수 있다.
class Animal {
func eat(food name: String) {
print("Start to eat the \(name)")
}
}
class Human: Animal {
}
let human = Human()
human.eat(food: "burger") // "Start to eat the burger"
서브클래스 Human은 상위 클래스 Animal의 메서드 eat()을 override할 수 있다. override는 쉽게 말해서, 기존의 메서드 대신 새롭게 수정된 메서드로 사용하겠다는 의미다. 따라서 기존 상위 클래스의 메서드는 무시되고 override 된 메서드가 사용된다.
class Human: Animal {
override func eat(food name: String) {
print("A Human starts to eat the \(name)")
}
}
let human = Human()
human.eat(food: "burger") // A Human starts to eat the burger
서브클래스 Human에 선언된 language라는 프로퍼티는 Human 클래스의 init 스코프에서 값을 설정할 수 있다. 그리고 super.init 호출하여 상위 클래스 Animal의 프로퍼티 name의 값을 설정할 수 있고, numberOfLegs, numberOfArms와 같은 상위 클래스의 프로퍼티는 직접 값을 설정할 수 있다.
class Animal {
var name: String
var numberOfLegs: Int
var numberOfArms: Int
init(name: String) {
self.name = name
}
}
class Human: Animal {
var language: String
init(language: String, name: String) {
self.language = "Korean"
super.init(name: name)
numberOfArms = 2
numberOfLegs = 2
}
}
참고: Apple Inc. “The Swift Programming Language (Swift 5.3)”. Apple Books. https://books.apple.com/hk/book/the-swift-programming-language-swift-5-4/id881256329?l=en
'프로그래밍 > Swift' 카테고리의 다른 글
[iOS] MVC와 MVVM에 대한 생각 (0) | 2021.11.25 |
---|---|
[Xcode] Build Configuration 및 Flag 추가하기(#if DEBUG 처럼..) (2) | 2021.09.15 |
[swift] 함수와 클로저 (0) | 2021.06.07 |
[Xcode 12] 인텔 맥북과 M1 맥북의 Architecture 차이점(x86_64와 Arm64) (0) | 2021.06.04 |
[Swift] 조건문과 반복문 (0) | 2021.05.27 |