-
Swift 5.6 Methods기술/iOS 2022. 3. 20. 17:46
Methods
Instane Methods
인스턴스 메서드는 특정 클래스, 구조체, 열거형의 인스턴스에 속하는 함수입니다. 인스턴스 프로퍼티에 접근하고 수정하는 방법을 제공하거나 인스턴스의 목적과 관련된 기능을 제공합니다.
The self Property
타입의 모든 인스턴스는 인스턴스 자체와 정확히 일치하는 self 라는 암시적 프로퍼티를 가지고 있습니다. 자체 인스턴스 메서드 내에서 현재 인스턴스를 참조하기 위해 self 프로퍼티를 사용합니다.
실제로 코드에서 self 를 꼭 작성할 필요는 없습니다. self 를 명시적으로 작성하지 않으면 Swift 는 메서드 내에서 이미 알고 있는 프로퍼티 또는 메서드 이름을 사용할 때마다 현재 인스턴스의 프로퍼티 또는 메서드를 참조한다고 가정합니다.
이 규칙의 주요 예외사항은 인스턴스 메서드에 파라미터 명이 그 인스턴스에 프로퍼티명과 동일할 때 발생합니다. 이러한 경우 파라미터 명이 더 우선시되고 프로퍼티를 참조하려면 self 를 사용해야 합니다.
Modifying Value Types from Within Instance Methods
구조체와 열거형은 값 타입입니다. 기본적으로 값 타입의 프로퍼티는 인스턴스 메서드 내에서 수정될 수 없습니다.
그러나 특정 메서드 내에서 구조체나 열거형의 프로퍼티 수정이 필요하다면 해당 메서드에 대한 동작을 변경하도록 선택할 수 있습니다. 그러면 이 메서드는 메서드 내에서 프로퍼티를 변경할 수 있고 메서드가 끝나면 기존 구조체에 변경사항이 적용됩니다. 이 메서드는 암시적 self 프로퍼티에 새로운 인스턴스를 할당하고 새로운 인스턴스는 메서드가 종료되면 기존에 존재하던 인스턴스를 대체하게 됩니다.
mutating 키워드를 사용하여 작성할 수 있습니다.
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("The point is now at (\\(somePoint.x), \\(somePoint.y))") // Prints "The point is now at (3.0, 4.0)"
Assigning to self Within a Mutating Method
변경 메서드는 암시적으로 self 프로퍼티를 완전히 새로운 인스턴스로 할당할 수 있습니다.
struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x deltaX: Double, y deltaY: Double) { self = Point(x: x + deltaX, y: y + deltaY) } }
열거형의 변경 메서드는 동일한 열거형에서 다른 케이스로 암시적 self 파라미터를 설정할 수 있습니다.
enum TriStateSwitch { case off, low, high mutating func next() { switch self { case .off: self = .low case .low: self = .high case .high: self = .off } } } var ovenLight = TriStateSwitch.low ovenLight.next() // ovenLight is now equal to .high ovenLight.next() // ovenLight is now equal to .off
Type Methods
static 키워드를 작성하여 타입 메서드를 나타냅니다. 클래스는 대신 class 키워드를 사용하여 하위 클래스가 해당 메서드의 수퍼 클래스 구현을 재정의할 수 있습니다.
타입 메서드는 인스턴스가 아닌 타입으로 메서드를 호출합니다.
class SomeClass { class func someTypeMethod() { // type method implementation goes here } } SomeClass.someTypeMethod()
'기술 > iOS' 카테고리의 다른 글
Swift 5.6 Inheritance (0) 2022.03.20 Swift 5.6 Subscripts (0) 2022.03.20 Swift 5.6 Properties (0) 2022.03.20 Swift 5.6 Structures and Classes (0) 2022.03.20 Swift 5.6 Enumerations (0) 2022.03.20