브래의 슬기로운 코딩 생활
extension, Swift 접근 제어 (access control, access modifier), 프로토콜(protocol)과 Delegate, 열거형 (enum) 본문
extension, Swift 접근 제어 (access control, access modifier), 프로토콜(protocol)과 Delegate, 열거형 (enum)
김브래 2023. 1. 23. 20:16Human Interface Guidelines
extension(익스텐션)
extension
extension 기존타입이름 {
// 새로운 기능
}
extension Double {
var squared : Double { //기존 Double형 구조체에 계산 프로퍼티 추가
return self * self
}
}
이제는 Double형의 인스턴스 myValue를 다음과 같이 사용할 수 있음
extension은 protocol 채택할 때 소스를 깔끔하게 분할하기 위해 많이 사용
- 아래처럼 소스를 작성하면 클래스가 너무 비대해짐
class ViewController: UIViewController, UIPickerViewDelegate,
UIPickerViewDataSource{}
- 클래스를 다음과 같이 나누면 소스가 깔끔하고 이해하기 쉬움
class ViewController: UIViewController{}
extension ViewController: UIPickerViewDelegate{}
extension ViewController: UIPickerViewDataSource{}
Swift 접근 제어 (access control, access modifier)
access modifier(or access specifiers)
Swift의 access control
public class MyClass{
// 모듈의 모든 소스 파일 내에서 접근 + 정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 접근 가능
fileprivate var name : String = "Kim"
//현재 소스 파일 내에서만 사용 가능
private func play() {}
//현재 블럭 내에서만 사용 가능
func display(){} //internal은 디폴트 속성으로 생략됨
//해당 모듈의 모든 소스 파일 내에서 사용
}
접근 제어
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}
접근 제어 예
프로토콜(protocol)과 Delegate
프로토콜(protocol)
protocol 정의
protocol 프로토콜명{
프로퍼티명
메서드 선언 //메서드는 선언만 있음
}
protocol 프로토콜명 : 부모1프로토콜, 부모2프로토콜{
// 프로토콜은 다중 상속도 가능
}
protocol과 프로퍼티/메서드 선언
protocol SomeProtocol {
var x: Int { get set } //읽기와 쓰기가 가능
var y: Int { get } //읽기 전용
static var tx: Int { get set }
static func typeMethod()
func random() -> Double
}
protocol 정의, 채택, 준수
protocol Runnable { //대리하고 싶은 함수 목록 작성
var x : Int {get set} //읽기와 쓰기 가능 프로퍼티,{get}은 읽기 전용
//property in protocol must have explicit { get } or { get set } specifier
func run() //메서드는 선언만 있음
}
class Man : Runnable { //채택, adopt
var x : Int = 1 //준수, conform
func run(){print("달린다~")} //준수, conform
}
delegate
Delegation
delegate
보통 프로토콜을 사용
열거형 (enum)
열거형(enum)
열거형 정의
열거형 정의
}
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
} //하나의 case문에 멤버들 나열하는 것도 가능
case North
case South
case East
case West
}
print(Compass.North) //열거형명.멤버, North
var direction = Compass.West
direction = .East //두번째 부터는 열거형명 생략 가능
print(direction, type(of:direction)) // East Compass
문맥에서 타입의 추론이 가능한 시점 (등호 좌변의 변수 타입이 확정적일 때)에는 열거형명 생략 가능
열거형 멤버별 기능 정의
enum Compass {
case North
case South
case East
case West
}
var direction : Compass
direction = .South
switch direction {
case .North:
print("북")
case .South:
print("남")
case .East:
print("동")
case .West:
print("서")
}
열거형 예제
'Class > Swift' 카테고리의 다른 글
Xcode 사용법 - 2 (BMI 판정 앱) (2) | 2023.01.25 |
---|---|
Xcode 사용법 - 1 (2) | 2023.01.24 |
클래스 - 2, failable initializer, 클래스(class) 상속 (2) | 2023.01.20 |
클래스 (class) - 1 (0) | 2023.01.13 |
1급 객체(first class object), 1급 시민(first class citizen), 클로저(Closure) (0) | 2023.01.12 |