extension
Extensions — The Swift Programming Language (Swift 5.5)
- class, struct, enum, protocol에 새로운 기능을 추가
- extension은 하위 클래스를 생성하거나 참조하지 않고 기존 클래스에 메서드, 생성자(initializer), 계산 프로퍼티 등의 기능을 추가하기 위하여 사용
extension 기존타입이름 {
// 새로운 기능
}
extension Double {
var squared : Double { //계산 프로퍼티
return self * self
}
}
let myValue: Double = 3.0
print(myValue.squared) //출력 : 9.0
print(2.0.squared) //출력 : 4.0
Swift 접근 제어 (access control, access modifier)
access modifier(or access specifiers)
- 접근 속성(접근 수정자, 액세스 수정자, 액세스 지정자 )는 클래스, 메서드, 멤버의 접근 가능성을 설정하는 객체 지향 언어의 키워드
swift의 access control
- open 접근 및 public 접근을 통해 모듈의 모든 소스 파일 내에서 사용할 수 있으며, 정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 사용할 수 있다. 일반적으로 Framework에 공용 인터페이스를 지정할 때는 open 또는 public 접근을 사용한다.
* open 접근은 클래스 및 클래스 멤버에만 적용
- internal 접근은 해당 모듈의 모든 소스 파일 내에서 사용되지만, 해당 모듈 외부의 소스파일에서는 사용되지 않도록 한다. 일반적으로 App이나 Framework의 내부 구조를 정의할 때 internal 접근을 사용한다.
* 접근 제어를 생략하면 internal이 기본
- fileprivate 접근은 해당 소스 파일 내에서만 사용가능
- private접근은 블록과 동일한 파일에 있는 해당 선언의 extension으로 제한한다.
public class MyClass{
// 모듈의 모든 소스 파일 내에서 접근+정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 접근 가능
fileprivate var name : String = "Kim"
//현재 소스 파일 내에서만 사용 가능
private func play() {}
//현재 블럭 내에서만 사용 가능
func display(){} // internal 생략됨
//해당 모듈의 모든 소스 파일 내에서 사용
}
프로토콜(protocol)과 Delegate
프로토콜(protocol)
- 특정 클래스와 관련없는 함수(메서드)들의 선언 집합
- class 클래스명:부모명, 프로토콜명{}
- class 클래스명:부모명, 프로토콜명1,프로토콜명2 {}
- class 클래스명:프로토콜명{}
- class 클래스명:프로토콜명1, 프로토콜명2{}
- 클래스, 구조체(struct), 열거형(enum), extension에 프로토콜을 채택(adopt)할 수 있다.
* 기능과 값을 넣으면 안됨, 메서드는 선언만 있음
* 채택(adopt)시 준수(conform) 해야함
protocol 프로토콜명{
프로퍼티명
메서드 선언 //메서드는 선언만 있음
}
protocol 프로토콜명 : 부모1프로토콜, 부모2프로토콜{
// 프로토콜은 다중 상속도 가능
}
//EX)
protocol SomeProtocol {
var x: Int { get set } //읽기와 쓰기가 가능
//var y: Int { get } //읽기 전용
//static var tx: Int { get set }
func run() //메서드는 선언만 있음
//static func typeMethod()
//func random() -> Double
}
class SomeOne : SomeProtocol { //채택, adopt 시 전부 준수해야함
var x : Int = 1 //준수, conform
func run(){print("달린다~")} //준수, conform
}
let kim = SomeOne()
print(kim.x) // 출력 : 1
kim.run() // 출력 : 달린다
delegate
Protocols — The Swift Programming Language (Swift 5.5)
- 대리자, 조력자
열거형(enum)
- 관련있는 데이터들이 멤버로 구성되어 있는 자료형 객체
enum 열거형명{
열거형 정의
}
// EX)
enum Planet {
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
switch direction {
case .North:
print("북")
case .South:
print("남")
case .East:
print("동") // 출력 : 동
case .West:
print("서")
}
'잡다한지식 > iOS프로그래밍기초' 카테고리의 다른 글
Mac 환경 적응 (0) | 2021.10.31 |
---|---|
iOS 학습과정(7주차) - 과제,소스 (0) | 2021.10.13 |
iOS 학습과정(6주차) - 과제,소스 (0) | 2021.10.06 |
iOS 학습과정(6주차) - Swift 문법 (0) | 2021.10.05 |
iOS 학습과정(5주차) - Swift 문법 (0) | 2021.09.29 |