https://youtu.be/R8OWOgCNt4M?si=bldau6gYEZ3seGj2
위 영상을 보고 정리한 글입니다. (29:14 ~ 34:03)
# 익스텐션
- 스위프트 클래스, 구조체, 열거형, protocol에 새로운 기능을 추가
- 익스텐션은 하위 클래스를 생성하거나 참조하지 않고 기존 클래스에 메서드, 생성자(initailizer), 계산 프로퍼티 등의 기능을 추가하기 위하여 사용
- 스위프트 언어의 built-in 클래스와 iOS 프레임워크에 내장된 클래스에 기능을 추가할 때 익스텐션을 이용하면 매우 효과적임
- 클래스(구조체, 열거형, protocol)는 다음과 같은 형태로 확장(익스텐션)됨
extension 기존타입이름 {
// 새로운 기능
}
- 표준 자료형 Double 구조체에 두 배의 값을 반환하는 프로퍼티를 추가
extension Double{
var squared : Double {
return self * self
}
}
- 이제는 Double형의 인스터스 myValue를 다음과 같이 사용할 수 있다.
let myValue: Double = 3.0
print(myValue.squared)
print(3.0.squared) // Double형 값에도 '.'으로 바로 사용 가능
- 출력값
9.0
9.0
# Swift의 access control
public class MyClass{
fileprivate var name : String = "Kim"
private func play(){}
func display(){}
}
모듈은 코드 배포(code distribution)의 단일 유닛
1. open 접근, public 접근
- 모듈의 모든 소스 파일 내에서 사용 가능
정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 사용 가능 - Framework에 공용 인터페이스를 지정할 때 사용
open 접근은 클래스 및 클래스 멤버에만 적용
2. internal 접근
- 해당 모듈의 모든 소스 파일 내에서 사용
해당 모듈 외부의 소스 파일에서는 사용 불가
App이나 Framework의 내부 구조를 정의할 때 사용
3. fileprivate 접근
- 해당 소스 파일 내에서만 사용 가능
4. private 접근
- 블록과 동일한 파일에 있는 해당 선언의 extension으로 제한
open class var blue : UIClolor { get }
- open : 모듈 외부까지(클래스에만 사용) 접근 가능
- class : 클래스 프로퍼티
- 읽기 쓰기 가능한 프로퍼티는 정의 뒤에 {get set}
- 읽기만 가능한 프로퍼티는 정의 뒤에 {get}
# 프로토콜(protocol)
특정 클래스와 관련없는 프로퍼티, 메서드 선언 집합
- 함수(메서드) 정의는 없음
- 기능이나 속성에 대한 설계도
- 클래스(구조체, 열거형)에서 채택(adopt)하여 메서드를 구현해야 함
Swift 상속과 프로토콜 채택
- 부모 클래스는 하나만 가능하며 여러 개라면 나머지는 프로토콜
- class 클래스명: 부모명, 프로토콜명 { }
부모가 있으면 부모 다음에 표기 - class 클래스명: 부모명, 프로토콜명1, 프로토콜명2 { }
- class 클래스명: 프로토콜명 { }
부모가 없으면 바로 표기 가능 - class 클래스명: 프로토콜명1, 프로토콜명2 { }
- 클래스, 구조체, 열거형에 프로토콜을 채택(adopt) 할 수 있다.
protocol 정의
protocol 프로토콜명 {
프로퍼티명
메서드 선언 // 메서드는 선언만 있음
}
protocol 프로토콜명 : 다른 프로토콜, 다른 프로토콜2 {
// 프로토콜은 다중 상속도 가능
}
프로토콜과 프로퍼티/메서드 선언
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 }
func run()
}
class Man : Runnable {
var x : Int = 1
func run(){ print("달린다~") }
}
- class Man에 x, run()정의 없다면
type 'Man' does not conform to protocol 'Runnable'
'iOS프로그래밍기초(Smile Han) > 문법 정리' 카테고리의 다른 글
[Swift] 문법 정리 - 클래스(class) vs 구조체(struct) vs 열거형(enum) (0) | 2024.11.24 |
---|---|
[Swift] 문법 정리 - 열거형(enum) (1) | 2024.11.17 |
[Swift] 문법 정리 - 상속 (3) | 2024.11.10 |
[Swift] 문법 정리 - 클래스 (0) | 2024.11.10 |
[Swift] 문법 정리 - 함수, 메서드(method) (1) | 2024.10.06 |