μλ νμΈμ μ μΈμ λλ€ :)
μ§λ κ²μκΈμμ μ§μ° μ μ₯ νλ‘νΌν°μ λν΄ μ 리ν΄λ³΄μλλ°μ, μμν κΉμ νλ‘νΌν°μ λν΄μ μ μ 리λ₯Ό ν΄λ³΄λ €κ³ ν©λλ€.
νλ‘νΌν°λ ν¬κ² μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν°, νμ νλ‘νΌν° μ΄λ κ² μΈ κ°μ§λ‘ λλ μ μλλ°μ, μ΄λ² κ²μκΈμμλ μ μ₯ νλ‘νΌν°μ μ°μ° νλ‘νΌν°μ λν΄ μ 리νλλ‘ νκ² μ΅λλ€!
νλ‘νΌν° (Properties)
μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν°, νμ νλ‘νΌν°μ λν΄ μμλ³΄λ €λ©΄ λ¨Όμ νλ‘νΌν°κ° 무μμΈμ§λΆν° μμμΌκ² μ£ ??
propertyλ μ¬μ°, μμ± μ λλ‘ λ²μν μ μλλ°μ, Swiftμμμ νλ‘νΌν°λ ν΄λμ€, ꡬ쑰체, μ΄κ±°ν λ±μ κ΄λ ¨λ κ°μ λ»ν©λλ€.
μ μ₯ νλ‘νΌν° (Stored Properties)
μ μ₯ νλ‘νΌν°λ λ¨μν κ°μ μ μ₯νκ³ μλ νλ‘νΌν° μ λλ€.
ν΄λμ€ λλ ꡬ쑰체μ μΈμ€ν΄μ€μ μ°κ΄λ κ°μ μ μ₯νλ κ°μ₯ λ¨μν κ°λ μ νλ‘νΌν°λ‘, μΈμ€ν΄μ€μ μμ λλ λ³μλ₯Ό μλ―Έν©λλ€.
let ν€μλλ₯Ό μ΄μ©ν΄μ μμ νΉμ var ν€μλλ₯Ό μ΄μ©ν΄μ λ³μλ‘ μ μΈν΄ μ μ₯ νλ‘νΌν°λ₯Ό μ¬μ©ν μ μμ΅λλ€.
struct Student {
var studentID: Int
var major: String
}
class Person {
let name: String = "Jane"
var age: Int = 20
var nickname: String?
}
μ μ₯ νλ‘νΌν°μ μ μΈκ³Ό μΈμ€ν΄μ€ μ΄κΈ°ν λ°©λ²
ν΄λμ€μ ꡬ쑰체μμ μ μ₯ νλ‘νΌν°λ₯Ό μ μΈνλ κ°λ¨ν μμ μ½λλ₯Ό μ§λ³΄μλλ°μ! μμ μμ μ½λλ₯Ό 보면, ꡬ쑰체μ ν΄λμ€μμ μ μ₯ νλ‘νΌν°λ₯Ό μ μΈνλ λ°©λ²μ μ°¨μ΄κ° μλ€λ κ²μ νμΈν μ μμ κ²μ λλ€.
ꡬ쑰체λ μ μ₯ νλ‘νΌν°λ₯Ό λͺ¨λ ν¬ν¨νλ μ΄λμ λΌμ΄μ λ₯Ό μλμΌλ‘ μμ±ν©λλ€. (νμ μ΄ μ΅μ λμ΄ μλλλΌλ)
νμ§λ§, ν΄λμ€μ μ μ₯ νλ‘νΌν°λ μ΅μ λ νμ μ΄ μλλΌλ©΄ νλ‘νΌν° κΈ°λ³Έκ°μ μ§μ ν΄μ£Όκ±°λ μ¬μ©μ μ μ μ΄λμ λΌμ΄μ λ₯Ό ν΅ν΄ λ°λμ μ΄κΈ°νν΄μ£Όμ΄μΌ ν©λλ€. κ°λ¨ν μμ μ½λλ₯Ό ν΅ν΄ μ°¨μ΄μ μ μ΄ν΄λ΄ μλ€!
ꡬ쑰체μ μ μ₯ νλ‘νΌν° μ μΈ λ° μΈμ€ν΄μ€ μμ±
struct Student {
var studentID: Int
var major: String
}
// ꡬ쑰체μλ κΈ°λ³Έμ μΌλ‘ μ μ₯ νλ‘νΌν°λ₯Ό 맀κ°λ³μλ‘ κ°λ μ΄λμ
λΌμ΄μ κ° μ‘΄μ¬ν¨
let eunju: Student = Student(studentID: 2018111303, major: "λμ§νΈλ―Έλμ΄νκ³Ό")
struct Student {
var studentID: Int = 2018111303
var major: String = "λμ§νΈλ―Έλμ΄νκ³Ό"
}
// νλ‘νΌν°μ μ΄κΈ°κ°μ ν λΉνλ€λ©΄ μΈμ€ν΄μ€ μμ± μ μ΄κΈ°κ°μ λκΈΈ νμκ° μμ
let eunju: Student = Student()
print(eunju) // Student(studentID: 2018111303, major: "λμ§νΈλ―Έλμ΄νκ³Ό")
// μλ‘μ΄ μ΄κΈ°κ° ν λΉνκ³ μΆλ€λ©΄ μΈμ€ν΄μ€ μμ± μ λ€λ₯Έ μ΄κΈ°κ° ν λΉ κ°λ₯
let jane: Student = Student(studentID: 2019111303, major: "μ»΄ν¨ν°κ³΅νκ³Ό")
print(jane) // Student(studentID: 2019111303, major: "μ»΄ν¨ν°κ³΅νκ³Ό")
ν΄λμ€μ μ μ₯ νλ‘νΌν° μ μΈ λ° μΈμ€ν΄μ€ μμ±
class Person {
let name: String
var age: Int
var nickname: String?
// ν΄λμ€μ κ²½μ° νλ‘νΌν° κΈ°λ³Έκ°μ μ§μ ν΄μ£Όμ§ μλλ€λ©΄ μ΄λμ
λΌμ΄μ λ°λ‘ μ μν΄μ£Όμ΄μΌ ν¨
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// μΈμ€ν΄μ€ μμ± μ μ¬μ©μ μ μ μ΄λμ
λΌμ΄μ νΈμΆμ ν΅ν΄ νλ‘νΌν° μ΄κΈ°κ° ν λΉ
let eunju: Person = Person(name: "eunju", age: 20)
eunju.nickname = "jane"
class Person {
let name: String = "eunju"
var age: Int = 20
var nickname: String?
}
// νλ‘νΌν° μ μΈ μ μ΄κΈ°κ° μ§μ ν΄μ£Όμλ€λ©΄ μ¬μ©μ μ μ μ΄λμ
λΌμ΄μ λ₯Ό μ¬μ©νμ§ μμλ λ¨
let eunju: Person = Person()
eunju.age = 25
eunju.nickname = "jane"
μμ μ½λλ₯Ό 보λ ꡬ쑰체μ ν΄λμ€μ μ μ₯ νλ‘νΌν° μ μΈ λ° μΈμ€ν΄μ€ μμ± μ μ΄κΈ°ν λ°©λ²μ μ°¨μ΄μ μ΄ λͺ νν λΉκ΅κ° λλ κ² κ°μ΅λλ€.
μ°¨μ΄μ μ μμ½ν΄λ³΄μλ©΄ λ€μκ³Ό κ°μ΄ μ 리ν μ μμ κ² κ°λ€μ!
ꡬ쑰체
- κΈ°λ³Έμ μΌλ‘ μ μ₯ νλ‘νΌν°λ₯Ό 맀κ°λ³μλ‘ κ°λ μ΄λμ λΌμ΄μ κ° μ‘΄μ¬νκΈ° λλ¬Έμ νλ‘νΌν° μ μΈ μ μ΄κΈ°κ° μ§μ μ΄ νμκ° μλ
- μ μΈ μ νλ‘νΌν° μ΄κΈ°κ° μ§μ λ λΉμ°ν κ°λ₯
ν΄λμ€
- μ¬μ©μ μ μ μ΄λμ λΌμ΄μ λ₯Ό ν΅ν΄ μ΄κΈ°ν or νλ‘νΌν° μ μΈ μ μ΄κΈ°κ° μ§μ μ΄ νμ
- μ μ₯ νλ‘νΌν°κ° μ΅μ λ νμ μ΄λΌλ©΄ μ΄κΈ°κ° μ€μ κ΅³μ΄ νμμμ
μ°μ° νλ‘νΌν° (Computed Properties)
μ°μ° νλ‘νΌν°λ μ€μ κ°μ μ μ₯νλ νλ‘νΌν°κ° μλλΌ, νΉμ μνμ λ°λ₯Έ κ°μ μ°μ°νλ νλ‘νΌν°λ‘,
getterμ optionalν setterλ₯Ό μ κ³΅ν΄ κ°μ νμνκ³ κ°μ μ μΌλ‘ λ€λ₯Έ νλ‘νΌν° κ°μ μ€μ ν μ μλ λ°©λ²μ μ 곡ν©λλ€.
μ¦, μΈμ€ν΄μ€ λ΄/μΈλΆμ κ°μ μ°μ°νμ¬ μ μ ν κ°μ λλ €μ£Όλ μ κ·Όμ(getter)μ μν μ ν μλ μμΌλ©° μλνλ λ΄λΆμ νλ‘νΌν° κ°μ κ°μ μ μΌλ‘ μ€μ νλ μ€μ μ(setter)μ μν μ ν μλ μμ΅λλ€. μ°μ° νλ‘νΌν°λ ν΄λμ€, ꡬ쑰체, κ·Έλ¦¬κ³ μ΄κ±°νμλ μ μν μ μμ΅λλ€.
λ©μλλ‘ κ΅¬νν μ μλλ° μ°μ° νλ‘νΌν°λ₯Ό κ΅³μ΄ μ μ¬μ©ν κΉ? λΌλ μλ¬Έμ΄ λ€ μ μλλ°μ! μ°μ° νλ‘νΌν°λ₯Ό μ¬μ©νμ λμ μ₯μ μ λν΄ μμλ΄ μλ€.
μΈμ€ν΄μ€ μΈλΆμμ λ©μλλ₯Ό ν΅ν΄ μΈμ€ν΄μ€ λ΄λΆ κ°μ μ κ·Όνλ €λ©΄ λ©μλλ₯Ό λ κ°(μ κ·Όμ, μ€μ μ) ꡬνν΄μΌ ν©λλ€. λν μ΄λ₯Ό κ°μνκ³ λ©μλλ‘ κ΅¬ννλ€ ν΄λ λ λ©μλκ° λΆμ° ꡬνλμ΄ μ½λμ κ°λ μ±μ΄ λ¨μ΄μ§ μνμ΄ μμ΅λλ€. κ·Έλ κΈ° λλ¬Έμ μ°μ° νλ‘νΌν°λ₯Ό μ¬μ©νλ κ²μ΄ λ©μλλ₯Ό μ¬μ©νλ κ²λ³΄λ€ ν¨μ¬ λ κ°νΈνκ³ μ§κ΄μ μ΄κΈ°λ ν©λλ€.
λ€λ§ μ°μ° νλ‘νΌν°λ μ κ·ΌμμΈ get λ©μλλ§ κ΅¬ννμ¬ μ½κΈ° μ μ© μνλ‘ κ΅¬ννκΈ° μ½μ§λ§, μ°κΈ° μ μ© μνλ‘ κ΅¬νν μλ μλ€λ λ¨μ μ΄ μμ΅λλ€. (setterλ§ optional)
μ°μ° νλ‘νΌν°λ₯Ό μ΄λ»κ² μ μΈνκ³ , νμ©νλμ§ μμμ½λλ₯Ό ν΅ν΄ λ³΄κ² μ΅λλ€!
struct CoordinatePoint {
var x: Int // μ μ₯ νλ‘νΌν°
var y: Int // μ μ₯ νλ‘νΌν°
// λμΉ μ’ν
var oppositePoint: CoordinatePoint {
get { // μ κ·Όμ
return CoordinatePoint(x: -x, y: -y)
}
set(opposite) { // μ€μ μ
x = -opposite.x
y = -opposite.y
}
}
}
var position: CoordinatePoint = CoordinatePoint(x: 10, y: 20)
// νμ¬ μ’ν
print(position) // 10, 20
// μ κ·Όμλ₯Ό ν΅ν΄ λμΉμ’ν get
print(position.oppositePoint) // -10, -20
// μ€μ μλ₯Ό ν΅ν΄ λμΉ μ’νλ₯Ό (15, 10)μΌλ‘ set
position.oppositePoint = CoordinatePoint(x: 15, y: 10)
// μλ‘μ΄ νμ¬ μ’ν
print(position) // -15, 10
νλμ νλ‘νΌν°μ μ κ·Όμμ μ€μ μκ° λͺ¨μ¬μκΈ° λλ¬Έμ μ§κ΄μ μΌλ‘ ν΄λΉ νλ‘νΌν°μ μν μ νμ ν μ μκ³ , νλ‘νΌν°μ κ°μ κ°μ Έμ€κ±°λ μλ‘μ΄ κ°μ μΈν νλ κ²λ λ©μλλ₯Ό μ¬μ©νλ κ²λ³΄λ€ ν¨μ¬ κ°λ¨ν κ² κ°μ΅λλ€.
μμ μ½λλ₯Ό 보면 get λ©μλ μμμ νλ‘νΌν°μ νμ κ³Ό κ°μ νμ μ κ²°κ΄κ°μ returnνκ³ μλ κ²μ νμΈν μ μλλ°μ, μ΄ κ²½μ°μ κ°μ΄ μ κ·Όμ λ΄λΆμ μ½λκ° λ¨ ν μ€μ΄κ³ , κ·Έ κ²°κ΄κ°μ νμ μ΄ νλ‘νΌν°μ νμ κ³Ό κ°λ€λ©΄ return ν€μλλ₯Ό μλ΅ν μ μμ΅λλ€.
λν, μμ μ½λμμ μ€μ μμ 맀κ°λ³μ μ΄λ¦μ oppositeμΌλ‘ λͺ μνμ¬ set λ©μλ λ΄λΆμμ ν΄λΉ μ΄λ¦μΌλ‘ μΈμλ₯Ό μ λ¬λ°μ μ¬μ©νκ³ μμ΅λλ€. λ§μ½ μμ κ°μ΄ μΈμ μ΄λ¦μ μ§μ νμ§ μμ κ²½μ° μΈμ κΈ°λ³Έ μ΄λ¦μΈ newValueλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ΄λ₯Ό μ μ©νλ©΄ λ€μκ³Ό κ°μ΄ μΈ μ μκ² λ€μ!
struct CoordinatePoint {
var x: Int // μ μ₯ νλ‘νΌν°
var y: Int // μ μ₯ νλ‘νΌν°
// λμΉ μ’ν
var oppositePoint: CoordinatePoint {
get { // μ κ·Όμ
CoordinatePoint(x: -x, y: -y)
}
set { // μ€μ μ
x = -newValue.x
y = -newValue.y
}
}
}
var position: CoordinatePoint = CoordinatePoint(x: 10, y: 20)
// νμ¬ μ’ν
print(position) // 10, 20
// μ κ·Όμλ₯Ό ν΅ν΄ λμΉμ’ν get
print(position.oppositePoint) // -10, -20
// μ€μ μλ₯Ό ν΅ν΄ λμΉ μ’νλ₯Ό (15, 10)μΌλ‘ set
position.oppositePoint = CoordinatePoint(x: 15, y: 10)
// μλ‘μ΄ νμ¬ μ’ν
print(position) // -15, 10
μ½κΈ° μ μ© μ°μ° νλ‘νΌν°
μμμ μ°μ° νλ‘νΌν°λ₯Ό μ¬μ©νμ¬ μ°κΈ° μ μ© μνλ‘ κ΅¬νν μλ μμ§λ§ μ½κΈ° μ μ© μνλ‘λ ꡬνν μ μλ€κ³ μΈκΈνμ΅λλ€.
κ΅³μ΄ ν΄λΉ νλ‘νΌν°μ κ°μ λ°κΏ μΌμ΄ μλ€λ©΄ μ½κΈ° μ μ© μνλ‘ κ΅¬νν΄μ£Όλ©΄ λκ² μ£ ?? μ°μ° νλ‘νΌν°λ₯Ό μ½κΈ° μ μ©μΌλ‘ ꡬννλ €λ©΄ get λ©μλλ§ μ¬μ©ν΄μ£Όλ©΄ λ©λλ€!
struct CoordinatePoint {
var x: Int // μ μ₯ νλ‘νΌν°
var y: Int // μ μ₯ νλ‘νΌν°
// λμΉ μ’ν
var oppositePoint: CoordinatePoint {
get { // μ κ·Όμ
CoordinatePoint(x: -x, y: -y)
}
}
}
var position: CoordinatePoint = CoordinatePoint(x: 10, y: 20)
// νμ¬ μ’ν
print(position) // 10, 20
// μ κ·Όμλ₯Ό ν΅ν΄ λμΉμ’ν get
print(position.oppositePoint) // -10, -20
// μ€μ μλ₯Ό ꡬννμ§ μμκΈ° λλ¬Έμ μ€λ₯ λ°μ
position.oppositePoint = CoordinatePoint(x: 15, y: 10)
[μ°Έκ³ μλ£]
'π iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘νΌν°(Properties) - νμ νλ‘νΌν° (0) | 2023.04.02 |
---|---|
[Swift] νλ‘νΌν°(Properties) - νλ‘νΌν° μ΅μ λ² (0) | 2023.04.02 |
[Swift] lazy ν€μλ (0) | 2023.03.18 |
[Swift] enumerated() (0) | 2023.01.07 |
[Swift] κ³ μ°¨ν¨μ - map, filter, reduce (1) | 2022.11.29 |