λ°μν
* 2023λ Apple Developer Academy @ POSTECH μμ swift μ€ν°λλ₯Ό νλ©° 곡λΆν λ΄μ©μ λλ€
1. λ³μ/νλ‘νΌν°μ κ°λ
λ³μμ κ°λ
- νλ‘κ·Έλ¨μμ λ°μ΄ν°λ₯Ό μ μ₯νλ λ©λͺ¨λ¦¬ 곡κ°
- μ΄λ¦, ν, λ©λͺ¨λ¦¬ μ£Όμ, κ°, μμ λ±μΌλ‘ νΉμ±μ ꡬλΆμ§μ΄ λ³Ό μ μμ
var number1 : Int = 20
- μ΄λ¦ = λ³μλ₯Ό ꡬλΆνκΈ° μν΄ μ¬μ© ⇒ number1
- κ³ μ μ΄λ¦μ ‘μλ³μ’(Identifier)’λΌκ³ ν¨
- ν = νμ = λ°μ΄ν°μ μλ£ν ⇒ Int
- κ° = λ³μμ λ€μ΄κ°λ λ°μ΄ν° ⇒ 20
- μμ = λ³μκ° μ¬μ© κ°λ₯ν λ²μ
λ³μμ μμ
λ³μ
- λ³ν μ μλ κ°μ μ μ₯
- var λ³μλͺ : λ°μ΄ν° νμ = κ°
- λ°μ΄ν° νμ μ μλ΅ κ°λ₯
μμ
- λ³νμ§ μλ μΌμ ν κ°μ μ μ₯
- let μμλͺ : λ°μ΄ν° νμ = κ°
- λ°μ΄ν° νμ μλ΅ κ°λ₯
νλ‘νΌν°μ κ°λ
- ν΄λμ€(class), ꡬ쑰(structure), νΉμ μ΄κ±°ν(enumeration) λ±μ νΉμ μΈμ€ν΄μ€μ κ΄λ ¨λ κ°
- dot notation syntaxλ₯Ό μ¬μ©νμ¬ μ κ·Όνκ±°λ μμ ν μ μμ
class MyClass {
static var numberOfInstances = 0
init() {
MyClass.numberOfInstances += 1
}
static var currentNumberOfInstances: Int {
return numberOfInstances
}
}
let instance1 = MyClass()
let instance2 = MyClass()
print(MyClass.currentNumberOfInstances) // Output: 2
β λ³μμ νλ‘νΌν°μ μ°¨μ΄?
- μμ
- λ³μ: ν¨μμ κ°μ΄ νΉμ μ½λ λΈλ‘ μμμ μ¬μ©/μ μΈλ μ μμ
- νλ‘νΌν°: ν΄λΉ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ μ΄λ€ μ½λμ μν΄μλ μ κ·Ό/μμ λ μ μμ
- μ κ·Ό ν΅μ
- λ³μ: private, internal, publicκ³Ό κ°μ΄ μ΄λ λΆλΆμ μ½λκ° ν΄λΉ λ³μμ μ κ·Όν μ μλμ§ κ²°μ ν μ μμ
- νλ‘νΌν°: νλ‘νΌν° κ·Έ μμ²΄κ° μλλΌ νλ‘νΌν°μ κ΄λ ¨λ getter κ·Έλ¦¬κ³ /νΉμ setter λ©μλμ λν μ κ·Όμ ν΅μ νκΈ° μν΄ μ¬μ©
- μ΄κΈ°ν
- λ³μ: μ¬μ©νκΈ° μ μ 무쑰건 μ΄κΈ°νλμ΄μΌ ν¨
- νλ‘νΌν°
- μμ±μ(initializer)λ₯Ό ν΅ν΄μ μ΄κΈ° κ°μ μ΄κΈ°ν
- μ΄κΈ° κ°μ΄ μ 곡λμ§ μλλ€λ©΄ κΈ°λ³Έ κ°μ ν΅ν΄μ μλμ μΌλ‘ μ΄κΈ°ν
- μ©λ
- λ³μ: μ½λ λΈλ‘ μμμ μμ κ° νΉμ μ€κ° κ°μ λ΄κΈ° μν΄ μ¬μ©
- νλ‘νΌν°: νμ μ μΈμ€ν΄μ€μ κ΄λ ¨νμ¬ κ°μ μ μ₯νκ±°λ κ²μνκΈ° μν΄ μ¬μ©
2. λ³μ/νλ‘νΌν°μ μ’ λ₯
λ³μμ μ’ λ₯
- μμ/λ©λͺ¨λ¦¬ κΈ°μ€
- μ§μ λ³μ
- λΈλ‘(ex - ν¨μ)λ΄μμ μ μΈλμ΄ λΈλ‘ λ΄μμλ§ μ¬μ©ν μ μλ λ³μ
- μ²λ¦¬κ° λλ μ΄νμλ ν΄λΉ λ³μ μ΄μ© λΆκ°
- μμ νΉμ λ€λ₯Έ λΈλ‘μ κ°μ μ΄λ¦μ λ³μκ° μλλΌλ λ©λͺ¨λ¦¬ 곡κ°μ΄ λ€λ₯΄λ―λ‘ λ€λ₯Έ λ³μμ
- μ μ λ³μ
- νλ‘κ·Έλ¨ λ΄ μ 체μμ μ¬μ© κ°λ₯ν λ³μ
- λ§€κ° λ³μ
- λ€λ₯Έ λΈλ‘μ μ λ¬λλ λ³μ
- λ³μμ μ μ₯λμ΄μλ κ° λΏλ§ μλλΌ, ν΄λΉ λ©λͺ¨λ¦¬ κ³΅κ° μ체λ₯Ό νμ©νκΈ° μνμ¬ λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμκ°μ μ΄μ© (ν¬μΈν°)
- μ§μ λ³μ
- νμ κΈ°μ€
μ’ λ₯ | μ€λͺ |
μ«μν λ³μ (Numeric variables) | - μ μ, λΆλμμμ μ«μ λ±μ μ«μ λ°μ΄ν°λ₯Ό μ μ₯νλ λ³μ - Int , Float , Double λ± |
λ¬Έμν λ³μ (Character variables) | - λ¨μΌ λ¬Έμ λ°μ΄ν°λ₯Ό μ μ₯νλ λ³μ - Character |
λ¬Έμμ΄ λ³μ (String variables) | - λ¬Έμμ΄ λ°μ΄ν°λ₯Ό μ μ₯νλ λ³μ - String |
λΆλ¦¬μΈ λ³μ (Boolean variables) | - λ
Όλ¦¬κ°( true λλ false )μ μ μ₯νλ λ³μ - Bool |
λ°°μ΄ λ³μ (Array variables) | - μ¬λ¬ κ°μ λ°μ΄ν°λ₯Ό μμ°¨μ μΌλ‘ μ μ₯νλ λ³μ - Array |
ꡬ쑰체 λ³μ (Struct variables) | - μλ‘ λ€λ₯Έ λ°μ΄ν° νμ
μ μ‘°ν©νμ¬ μλ‘μ΄ λ°μ΄ν° νμ
μ λ§λλ λ° μ¬μ©λλ λ³μ - struct |
μ΄κ±°ν λ³μ (Enum variables) | - μλ‘ λ€λ₯Έ μ νμ κ°μ κ°μ§ λ°μ΄ν°λ₯Ό νλλ‘ λ¬Άλ λ° μ¬μ©λλ λ³μ - enum |
μ΅μ λ λ³μ (Optional variables) | - κ°μ΄ μμ μ μλ λ°μ΄ν°λ₯Ό λνλ΄λ λ³μ - Optional |
νλ‘νΌν°μ μ’ λ₯
μ μ₯ νλ‘νΌν° (Stored Property)
struct Person {
var name: String
var age: Int
}
var john = Person(name: "John", age: 30)
print(john.age) // Output: 30
- μΈμ€ν΄μ€ λ³μμ μμ
- κ°μ μ μ₯ν λ μ¬μ©
- μ΄κΈ°κ°μ μ€μ ν μ μκ³ , ν΄λμ€ κ΅¬μ‘°μ²΄μμλ μΈμ€ν΄μ€μ μ°κ΄λ κ°μ μ μ₯ν¨.
- ꡬ쑰체, ν΄λμ€μμλ§ μ¬μ© κ°λ₯
- μ§μ° μ μ₯ νλ‘νΌν°: lazy var
class Position {
lazy var point: CoordinatePoint = CoordinatePoint()
}
- νΈμΆ λκΈ° μ μ κ° μ΄κΈ°νX
- λΆνμν μ±λ₯ μ ν, λ©λͺ¨λ¦¬ μ¬μ© κ°μ
- ν΄λμ€ κ΅¬μ‘°μ²΄μλ§ μ¬μ© κ°λ₯
- lazy ν€μλλ₯Ό μ μΈ μμ μμ±ν΄μ μ¬μ©ν¨.
- μμ(let)μλ μ¬μ© κΈμ§ → μμλ μΈμ€ν΄μ€κ° μμ ν μμ±λκΈ° μ μ μ΄κΈ°ν ν΄μΌνλ―λ‘ μ΄μΈλ¦¬μ§ μμ
μ°μ° νλ‘νΌν° (Computed Property)
struct Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height
}
}
var rect = Rectangle(width: 5.0, height: 10.0)
print(rect.area) // Output: 50.0
- μ€μ λ‘ κ°μ μ μ₯νμ§λ μκ³ , getκ³Ό set ν€μλλ‘ κ°μ κ°μ μ μΌλ‘ μ€μ νκ±°λ λ°λ νλ‘νΌν°
- μΌλ°μ μΌλ‘ λ€λ₯Έ μ°μ°μ΄λ λ€λ₯Έ νλ‘νΌν°λ₯Ό κΈ°λ°μΌλ‘ κ°μ μ»μ΄λ΄κΈ° μν΄ μ¬μ©
- ν΄λμ€ κ΅¬μ‘°μ²΄ μ΄κ±°νμλ μ¬μ©
- getter
struct Circle {
var radius: Double
var area: Double {
get {
return Double.pi * radius * radius
}
}
}
var circle = Circle(radius: 5.0)
print(circle.area) // Output: 78.53981633974483
- μΈμ€ν΄μ€ λ΄λΆ, μΈλΆμ κ°μ μ°μ°νμ¬ μ μ ν κ°μ λλ €μ£Όλ μν
- μ°μ°λ κ°μ μ μ₯ν νλ‘νΌν°κ° μμ΄μΌ ν¨(νμλ μλμ§λ§ μΌλ°μ )
- setter
class Car {
private var _fuelLevel: Double = 0.0
var fuelLevel: Double {
get {
return _fuelLevel
}
set {
_fuelLevel = min(max(0.0, newValue), 1.0)
}
}
}
var car = Car()
car.fuelLevel = 0.5 // call the setter method
print(car.fuelLevel) // Output: 0.5
- νλ‘νΌν° κ°μ κ°μ μ μΌλ‘ μ€μ νλ μν (λ΄λΆκ° μλνλ κ²½μ° μ μ©)
- μλν: μΈλΆμμ κ°μ²΄ λ΄λΆμ μ κ·Ό/μμ κΆνμ λ§μ κ²
- λ§€κ°λ³μ μ΄λ¦μ μλ΅ νλ©΄ newValueλ₯Ό ν΅ν΄ μ κ·Ό κ°λ₯
νμ νλ‘νΌν° (Type Property)
struct AudioChannel {
static let level = 10
static var maxLevel = 0
}
print(AudioChannel.level)
print(AudioChannel.maxLevel)
- μΈμ€ν΄μ€μ μμ±μ΄ μλ, νμ μ λ°λ₯Έ μμ±μ μ μν μ μμ
- μΈμ€ν΄μ€κ° μλλΌ, νΉμ νμ μμ μ¬μ©ν¨
- λ°λΌμ νμ μ체μ μνλ νλ‘νΌν°μ΄λ©°, κ°μ΄ κ³ μ ν¨
- λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅μΌλ‘ μ¬μ©νλ κ°μ μ¬μ©
- μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν° λͺ¨λ μ¬μ© κ°λ₯
- static ν€μλλ₯Ό μ¬μ©ν΄μ κ° νμ μμ νμ νλ‘νΌν°λ₯Ό μ€μ ν μ μμ
- class ν€μλλ₯Ό μ¬μ©ν΄μ ν΄λμ€ νμ μμ νμ νλ‘νΌν°λ₯Ό μ€μ ν μ μμ
- κ°μ κ°μ Έμ¬λλ ν΄λμ€μ μ΄λ¦μ ν΅ν΄μ κ°μ Έμ¬ μ μμ
νλ‘νΌν° μ΅μ λ² (Property Observer)
class Account {
var credit: Int = 0 {
willSet {
print("μμ‘μ΄ \\(credit)μμ \\(newValue)μμΌλ‘ λ³κ²½λ μμ μ
λλ€.")
}
didSet {
print("μμ‘μ΄ \\(oldValue)μμ \\(credit)μμΌλ‘ λ³κ²½λμμ΅λλ€.")
}
}
}
let myAccount = Account()
myAccount.credit = 1000
- νλ‘νΌν°μ κ°μ΄ λ³κ²½ λ λ μ§μ λ μ½λλ₯Ό μ€ν
- νλ‘νΌν° μ΅μ λ²λ₯Ό μ¬μ©νλ €λ©΄, κ°μ΄ λ°λμ μ΄κΈ°νλμ΄μμ΄μΌ ν¨
- νμ¬μ κ°μ κ°μ ν λΉνλλΌλ νλ‘νΌν° μ΅μ λ²λ νΈμΆλ¨
- Lazy νλ‘νΌν°μλ μ¬μ©λ μ μκ³ , μ μ₯ νλ‘νΌν°μμλ§ μ¬μ© κ°λ₯
- μ°μ° νλ‘νΌν°μλ μ¬μ© λΆκ°λ₯
- νμ§λ§ μμλ°μ μ°μ° νλ‘νΌν°μλ overrideλ₯Ό ν΅ν΄ μ¬μ© κ°λ₯νλ€. μ¦, λΆλͺ¨ ν΄λμ€μ μ°μ°νλ‘νΌν°κ° μλ€. μ¬κΈ°μλ νλ‘νΌν° μ΅μ λ²λ₯Ό μ¬μ© λͺ»νμ§λ§, μμλ°μ μμν΄λμ€μμλ μ΄ νλ‘νΌν°λ₯Ό override νμ¬ νλ‘νΌν° μ΅μ λ²λ₯Ό μ μνμ¬ μ¬μ©ν μ μλ€.
- Propertyμ κ°μ΄ λ³κ²½λκΈ° μ§μ μ willSetμ΄ νΈμΆλκ³ , λ³κ²½λ μ§νμλ didSetμ΄ νΈμΆλ¨
- willSetμμλ newValueκ°, didSetμμλ oldValueκ° μλμΌλ‘ μ λ¬λ¨
3. λ³μ/νλ‘νΌν°μ μν
λ³μμ μν
- λ°μ΄ν° μ μ₯
- λ³μλ λ©λͺ¨λ¦¬μ λ°μ΄ν°λ₯Ό μ μ₯
- ex-μ¬μ©μμ μ΄λ¦, λμ΄, μ νλ²νΈ λ±
- λ°μ΄ν° μ‘°μ
- λ³μλ μ μ₯λ λ°μ΄ν°λ₯Ό μ½κ±°λ μμ
- ex-μ¬μ©μμ λμ΄λ₯Ό μ¦κ°μν€κ±°λ μ νλ²νΈλ₯Ό λ³κ²½
- λ°μ΄ν° μ λ¬
- λ³μλ νλ‘κ·Έλ¨ λ΄μμ λ°μ΄ν°λ₯Ό μ λ¬νλ λ° μ¬μ©
- ex-ν ν¨μμμ λ€λ₯Έ ν¨μλ‘ λ°μ΄ν°λ₯Ό μ λ¬νκ±°λ λ·° 컨νΈλ‘€λ¬μμ λ·°λ‘ λ°μ΄ν°λ₯Ό μ λ¬
- μ½λμ μ¬μ¬μ©
- λ³μλ κ°μ μ μ₯νκ³ λ€μ μ¬μ©ν μ μμΌλ―λ‘ μ½λμ μ¬μ¬μ©μ±μ λμ¬μ€
- ex-μ¬μ©μμ μ΄λ¦μ μ¬λ¬ κ³³μμ μ¬μ©
- νλ‘κ·Έλ¨μ μν κ΄λ¦¬
- λ³μλ νλ‘κ·Έλ¨μ μνλ₯Ό κ΄λ¦¬νλ λ° μ¬μ©
- ex-κ²μμμ νμ¬ μ μλ₯Ό μ μ₯νκ±°λ μ ν리μΌμ΄μ μμ μ¬μ©μκ° λ§μ§λ§μΌλ‘ λ°©λ¬Έν νμ΄μ§λ₯Ό μ μ₯
νλ‘νΌν°μ μν
: νλ‘νΌν°λ λͺ¨λΈ λ°μ΄ν°μ λμμ μ μνκΈ° μν μ μ°νκ³ κ°λ ₯ν λ°©λ²μ μ 곡
- κ° μ μ₯/κ²μ
- μΊ‘μν
- λ°μ΄ν° νΉμ λμμ μΊ‘μνν μ μλ λ°©μ μ 곡
- μΈλΆ μ½λκ° μ§μ λ΄λΆ μΈμ€ν΄μ€μ μνμ λν΄ μ κ·Όνκ±°λ μμ νλ κ²μ λ°©μ§
- μ΅μ λ²
- μ΅μ λ²: μ¬λμ΄ νλ‘νΌν°μ κ°μ λ³νμ μλ΅νλλ‘ νμ©
- willSet: κ°μ΄ μ€μ λκΈ° μ μ νΈμΆ
- didSet: κ°μ΄ μ€μ λ νμ νΈμΆ
- νλ‘νΌν°μ κ°μ΄ λ³νν λ μΆκ°μ μΈ μ‘μ μ μν
- Type-level behavior
- λμμ νμ κ·Έ μ체μ κ΄λ ¨νμ¬ λμμ μ μ
λ°μν
'β¨οΈ Language > swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μ½λ μ νμ (0) | 2024.03.16 |
---|---|
[Swift] λ³μμ νλ‘νΌν°2 (1) | 2024.03.15 |
[μ½λνΈλ¦¬ μ±λ¦°μ§] 6μ£Όμ°¨ - κ·Έλν νμ (0) | 2023.10.16 |
[μ½λνΈλ¦¬ μ±λ¦°μ§] 5μ£Όμ°¨ - HashMap (0) | 2023.10.04 |
[μ½λνΈλ¦¬ μ±λ¦°μ§] 4μ£Όμ°¨ - μμ νμ (0) | 2023.10.04 |