브래의 슬기로운 코딩 생활
8 - extension, Swift 접근 제어 (access control, access modifier), 프로토콜(protocol)과 Delegate, 열거형 (enum) 본문
8 - extension, Swift 접근 제어 (access control, access modifier), 프로토콜(protocol)과 Delegate, 열거형 (enum)
김브래 2023. 12. 28. 19:07Human 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문에 멤버들 나열하는 것도 가능
enum Compass {
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("서")
}
열거형 예제
'2 - 겨울방학 > Swift 복습' 카테고리의 다른 글
10 - Xcode 사용법 (BMI 판정 앱) (0) | 2023.12.30 |
---|---|
9 - 옵셔널 체이닝(Optional Chaining), Generic, Array (0) | 2023.12.29 |
7 - 클래스 (class) (0) | 2023.12.28 |
6 - 1급 객체(first class object), 1급 시민(first class citizen), 클로저(Closure) (0) | 2023.12.28 |
5 - 함수와 메서드(method) (0) | 2023.12.27 |