메서드(Methods)
- 타입과 연관된 함수
- 타입의 인스턴스 동작을 위한 특정 작업과 기능을 캡슐화하는 인스턴스 메서드를 정의할 수 있다
- 타입 자체와 연관된 타입 메서드를 정의할 수도 있다
인스턴스 메서드 (Instance Methods)
- 인스턴스 메서드 (Instance methods) 는 특정 클래스, 구조체, 또는 열거형의 인스턴스에 속하는 함수
- 인스턴스 프로퍼티에 접근하고 수정하는 방법을 제공하거나 인스턴스의 목적과 관련된 기능을 제공
- 인스턴스 메서드는 함수 (Functions) 에서 설명한 대로 함수 구문과 완벽하게 동일
- 인스턴스 메서드는 다른 인스턴스 메서드와 타입의 프로퍼티에 암시적으로 접근할 수 있습니다
- 인스턴스 메서드는 자신이 속한 타입의 특정 인스턴스에서만 호출될 수 있습니다. 기존 인스턴스 없이는 호출할 수 없다.
class Counter {
var count = 0
func increment() {
count += 1
}
func increment(by amount: Int) {
count += amount
}
func reset() {
count = 0
}
}
let counter = Counter()
counter.increment()
counter.increment(by: 5)
counter.reset()
인스턴스 메서드 내에서 값 타입 수정 (Modifying Value Types from Within Instance Methods)
- 기본적으로 값 타입의 프로퍼티는 인스턴스 메서드 내에서 수정x
func
키워드 전에 mutating
키워드를 사용하면 암시적으로 self 프로퍼티에 새로운 인스턴스를 할당하고 새로운 인스턴스는 메서드가 종료되면 기존에 존재하던 인스턴스를 대체
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("(\(somePoint.x), \(somePoint.y))")
타입 메서드(Type Methods)
- 타입 자체에서 호출되는 메서드, 이런 종류의 메서드를 타입 메서드 (type methods) 라고 한다
- 메서드의
func
키워드 전에 static
키워드를 작성하여 타입 메서드를 나타냄
- 클래스는 대신
class
키워드를 사용하여 하위 클래스가 해당 메서드의 수퍼 클래스 구현을 재정의 할 수 있다
- 타입 메서드는 인스턴스 메서드처럼 점 구문으로 호출
class SomeClass {
class func someTypeMethod() {
}
}
SomeClass.someTypeMethod()