κ°μ²΄ μ§ν₯
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (Object-Oriented Programming)
- μ€μ¬μ OOPλΌκ³ λΆλ₯Έλ€.
- νλ‘κ·Έλ¨μ μ΄λ»κ² μ€κ³ν΄μΌνλ μ§μ λν λ°©λ²λ‘ μ€ νλ(ν¨λ¬λ€μ)
- κ° κ°μ²΄μ κ·Έ κ°μ²΄λ€κ°μ κ΄κ³λ₯Ό μ€κ³νλ κ²
- κ°μ²΄ μ§ν₯μΌλ‘ μ§μ¬μ§ νλ‘κ·Έλ¨μ μ¬λ¬ κ°μ²΄λ€μ λͺ¨μ
- κ° κ°μ²΄λ λ©μμ§λ₯Ό μ£Όκ³ λ°μ μ μμΌλ©°, λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€.
π OOP νΉμ§
- μΆμν (Abstraction): μΆμνλ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ κ°λ
μ€ νλ
- 볡μ‘ν μμ€ν μ λ¨μννμ¬ μ€μν λΆλΆμ κ°μ‘°νκ³ λΆνμν λΆλΆμ μ¨κΈ°λ κ²μ μλ―Έ
- ν΄λμ€λ νλ‘ν μ½μ ν΅ν΄ λ°μ΄ν°μ λμμ μΆμννμ¬ νμν μ 보λ§μ λ ΈμΆμν€λ κ²μ ν¬ν¨
- μΊ‘μν (Encapsulation):
- κ°μ²΄μ μν(λ°μ΄ν°)μ νλ(λ©μλ)λ₯Ό νλλ‘ λ¬Άκ³ , μΈλΆμμμ μ κ·Όμ μ ννμ¬ κ°μ²΄ λ΄λΆμ μΈλΆ ꡬνμ μ¨κΈ°λ κ²μ μλ―Έ
- μ΄λ₯Ό ν΅ν΄ κ°μ²΄ κ°μ μμ‘΄μ±μ μ€μ΄κ³ μ½λλ₯Ό 보νΈνλ©° μ μ§λ³΄μμ±μ λμΌ μ μλ€.
- μμ (Inheritance):
- κΈ°μ‘΄ ν΄λμ€μμ μ μλ μμ±κ³Ό λ©μλλ₯Ό λ€λ₯Έ ν΄λμ€μμ μ¬μ¬μ©νλ κ²μ λ§νλ€.
- λΆλͺ¨ ν΄λμ€(μμ ν΄λμ€, μνΌ ν΄λμ€)μ νΉμ±μ μμ ν΄λμ€(νμ ν΄λμ€, μλΈ ν΄λμ€)κ° λ¬Όλ €λ°μ μ¬μ©ν μ μλ€.
- λ€νμ± (Polymorphism):
- λμΌν μΈν°νμ΄μ€λ₯Ό κ°μ§ λ€λ₯Έ ν΄λμ€λ€μ΄ κ°κ°μ λ°©μμΌλ‘ λμν μ μλ λ₯λ ₯μ λ§νλ€.
- μ€λ²λΌμ΄λ©κ³Ό μ°κ΄λμ΄ μμΌλ©°, μλ‘ λ€λ₯Έ ν΄λμ€λ€μ΄ λμΌν λ©μλλ₯Ό νΈμΆν λ κ° ν΄λμ€μ μ€λ²λΌμ΄λ©λ λ©μλκ° μ€νλλ€.
μ€λ²λΌμ΄λ© (Overriding):
- μμ κ΄κ³μμ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μνλ κ²μ λ§νλ€.
- μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€μ λμΌν λ©μλ μ΄λ¦μ μ¬μ©νμ¬ λ΄μ©μ λ³κ²½νκ±°λ νμ₯ν μ μλ€.
μ€λ²λ‘λ© (Overloading):
- λμΌν ν¨μλ λ©μλ μ΄λ¦μ κ°μ§μ§λ§ λ§€κ°λ³μμ νμ , κ°μ, μμ λ±μ΄ λ€λ₯Έ μ¬λ¬ λ²μ μ ν¨μλ₯Ό μ μνλ κ²μ λ§νλ€.
- μ΄λ₯Ό ν΅ν΄ λμΌν μ΄λ¦μ λ€μν λ²μ μ ν¨μλ₯Ό μ¬μ©ν μ μλ€.
// μΆμν - μ΄λ κ² νμ
μ μ μνλ κ²
class Account {}
struct Account {}
protocol Account {}
// μΊ‘μν
class Person {
private var location = "μμΈ"
private func doSomething1() {
print("μ μ ν΄κ²μμ λ€λ €μ λ΄μ§")
}
private func doSomething2() {
print("νμ¨ μλ€ κ°κΈ°")
}
func currentLocation() {
print("====")
print("νμ¬ μμΉ :", location)
print("====")
}
func goToBusan() {
print("μμΈμ μΆλ°ν©λλ€.")
doSomething1()
doSomething2()
print("λΆμ°μ λμ°©νμ΅λλ€.")
location = "λΆμ°"
}
}
// μμ
class Animal {
var species = "λλ¬Ό"
}
class Dog: Animal {
var name = "μ΄μ½"
}
let dog = Dog()
dog.species // λλ¬Ό
dog.name // μ΄μ½
// λ€νμ±
1) μ€λ²λΌμ΄λ©
class Dog {
func bark() { print("λ©λ©") }
}
class Poodle: Dog {
override func bark() { print("μμ") }
}
class Husky: Dog {
override func bark() { print("μΌλ₯΄λ₯΄") }
}
class Bulldog: Dog {
override func bark() {
super.bark() // λΆλͺ¨μ μλ λ©λ© μ€ν
print("bowwow")
}
}
var dog: Dog = Dog()
dog.bark() // λ©λ©
dog = Poodle()
dog.bark() // μμ
dog = Husky()
dog.bark() // μΌλ₯΄λ₯΄
dog = Bulldog()
dog.bark() // λ©λ©, bowwow
2) μ€λ²λ‘λ©
// ν¨μλ₯Ό μλ³ν λ λ¨μν ν¨μ μ΄λ¦μ λ³΄κ³ νλ κ² μλλΌ
// ν¨μ μ΄λ¦, νλΌλ―Έν°(νμ
, κ°―μ, Argument Label), 리ν΄νμ
μ λͺ¨λ μ’
ν©ν΄μ ν¨μλ₯Ό μλ³
func printParameter() {
print("No param")
}
func printParameter(param: Int) {
print("Input :", param)
}
func printParameter(_ param: Int) -> Int {
print("Input :", param)
return param
}
func printParameter(_ param: Int) -> Double {
print("Input :", param)
return Double(param)
}
printParameter()
printParameter(param: 1)
let int: Int = printParameter(2) // μμ _λ‘ μ μΈμ΄ λμ΄μκΈ° λλ¬Έμ paramμ΄λΌλ ν€μλ μ μ
let double: Double = printParameter(2)
'π Today I Learned > Swift λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μμ (0) | 2023.12.07 |
---|---|
[Swift] ν΄λμ€, ꡬ쑰체, μ΄κ±°ν (0) | 2023.12.07 |
[Swift] λ°°μ΄, μΈνΈ, λμ λ리 (0) | 2023.12.07 |
[Swift] μ€ν, ν (2) | 2023.12.06 |
[Swift] μ΅μ λ (0) | 2023.12.06 |