VesselWheel

클래스와 프로토콜 본문

Grammary in Swift

클래스와 프로토콜

JasonYang 2024. 3. 18. 09:35

클래스란? 

프로그램 코드의 구성요소가 되는 범용의 유연한 구조로,

구조체와 달리 참조타입으로 같은 인스턴스를 사용하며, 값을 저장하는 프로퍼티와 기능을 제공하는 메서드로 구성되어 있다. 

클래스의 프로퍼티에 기본값이 없는 경우, 초기화를 해주어야한다. 

1. 클래스 정의

class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

2. 인스턴스 생성

let someVideoMode = VideoMode()

3. 프로퍼티에 접근하기 위해서는 점 구문을 사용한다. 

someVideoMode.resolution.width = 1280

 

4. 즉, 동일한 인스턴스를 활용하거나 동일한 기능을 활용할 때 클래스가 사용된다. 

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

 

5. weatherKit이나 healthKit 처럼 apple에서 제공하는 Kit들은 파이널 클래스로 정의하였기 때문에, 해당 Kit에 포함된 인스턴스나 매서드를 사용할 수 있는 이유이다. 

https://bbiguduk.gitbook.io/swift/language-guide-1/structures-and-classes

 

구조체와 클래스 (Structures and Classes) | Swift

데이터를 캡슐화하는 사용자 정의 타입을 모델링합니다. 구조체 (Structures) 와 클래스 (classes) 는 프로그램 코드의 구성 요소가 되는 범용의 유연한 구조입니다. 상수, 변수, 그리고 함수를 정의하

bbiguduk.gitbook.io


프로토콜이란? 

준수해야하는 타입이 구현해야하는 요구사항을 정의한 것이다. 

앞서 언급했던, 클래스, 구조체를 포함하여, 그리고 열거형은 프로토콜로 정의된 규약을 따라야 한다. 

1. 프로토콜 정의 

protocol SomeProtocol {
    // protocol definition goes here
}

 

2. 프로토콜 채택

struct SomeStructure: SomeProtocol, AnotherProtocol {
    // structure definition goes here
}

3. 프로토콜의 사용 

- 델리게이트 패턴을 사용해서 데이터를 주고 받을 때, 프로토콜에서 정의한 매소드를 활용할 수 있다. 

데이터를 전송하는 곳에서 프로토콜과 위임자을 선언하고

protocol PauseRunningHalfModalViewControllerDelegate: AnyObject {
    func didDismissPauseRunningHalfModalViewController()
}

 

weak var delegate: PauseRunningHalfModalViewControllerDelegate?

 

데이터를 전송받고자 하는 곳에서 프로토콜을 채택한다. 

class RunningTimerViewController: UIViewController, PauseRunningHalfModalViewControllerDelegate {

데이터를 전송받고자 하는 곳에서는 프로토콜에서 선언된 매소드나 프로퍼티를 따라야 한다.

    func didDismissPauseRunningHalfModalViewController() {
        runningTimer.restart()
        
    }

https://bbiguduk.gitbook.io/swift/language-guide-1/protocols

 

프로토콜 (Protocols) | Swift

준수하는 타입이 구현해야 하는 요구사항을 정의합니다. 프로토콜 (protocol) 은 메서드, 프로퍼티, 그리고 특정 작업이나 기능의 부분이 적합한 다른 요구사항의 청사진을 정의합니다. 프로토콜

bbiguduk.gitbook.io