μλ νμΈμ~
μ€λμ Swiftμμ μ¬μ©νλ νλ‘νΌν°μ λν΄μ μ 리νλ €κ³ ν©λλ€ : )
νλ‘νΌν°λ
ν΄λμ€, ꡬ쑰체, μ΄κ±°ν λ±μ λ°μ΄ν° νμ λ΄μ μ μΈλμ΄ μλ λ³μ λλ μμλ₯Ό μλ―Έν©λλ€. νλ‘νΌν°λ ν΄λΉ λ°μ΄ν° νμ λ΄μμ λ°μ΄ν°λ₯Ό μ μ₯νκ±°λ, κ³μ°νλ λ±μ μν μ μνν©λλ€.
νλ‘νΌν°λ κΈ°λ³Έμ μΌλ‘ μ μ₯ νλ‘νΌν°μ κ³μ°λ νλ‘νΌν°λ‘ λλ μ μμ΅λλ€.
μ μ₯ νλ‘νΌν°λ κ°μ μ μ₯νκ³ , κ³μ°λ νλ‘νΌν°λ κ°μ κ³μ°νμ¬ λ°νν©λλ€.
λν, νλ‘νΌν°μ μ κ·Όνκ±°λ κ°μ΄ λ³κ²½λ λ μ€νλλ μ½λλ₯Ό μΆκ°ν μ μλ νλ‘νΌν° μ΅μ λ²λ μ 곡λ©λλ€.
Swiftμμλ νλ‘νΌν°λ₯Ό μ μΈν λ var ν€μλλ‘ λ³μλ₯Ό μ μΈνκ±°λ, let ν€μλλ‘ μμλ₯Ό μ μΈν©λλ€.
νλ‘νΌν°λ ν΄λΉ λ°μ΄ν° νμ λ΄μμ μ μΈλμ΄ μμΌλ―λ‘, μΈμ€ν΄μ€λ₯Ό μμ±ν λ νλ‘νΌν°λ₯Ό μ΄κΈ°ννκ±°λ, κ°μ μ κ·Όν λ ν΄λΉ λ°μ΄ν° νμ μ μΈμ€ν΄μ€λ₯Ό ν΅ν΄ μ κ·Όν μ μμ΅λλ€.
νλ‘νΌν°μ μ’ λ₯
1. μ μ₯ νλ‘νΌν° (Stored Properties)
μ μ₯ νλ‘νΌν°λ κ°μ₯ κ°λ¨ν ννμ νλ‘νΌν°λ‘, κ°μ μ μ₯νλ λ° μ¬μ©λ©λλ€. ν΄λμ€, ꡬ쑰체, μ΄κ±°ν λ±μμ μ μν μ μμ΅λλ€. μ μ₯ νλ‘νΌν°λ var λλ let ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈν μ μμ΅λλ€. varλ‘ μ μΈν μ μ₯ νλ‘νΌν°λ κ°μ λ³κ²½ν μ μμ§λ§, letμΌλ‘ μ μΈν μ μ₯ νλ‘νΌν°λ κ°μ λ³κ²½ν μ μμ΅λλ€.
struct Person {
var name: String
let age: Int
}
var person = Person(name: "κ²½νΈ", age: 20)
person.name = "κ²½νΈ" // name νλ‘νΌν°λ₯Ό λ³κ²½ν μ μμ
person.age = 31 // age νλ‘νΌν°λ₯Ό λ³κ²½ν μ μμ (μ€λ₯ λ°μ)
Person ꡬ쑰체μ nameκ³Ό ageλΌλ μ μ₯ νλ‘νΌν°λ₯Ό μ μΈν μ΄ν Person μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , μμ±λ μΈμ€ν΄μ€μ name νλ‘νΌν°λ₯Ό λ³κ²½νμ΅λλ€. νμ§λ§ μμ μ€λͺ ν κ²κ³Ό κ°μ΄ age νλ‘νΌν°λ letμΌλ‘ μ μΈλμ΄ μμΌλ―λ‘ κ°μ λ³κ²½ν μ μμ΅λλ€.
2. μ°μ° νλ‘νΌν° (Computed Properties)
μ°μ° νλ‘νΌν°λ μ μ₯λ κ°μ κ°μ§μ§ μμΌλ©°, getterμ setterλ₯Ό μ¬μ©νμ¬ κ°μ κ³μ°ν©λλ€. getterλ νλ‘νΌν° κ°μ λ°ννκ³ , setterλ μ κ°μ μ€μ ν©λλ€. μ°μ° νλ‘νΌν°λ var ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈνλ©°, getκ³Ό set λΈλ‘μ μ¬μ©νμ¬ κ΅¬νν©λλ€.
struct Rectangle {
var width = 0.0
var height = 0.0
var area: Double {
get {
return width * height
}
set(newArea) {
height = newArea / width
}
}
}
var rect = Rectangle(width: 10.0, height: 5.0)
print(rect.area) // 50.0
rect.area = 100.0
print(rect.height) // 10.0
Rectangle ꡬ쑰체μ width, height, areaλΌλ νλ‘νΌν°λ₯Ό μ μΈνκ³ area νλ‘νΌν°λ μ°μ° νλ‘νΌν°λ‘, λλΉμ λμ΄λ₯Ό κ³±ν κ°μ λ°ννκ³ μμ΅λλ€. λν area νλ‘νΌν°μ setterλ₯Ό μ¬μ©νμ¬ λμ΄ κ°μ κ³μ°νλ κ²μ νμΈν μ μμ΅λλ€. μ΄ν Rectangle μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , area νλ‘νΌν°λ₯Ό μΆλ ₯ν ν, area κ°μ λ³κ²½νκ² λλ©΄ height κ°μ λ€μ κ³μ°νκ³ μλ κ²μ νμΈν μ μμ΅λλ€.
3. μ§μ° μ μ₯ νλ‘νΌν° (Lazy Stored Properties)
μ§μ° μ μ₯ νλ‘νΌν°λ ν΄λΉ νλ‘νΌν°κ° μ²μμΌλ‘ νΈμΆλ λ μ΄κΈ°νλ©λλ€. μΌλ°μ μΌλ‘ μ΄κΈ°ν λΉμ©μ΄ λ§μ΄ λλ κ°μ²΄λ νμΌ μ μΆλ ₯ λ±μ μμ μ μννλ νλ‘νΌν°μ μ¬μ©λ©λλ€. μ§μ° μ μ₯ νλ‘νΌν°λ var ν€μλμ ν¨κ» lazy ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈν©λλ€.
struct Book {
let title: String
let author: String
lazy var contents: String = {
guard let fileUrl = Bundle.main.url(forResource: "bookContents", withExtension: "txt"),
let contents = try? String(contentsOf: fileUrl)
else {
return "컨ν
μΈ λ₯Ό λΆλ¬μ€λλ° μ€ν¨νμ΅λλ€."
}
return contents
}()
}
Book ꡬ쑰체λ νμΌμμ μ± λ΄μ©μ μ½μ΄μμ contents νλ‘νΌν°μ μ μ₯νκ³ μμ΅λλ€.
νμ§λ§, νμΌμμ λ°μ΄ν°λ₯Ό μ½μ΄μ€λ μμ μ λΉμ©μ΄ λ§μ΄ λλ μμ μ΄κΈ° λλ¬Έμ μ΄κΈ°ν μμ μ νκ² λλ©΄ μ± μ€ν μλκ° λλ €μ§ μ°λ €κ° μμ΅λλ€. λ°λΌμ μ΄λ₯Ό λ°©μ§νκΈ° μν΄μ μ§μ° μ μ₯ νλ‘νΌν°λ₯Ό μ¬μ©νμ¬ ν΄λΉ νλ‘νΌν°κ° μ²μ μ κ·Όλ λμλ§ νμΌμμ λ°μ΄ν°λ₯Ό μ½μ΄μ€λλ‘ κ΅¬νν μ μμ΅λλ€.
4. νλ‘νΌν° μ΅μ λ² (Property Observers)
νλ‘νΌν° μ΅μ λ²λ μ μ₯ νλ‘νΌν°μ κ°μ΄ λ³κ²½λ λ νΈμΆλλ λ©μλμ λλ€. νλ‘νΌν° μ΅μ λ²λ willSetκ³Ό didSet λΈλ‘μ μ¬μ©νμ¬ κ΅¬νν©λλ€. willSet λΈλ‘μ μλ‘μ΄ κ°μ΄ μ μ₯λκΈ° μ μ νΈμΆλλ©°, didSet λΈλ‘μ μλ‘μ΄ κ°μ΄ μ μ₯λ νμ νΈμΆλ©λλ€.
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("μ€ν
μ μ΄ :\(newTotalSteps), ", terminator: "")
}
didSet {
if totalSteps > oldValue {
print("μΆκ°ν μ€ν
μ : \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 10 // μ€ν
μ μ΄ :10, μΆκ°ν μ€ν
μ : 10 steps
stepCounter.totalSteps = 20 // μ€ν
μ μ΄ :20, μΆκ°ν μ€ν
μ : 10 steps
μμ μμ μμλ StepCounter ν΄λμ€μ totalStepsλΌλ μ μ₯ νλ‘νΌν°λ₯Ό μ μΈνμμ΅λλ€. totalSteps νλ‘νΌν°μ willSetκ³Ό didSet λΈλ‘μ μΆκ°νμ¬, κ°μ΄ λ³κ²½λ λλ§λ€ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
5. νμ νλ‘νΌν° (Type Properties)
νμ νλ‘νΌν°λ ν΄λμ€λ ꡬ쑰체 μ체μ μνλ νλ‘νΌν°λ‘, ν΄λΉ νμ μ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νλ κ°μ λλ€. νμ νλ‘νΌν°λ static ν€μλλ class ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈν©λλ€. static ν€μλλ₯Ό μ¬μ©νλ©΄ μμμ΄ λΆκ°λ₯ν νμ νλ‘νΌν°λ₯Ό μ μΈν μ μμ΅λλ€. λ°λ©΄, class ν€μλλ₯Ό μ¬μ©νλ©΄ μμμ΄ κ°λ₯ν νμ νλ‘νΌν°λ₯Ό μ μΈν μ μμ΅λλ€.
class SomeClass {
static var someTypeProperty = "Some Value"
}
struct SomeStruct {
static var someTypeProperty = "Some Value"
}
enum SomeEnum {
static var someTypeProperty = "Some Value"
}
print(SomeClass.someTypeProperty) // Some Value
print(SomeStruct.someTypeProperty) // Some Value
print(SomeEnum.someTypeProperty) // Some Value
μμ μμ μμλ SomeClass, SomeStruct, SomeEnumμ κ°κ° someTypePropertyλΌλ νμ νλ‘νΌν°λ₯Ό μ μΈνκ³ μμ΅λλ€. νμ νλ‘νΌν°λ ν΄λΉ νμ μ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νκΈ° λλ¬Έμ, κ°μ λ³κ²½μ΄ λͺ¨λ μΈμ€ν΄μ€μ μν₯μ λ―ΈμΉ©λλ€.
SomeClass.someTypeProperty = "New Value"
print(SomeClass.someTypeProperty) // New Value
μ¦, μμ κ°μ΄ SomeClassμ someTypeProperty κ°μ λ³κ²½νκ³ λμ SomeClass.someTypePropertyλ₯Ό μΆλ ₯νλ©΄, μλ‘μ΄ κ°μΈ "New Value"κ° μΆλ ₯λ©λλ€.
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] UITableViewμμ μ μ€μ² μ¬μ©νκΈ° / μ΄μμ 리 (1) | 2023.07.20 |
---|---|
[Swift] Extensionμ λν΄μ μμ보μ. (1) | 2023.04.13 |
[Swift] Classμ Structμ λν΄μ (0) | 2023.04.07 |
[Swift] Delegate Pattern(λ리κ²μ΄νΈ ν¨ν΄)μ λν΄μ (0) | 2023.04.04 |
[Swift] Protocol(νλ‘ν μ½)μ λν΄μ (0) | 2023.04.02 |