Swift

Swift - Extension (확장)

iosos 2023. 8. 24. 17:16

Extension (확장)

- 기존의 클래스, 구조체, 열거형 또는 프로토콜의 기능을 확장하거나 추가할 수 있는 기능

- 기존 타입의 코드를 수정하지 않고도 새로운 기능을 추가하거나 수정 가능

- 소스 코드의 모듈성을 높이고 코드의 재사용성과 가독성을 향상 시키는 방법 

 

 

1. 새로운 계산 프로퍼티 추가

- Extension은 저장 프로퍼티는 추가할 수 없으며 오로지 '연산 프로퍼티'만 추가 가능

- extension은 저장 프로퍼티 추가 불가능

 

import UIKit

extension Int {
    var squared : Int {
        return self * self
    }
}

let num = 10
print(num.squared) // 100

- extension을 사용하여 기존 타입에 계산 프로퍼티 추가 가능 

 

 

 

2. 새로운 메서드 추가

- 기존 타입에 새로운 메서드를 추가하여 기능을 확장할 수 있음

extension String {
    func greet(){
        print("Hello, \(self)")
    }
}

let swift = "Swift"
print(swift.greet()) // Hello, Swift

 

 

 

3. 이니셜라이저 추가

- 새로운 이니셜라이저를 추가하여 초기화 과정을 확장할 수 있음

extension Int {
    init?(value : String){
        self.init(value)
    }
}

let stringValue = "42"
print(type(of: stringValue))            // String

let intValue = Int(value: stringValue)   // 42
print(type(of: intValue))                // Optional<Int>

- String 타입의 값을 Int 타입으로 변환하기 위한 Extension을 사용

 

 

 

4. 코드 가독성 높이기

- 하나의 ViewController에서 TableViewDataSource, CollectionViewDataSource를 채택한다면 구현해야 하는 필수 메서드가 많아 복잡해짐

class ViewController: UIViewController, UITableViewDataSource, UICollectionViewDataSource {
 
    override func viewDidLoad() {
    }
 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    }
 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    }
 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    }
 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    }
}

 

 

- Extension 활용하여 보다 가독성 있게 정리 가능 

class ViewController: UIViewController {
    override func viewDidLoad() {
    }
}
 
extension ViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    }
 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    }
}
 
extension ViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    }
 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    }
}

 

 

 

참고) https://babbab2.tistory.com/124

'Swift' 카테고리의 다른 글

Swift - Dictionary  (0) 2023.09.02
Swift - HIG (Human Interface Guide)  (0) 2023.08.28
Swift - Class, Struct, Enum  (0) 2023.08.23
Swift - mutating  (0) 2023.08.22
Swift - DispatchQueue  (0) 2023.08.22