🔥 프로토콜의 변경 가능 메서드 요구사항

325자
5분

때로는 메서드가 자신이 속한 인스턴스를 수정(또는 변경)해야 할 필요가 있습니다. 값 타입(구조체와 열거형)의 인스턴스 메서드에서는 메서드가 자신이 속한 인스턴스와 해당 인스턴스의 속성을 수정할 수 있음을 나타내기 위해 mutating 키워드를 메서드의 func 키워드 앞에 배치합니다. 이 과정은 인스턴스 메서드에서 값 타입 수정하기에서 설명되어 있죠.

프로토콜을 채택하는 모든 타입의 인스턴스를 변경하려는 프로토콜 인스턴스 메서드 요구사항을 정의할 때는, 프로토콜 정의의 일부로 mutating 키워드로 메서드를 표시합니다. 이렇게 하면 구조체와 열거형이 해당 프로토콜을 채택하고 메서드 요구사항을 충족시킬 수 있게 됩니다.

아래 예제는 Togglable이라는 프로토콜을 정의하고 있는데, 이 프로토콜은 toggle이라는 단일 인스턴스 메서드 요구사항을 정의합니다. 이름에서 알 수 있듯이 toggle() 메서드는 일반적으로 해당 타입의 속성을 수정하여 준수하는 모든 타입의 상태를 토글하거나 반전시키는 역할을 합니다.

toggle() 메서드는 Togglable 프로토콜 정의의 일부로 mutating 키워드로 표시되어, 호출될 때 준수하는 인스턴스의 상태를 변경할 것으로 예상됩니다.

protocol Togglable {
    mutating func toggle() // 인스턴스 상태를 변경하는 메서드 요구사항
}
swift

구조체나 열거형에 Togglable 프로토콜을 구현하면, 해당 구조체나 열거형은 mutating으로 표시된 toggle() 메서드를 제공함으로써 프로토콜을 준수할 수 있습니다.

아래 예제는 OnOffSwitch라는 열거형을 정의합니다. 이 열거형은 onoff 열거형 케이스로 표시되는 두 가지 상태 사이를 토글합니다. 열거형의 toggle 구현은 Togglable 프로토콜의 요구사항과 일치하도록 mutating으로 표시되어 있죠.

enum OnOffSwitch: Togglable {
    case off, on // 두 가지 상태를 나타내는 열거형 케이스
 
    mutating func toggle() {
        switch self {
        case .off:
            self = .on // off에서 on으로 상태 변경
        case .on:
            self = .off // on에서 off로 상태 변경
        }
    }
}
 
var lightSwitch = OnOffSwitch.off // 초기 상태는 off
lightSwitch.toggle() // toggle() 메서드 호출
// lightSwitch는 이제 .on과 같음
swift

열거형 내부에서 self 값을 변경하기 위해 toggle() 메서드는 mutating으로 선언되어야 합니다. 이렇게 함으로써 OnOffSwitch 열거형은 Togglable 프로토콜을 준수할 수 있게 되죠.

변경 가능 메서드 요구사항을 통해 프로토콜은 준수하는 타입의 인스턴스를 변경하는 메서드를 정의할 수 있습니다. 이는 프로토콜 기반 프로그래밍에서 중요한 역할을 합니다.

lecture image

프로토콜의 변경 가능 메서드 요구사항을 잘 활용하면 더욱 유연하고 확장 가능한 코드를 작성할 수 있습니다. 프로토콜을 통해 타입의 동작을 정의하고, 해당 동작을 준수하는 타입을 만들어 보세요. 코드의 재사용성과 유지보수성이 크게 향상될 거예요!