초기화 메서드
Swift에서는 클래스나 구조체의 인스턴스를 생성할 때 초기화 메서드를 사용합니다. 초기화 메서드는 인스턴스를 사용하기 전에 필요한 값들을 초기화하는 역할을 합니다.
Swift에서는 두 가지 종류의 초기화 메서드를 지원합니다. Designated Initializer
와 Convenience Initializer
입니다.
Designated Initializer
Designated Initializer는 클래스나 구조체의 모든 프로퍼티를 초기화하는 메서드입니다. 클래스의 경우는 init
키워드를 사용하여 정의하며, 구조체의 경우는 init
키워드를 사용하여 정의합니다.
class Person {
var name: String
init(name: String) {
self.name = name
}
}
struct Point {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
Convenience Initializer
Convenience Initializer는 해당 클래스나 구조체의 특정 프로퍼티만 초기화하는 메서드입니다. Convenience Initializer는 convenience
키워드를 사용하여 정의하며, init
키워드를 사용하여 호출하는 Designated Initializer를 호출해야 합니다.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
struct Point {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
init(value: Int) {
self.init(x: value, y: value)
}
}
타입 상속
Swift는 클래스 타입만을 상속할 수 있으며, 다중 상속은 지원하지 않습니다. 상속은 클래스가 다른 클래스의 프로퍼티와 메서드를 상속받는 것을 의미합니다.
상속을 위해서는 부모 클래스를 정의하고 자식 클래스에서 상속받을 클래스를 명시해야 합니다. 자식 클래스는 부모 클래스의 모든 프로퍼티와 메서드를 사용할 수 있으며, 필요에 따라 재정의할 수도 있습니다.
class Animal {
var name: String
init(name: String) {
self.name = name
}
func eat() {
print("\(name) is eating")
}
}
class Dog: Animal {
func bark() {
print("Woof woof!")
}
}
위의 예시에서 Dog
클래스는 Animal
클래스를 상속받았습니다. 따라서 Dog
클래스는 Animal
클래스의 프로퍼티와 메서드를 사용할 수 있습니다. 또한 Dog
클래스는 bark
메서드를 추가로 가지고 있습니다.
재정의 (Override)
상속받은 메서드나 프로퍼티의 동작을 변경하고 싶을 경우, 자식 클래스에서 해당 메서드나 프로퍼티를 재정의할 수 있습니다. 이를 재정의(Override)라고 합니다.
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("Animal is making a sound")
}
}
class Dog: Animal {
override func makeSound() {
print("\(name) is barking")
}
}
위의 예시에서 Dog
클래스는 Animal
클래스의 makeSound
메서드를 재정의하여 동작을 변경하였습니다.