大器晩成

[Extensions] 멤버의 확장(메서드) 본문

iOS/Swift 문법

[Extensions] 멤버의 확장(메서드)

zerobugpark 2024. 12. 23. 23:46

타입메서드의 확장

// 애플이 만든 타입메서드 예시
Int.random(in: 1...100)

extension Int {
    static func printNumbersFrom1to5() {
        for i in 1...5 {
            print(i)
        }
    }
}


// 항상 1부터 5까지를 출력
Int.printNumbersFrom1to5()

 

인스턴스 메서드의 확장

// Int타입에 특정 프린트 구문 확장해보기

extension String {
    func printHelloRepetitions(of times: Int) {
        for _ in 0..<times {
            print("Hello \(self)!")
        }
    }
}



"Zero".printHelloRepetitions(of: 4)
//Hello Zero!
//Hello Zero!
//Hello Zero!
//Hello Zero!

 

mutating 인스턴스 메서드의 확장

// 인스턴스 메소드는 익스텐션에서도 mutating 키워드를 사용하면 인스턴스 자신을 수정하도록 허용할 수 있다.

extension Int {
    mutating func square() {
        self = self * self
    }
}
var value = 3 // 3
value.square() //9
value //9

let value2 = 3
//value2.square() //let 키워드는 상수이기 때문에 오류 발생

// 변수에 할당하지 않고 리터럴에 대해 직접 메소드를 호출하는 경우도 에러
// 3.square() // 메모리에 저장되어 있지 않기 때문
  • 인스턴스 메서드는 익스텐션에서도 mutating 키워드를 사용하면 인스턴스 자신을 수정하도록 허용할 수 있습니다.
  • 구조체나 열거형에서 정의된 메서드가 자기 자신의 인스턴스를 수정하거나 프로퍼티를 변경해야 할 때 mutating 키워드를 사용하는데, 익스텐션이 구조체나 열거형을 확장의 대상으로 삼았을 때가 이에 해당합니다.
728x90

'iOS > Swift 문법' 카테고리의 다른 글

[Extensions] 멤버의 확장(서브 스크립트)  (0) 2025.01.05
[Extensions] 생성자의 확장  (0) 2024.12.26
[Extensions] 멤버의 확장 (계산 속성)  (0) 2024.12.23
[Extensions] 확장  (0) 2024.12.23
Any, AnyObject  (0) 2024.12.19