- 일종의 함수
- 클래스나 구조체, 열거형과 같은 객체 내에서 함수가 선언될 경우
- 인스턴스 메서드와 타입 메서드로 구분됨
- 인스턴스에 소속된 함수
인스턴스 프로퍼티에 접근하거나 수정하는 방법 제공- 다른 인스턴스 메서드나 프로퍼티에 접근할 수 있는 권한 o
- 인스턴스를 생성한 후에 호출 가능
struct Resolution {
var width = 0
var height = 0
func desc() -> String {
let desc = "이 해상도는 가로 \(self.width) X \(self.height) 로 구성됩니다."
return desc
}
}
📚 desc()
: 인스턴스 메서드
📚 self
: 클래스나 구조체 인스턴스에 속한다라는 것을 의미
📚 self
를 생략할 수도 있지만, 프로퍼티와 일반 변수의 이름이 충돌할 경우에는 반드시 프로퍼티 앞에는 붙여줄 것
구조체나 열거형의 인스턴스 메서드 내부에서 프로퍼티 값을 수정할 때는 반드시 메서드의 앞에 mutating 키워드 필요
struct Point {
var x = 0.0
var y = 0.0
mutating func moveByX(x deltaX: Double, y deltaY: Double) {
self.x += deltaX
self.y += deltaY
}
}
var point = Point(x: 10.5, y: 12.5)
point.moveByX(x: 3.0, y: 4.5)
print("이제 새로운 좌표는 (\(point.x), \(point.y))입니다.")
//이제 새로운 좌표는 (13.5, 17.0)입니다.
📚 mutating
키워드를 이용하여 프로퍼티 값을 수정할 수 있다.
📚 mutating
키워드 사용 안 할 시,
class Counter {
var count = 0
func increment() {
self.count += 1
}
func incrementBy(amount: Int) {
self.count += amount
}
func reset() {
self.count = 0
}
}
📚 클래스의 경우 프로퍼티를 수정할때 별도의 키워드가 필요하지 않음
- 인스턴스를 생성하지 않고 객체 타입 자체에서 호출 가능
- 타입 메서드 선언 시 static 키워드 활용
- 클래스 타입에서는 class 키워드도 활용 가능
- 타입 메서드는 객체 타입 전체에 영향을 미침
- 타입 메서드 자체에 인스턴스가 존재하지 않으므로, 인스턴스 프로퍼티를 참조 ❌
class Foo {
//타입 메서드 선언
class func fooTypeMethod() {
//타입 메서드 구현
}
}
let f = Foo()
f.fooTypeMethod() //error
Foo.fooTypeMethod()
📚 타입 메서드는 인스턴스를 생성하지 않고 객체 타입 자체에서 호출한다.
출처)
꼼꼼한 재은씨의 스위프트: 문법편