프로토콜, 확장

냐옹·2024년 7월 11일
0

IOS

목록 보기
11/32

본 작성글은 swift 공식 문서를 참고하였습니다.

프로토콜과 확장

  • 프로토콜 선언을 위해서 protocol 키워드를 사용한다.
protocol ExampleProtocol{
	var simpleDescription : String { get }
  	
  	mutating func adjust()
}
  • 클래스, 열거형, 그리고 구조체는 프로토콜을 채택할 수 있습니다.
class SimpleClass : ExampleProtocol{
	var simpleDescription : String = "A very simple class."
  	var anotherProperty : Int = 69105
  
  	func adjust(){
    // mutating 키워드가 필요하지 않다. 
    	simpleDescription += "	Now 100% adjusted."
    }
}

var a = SimpleClass()
a.adjust()

let aDescription = a.simpleDescription

struct SimpleStructure : ExampleProtocol{
	var simpleDescription : String = "A simple structure"
  
  	mutating func adjust(){
    	simpleDescription += "	(adjusted)"
    }
}

var b = SimpleStructure()
b.adjust()

let bDescription = b.simpleDescription
  • 클래스의 메서드는 항상 클래스를 수정할 수 있으므로, SimpleClass의 선언에는 mutating으로 표시된 메서드가 필요하지 않다.

  • 새로운 메서드와 계산된 프로퍼티가 같이 존재하는 타입에 기능을 추가하려면 확장 extension을 사용한다.

  • 확장 extension을 사용하여 다른 곳에 선언된 타입또는 라이브러리프레임워크에서 가져온 타입에 프로토콜 준수를 추가할 수 있다.

extension Int : ExampleProtocol{
	var simpleDescription : String {
    	return "The number \(self)"
    }
  	mutating func adjust(){
    	self += 42
    }
}

print(7.simpleDescription)
// Prints "The number 7"
  • 다른 명명된 타입처럼 프로토콜 이름을 사용할 수 있다. 예를 들어서 타입이 다르지만 모두 단일 프로토콜을 준수하는 객체의 콜렉션을 생성할 수 있다.
  • 타입이 박스형 프로토콜 타입인 값으로 동작하는 경우 프로토콜 정의 외부의 메서드를 사용할 수 없다.
extension Int : ExampleProtocol{
	var simpleDescription : String {
    	return "The number \(self)"
    }
  
  	mutating func adjust(){
    	self += 42
    }
  
  	print(7.simpleDescription)
  
  	// Prints "The number 7"
}

0개의 댓글