1. 인스턴스 메소드

인스턴스를 생성해야 호출 할 수 있는 메소드

self

인스턴스 자기자신을 가르킴

struct Point{
    var x=0.0, 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.0)
point.moveByX(x: 3.0, y: 4.5)

class Location{
    var x = 0.0
    var y = 0.0
    func moveByX(x deltaX:Double, y deltaY:Double){
        self.x += deltaX
        self.y += deltaY
    }
}

var loc = Location()
loc.x = 10.5
loc.y = 12.0
loc.moveByX(x: 3.0, y: 4.5)

구조체는 mutating 키워드를 사용해야 프로퍼티 수정가능함

2. 타입 메소드

인스턴스를 생성하지 않고 호출 가능한 메소드

class Foo{
	//타입 메소드 선언
	class func fooTypeMethod(){}
}

Foo.fooTypeMethod()

타입 메소드를 사용할 경우 만들어진 인스턴스들이 참조하고 있는 값들이 변경됨을 주의하자

타입 메소드는 인스턴스 프로퍼티를 참조할 수없음 ⇒ 인스턴스 생성 전에 호출되기 때문에 당연함