티스토리 뷰

Swift

[Swift] 메서드

Hani_Levenshtein 2021. 1. 13. 02:43

클래스는 어떤 객체를 만들기 위해 프로퍼티와 메서드를 정의해놓은 틀입니다.

상속은 한 클래스에 정의된 프로퍼티와 메서드를 물려받는 것을 말합니다.

스위프트에서 상속이 가능한 것은 클래스와 프로토콜이며, 이번 포스팅에서는 클래스의 상속에 대하여 알아볼 것입니다.


class SuperClass(){
    func v(){} // 인스턴스 메서드
    final func w(){} // 인스턴스 메서드.. 재정의 불가
    
    class func y(){} // 타입 메서드
    final class func z(){} // 타입 메서드.. 재정의 불가
    
    static func x(){} // 타입 메서드.. 재정의 불가
}

class SubClass: SuperClass {
	override func v(){}
	override class func y(){}
}

var firstInstance=SubClass()
firstInstance.v() //인스턴스 메서드
firstInstance.w() //인스턴스 메서드
SubClass.x() // 타입 메서드
SubClass.y() // 타입 메서드
SuperClass.z() // 타입 메서드

인스턴스 메서드는 메서드 앞에 static이나 class가 붙어있지 않습니다.

클래스 내의 인스턴스 메서드를 사용하기 위해선 반드시 해당 클래스의 인스턴스를 먼저 생성해야 합니다.

 

타입 메서드는 메서드 앞에 static이나 class가 붙어있습니다.

class가 붙은 타입 메서드는 subclass에서 override를 통한 재정의가 가능합니다.

 

final은 재정의가 불가능한 메서드임을 명시하는 키워드인데, 인스턴스 메서드와 타입 메서드 앞에 붙을 수 있습니다.

재정의가 불가능한 타입 메서드인 final class를 짧게 static이라고 쓸 수 있습니다.

 

따라서 재정의가 (가능한/불가능한) (타입/인스턴스) 메서드, 총 4가지의 메서드로 나눌 수 있습니다.


인스턴스 메서드의 mutating

struct Volune { 
     var x: Int = 0, y: Int = 0, z: Int = 0 
     mutating func bigger(){ 
     	self.x = x + 1 
     	self.y = y + 1
     	self.z = z + 1
        //self = Volume(x:x+1,y:y+1,z:z+1)
    } 
 }  
var cube = Volune()
cube.bigger()

참조 타입인 클래스와는 달리 구조체나 열거형은 값 타입입니다.

일반적인 인스턴스 메소드 내에서는 값 타입의 프로퍼티를 변경할 수 없지만 mutating 키워드를 사용하면 가능합니다.

 

물론 구조체의 인스턴스를 상수 let에 담는다면 프로퍼티는 mutating 메서드라도 변경할 수 없습니다.

'Swift' 카테고리의 다른 글

[Swift] 인스턴스  (0) 2021.01.16
[Swift] 프로퍼티의 종류  (0) 2021.01.13
[Swift] 옵셔널  (0) 2021.01.12
[Swift] 클래스와 구조체  (0) 2021.01.10
[Swift] 객체 지향 프로그래밍  (0) 2021.01.09
댓글