[Swift] 구조체와 클래스 - 메서드

민니·2022년 7월 5일
0

Swift 문법

목록 보기
9/17

메서드(Method) ❓

  • 일종의 함수
  • 클래스나 구조체, 열거형과 같은 객체 내에서 함수가 선언될 경우
  • 인스턴스 메서드와 타입 메서드로 구분됨

인스턴스 메서드 ❓

  • 인스턴스에 소속된 함수
    인스턴스 프로퍼티에 접근하거나 수정하는 방법 제공
  • 다른 인스턴스 메서드나 프로퍼티에 접근할 수 있는 권한 o
  • 인스턴스를 생성한 후에 호출 가능

Example

struct Resolution {
	var width = 0
    var height = 0
    
    func desc() -> String {
    	let desc = "이 해상도는 가로 \(self.width) X \(self.height) 로 구성됩니다."
        return desc
    }
}

📚 desc(): 인스턴스 메서드
📚 self: 클래스나 구조체 인스턴스에 속한다라는 것을 의미
📚 self를 생략할 수도 있지만, 프로퍼티와 일반 변수의 이름이 충돌할 경우에는 반드시 프로퍼티 앞에는 붙여줄 것


mutating 키워드

구조체나 열거형의 인스턴스 메서드 내부에서 프로퍼티 값을 수정할 때는 반드시 메서드의 앞에 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 키워드도 활용 가능
  • 타입 메서드는 객체 타입 전체에 영향을 미침
  • 타입 메서드 자체에 인스턴스가 존재하지 않으므로, 인스턴스 프로퍼티를 참조 ❌

Example

class Foo {
    //타입 메서드 선언
    class func fooTypeMethod() {
        //타입 메서드 구현
    }
}

let f = Foo()
f.fooTypeMethod() //error
Foo.fooTypeMethod()

📚 타입 메서드는 인스턴스를 생성하지 않고 객체 타입 자체에서 호출한다.








출처)
꼼꼼한 재은씨의 스위프트: 문법편

0개의 댓글