๋ฐ์ํ
ํด๋์ค(Class)
- ํด๋์ค๋ฅผ ์ ์ํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉ ๊ฐ๋ฅ
- ํด๋์ค๋ฅผ ๋ง๋ค์ด ํด๋์ค์์ ์์ฑ๋ ๊ฐ์ฒด์ธ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ
- ํด๋์ค ์์ ๋ณ์ ํ๋กํผํฐ(Property)์ ํด๋์ค ์์ ํจ์ ๋ฉ์๋(Method)๋ก ๊ตฌ์ฑ
class Name {
var name = "Hyebin" //ํ๋กํผํฐ
//๋ฉ์๋
func my_name() {
print("my name is \(name)")
}
}
//์ธ์คํด์ค ์์ฑ
let hyebin : Name = Name()
print(hyebin.name) // Hyebin
hyebin.my_name() // my name is Hyebin
hyebin.name = "yoo"
hyebin.my_name() // my name is yoo
ํด๋์ค ์ด๊ธฐํ (Initialization)
- ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ ์๋์ผ๋ก ํธ์ถ๋๋ ์ด๊ธฐํ ์ฒ๋ฆฌ ์ ์ฉ์ ๋ฉ์๋
class Name {
var name : String
var age : Int
init(name:String, age:Int) {
self.name = name
self.age = age
}
func my_name() {
print("my name is \(name) and \(age) year's old")
}
}
let name1 : Name = Name(name: "hyebin", age: 25)
let name2 : Name = Name(name: "abc", age: 32)
name1.my_name() //my name is hyebin and 25 year's old
name2.my_name() //my name is abc and 32 year's old
Name ํด๋์ค ์์ ํ๋กํผํฐ์ ๊ฐ์ ์ง์ ํ์ง ์๊ณ init() ํจ์๋ฅผ ์ฌ์ฉํด ์ด๊ธฐํ
self๋ ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋ ๊ฒ, self. ์ด ๋ถ์ ๋ณ์๋ค์ ํด๋์ค ๋ด์ ๋ณ์๋ผ๋ ๊ฒ
ํด๋์ค ์์ (Inheritance)
- ๊ธฐ์กด์ ํด๋์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ด์ด๋ฐ์ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ
- ์ด๋ฏธ ํธ๋ฆฌํ ํด๋์ค๊ฐ ์๋ค๋ฉด, ๊ทธ ํด๋์ค๋ฅผ ์์๋ฐ์ ๊ธฐ๋ฅ์ ๋ง๋ถ์ฌ ์๋ก์ด ํด๋์ค ์์ฑ ๊ฐ๋ฅ
class Name { //๋ถ๋ชจ ํด๋์ค
var name = "Hyenbin"
func my_name() {
print("my name is \(name)")
}
}
class Email : Name { //์์ ํด๋์ค
var email = "123@naver.com"
func myInfo() {
print("my name is \(name) and my email is \(email)")
}
}
let hyebin : Email = Email()
print(hyebin.name) // Hyenbin
print(hyebin.email) //123@naver.com
hyebin.my_name() //my name is Hyenbin
hyebin.myInfo() //my name is Hyenbin and my email is 123@naver.com
๊ตฌ์กฐ์ฒด (Struct)
- ์ธ์คํด์ค์ ๊ฐ(ํ๋กํผํฐ)์ ์ ์ฅํ๊ฑฐ๋ ๊ธฐ๋ฅ(๋ฉ์๋)์ ์ ๊ณตํ๊ณ ์ด๋ฅผ ์บก์ํํ ์ ์๋ ์ค์ํํธ๊ฐ ์ ๊ณตํ๋ ํ์ (named type)
- ๊ตฌ์กฐ์ฒด ์์ ๋ณ์ ํ๋กํผํฐ(Property)์ ๊ตฌ์กฐ์ฒด ์์ ํจ์ ๋ฉ์๋(Method)๋ก ๊ตฌ์ฑ
struct Name {
var name : String = "Hyebin"
func my_name() {
print("my name is \(name)")
}
}
var hyebin : Name = Name()
print(hyebin.name) //Hyebin
hyebin.my_name() //my name is Hyebin
hyebin.name = "Yoo"
hyebin.my_name() //my name is Yoo
- ํด๋์ค์ ๋ฌ๋ฆฌ ํ๋กํผํฐ์ ๊ฐ์ ์ ์ธํ์ง ์๊ณ ์ธ์คํด์ค ์ ์ธ ์ ๋งค๊ฐ๋ณ์๋ก ์ ์ธ ๊ฐ๋ฅ
struct Name {
var name : String
func my_name() {
print("my name is \(name)")
}
}
var hyebin : Name = Name(name: "hyebin")
print(hyebin.name) //Hyebin
hyebin.my_name() //my name is Hyebin
๊ตฌ์กฐ์ฒด ์ด๊ธฐํ (Initialization)
- ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ๋ฅผ ํ๋ผ๋ฏธํฐ ๋ค์์ผ๋ก ํ์ฌ ์ค์ํํธ๊ฐ ์๋์ผ๋ก ์ด๊ธฐํ ์ฝ๋๋ฅผ ๋ง๋ค์ด์ค
- ์ง์ init()์ ์ฌ์ฉํ์ฌ ์ด๊ธฐํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ, ์ด๊ธฐํ ์ฝ๋ ์ง์ ์์ฑ ์ ์๋ ์ด๊ธฐํ ์ฝ๋ ์ ๊ณต ์๋จ
struct Name {
var name : String = "Hyebin"
var age: Int
func my_name() {
print("my name is \(name) and \(age) year's old")
}
init(name: String){
self.name = name
self.age = 25
}
}
var hyebin : Name = Name(name: "hyebin")
print(hyebin.name) //hyebin
hyebin.my_name() //my name is hyebin and 25 year's old
ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ๊ณตํต์
- ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง
- ์๋ก์ด ์ฌ์ฉ์ ์ ์ ํ์ ์ ๋ง๋ค์ด ์ค
- ์ด๊ธฐํ(init)์ ์ ์ํ์ฌ ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ๊ฐ๋ฅ
- ํ์ฅ(extension) ๊ฐ๋ฅ
- ํ๋กํ ์ฝ(protocol) ์ฌ์ฉ์ด ๊ฐ๋ฅ
- ํน์ ๊ฐ์ ์ ๊ทผํ ์ ์๋ ์๋ธ์คํฌ๋ฆฝํธ(subscript) ๋ฌธ๋ฒ์ด ์ฌ์ฉ์ด ๊ฐ๋ฅ
- ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผํ๊ณ ์ถ๋ค๋ฉด, ์ (dot) ๋ฌธ๋ฒ์ ์ฌ์ฉ
ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ์ฐจ์ด์
- ํด๋์ค
- ์ฐธ์กฐ ํ์
(Reference Type)
- ์ฐธ์กฐ ํ์ : ๋ณ์๋ ์์์ ๊ฐ์ ํ ๋นํ๊ฑฐ๋ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ ๋ ๊ทธ ๊ฐ์ด ๋ณต์ฌ๋์ง ์๊ณ ์ฐธ์กฐ๋๋ค๋ ์๋ฏธ
- Call by reference : ํ ๋น ๋๋ ํ๋ผ๋ฏธํฐ ์ ๋ฌ ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์ ๊ฐ์ด ๋ณต์ฌ๋ฉ๋๋ค.
- Heap Memory ์์ญ์ ํ ๋น๋ฉ๋๋ค. ๋ฐ๋ผ์ ์๋๊ฐ ๋๋ฆผ
- ๋ฐํ์์ ์ง์ allocate ํ๋ฉฐ reference counting ์ ํตํด deallocate๊ฐ ํ์
- ์์์ด ๊ฐ๋ฅ
- ๋ฐํ์์ ํ์ ์บ์คํ ์ ํตํด ํด๋์ค ์ธ์คํด์ค์ ๋ฐ๋ผ ์ฌ๋ฌ ๋์์ด ๊ฐ๋ฅ
- deinitializer ๊ฐ ์กด์ฌ, ํด๋์ค ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ๊ฐ๋ฅ
- ์ฐธ์กฐ ํ์
(Reference Type)
- ๊ตฌ์กฐ์ฒด
- ๊ฐ ํ์
(Value Type)
- ๊ฐ ํ์ : ํจ์์์ ์์๋ ๋ณ์๋ก ์ ๋ฌ๋ ๋ ๊ทธ ๊ฐ์ด ๋ณต์ฌ๋์ ์ ๋ฌ๋ ๋ค๋ ์๋ฏธ
- Call by value : ํ ๋น ๋๋ ํ๋ผ๋ฏธํฐ ์ ๋ฌ ์ value copy๊ฐ ๋ฐ์
- ๊ฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณต์ ๋ณ์๋ก ์ธํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ํ๋ฅ ์ด ์ ์
- Stack Memory ์์ญ์ ํ ๋น๋๋ฏ๋ก ์๋๊ฐ ๋น ๋ฆ
- Scope based lifetime : ์ปดํ์ผ ํ์์ ์ปดํ์ผ๋ฌ๊ฐ ์ธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น/ํด์ ํ ์ง ์ ํํ ์๊ณ ์์
- Data loclity : CPU ์บ์ฌ ํํธ์จ์ด ๋์
- ์์์ด ๋ถ๊ฐ๋ฅ
- AnyObject๋ก ํ์ ์บ์คํ ์ด ๋ถ๊ฐ
- ๊ฐ ํ์
(Value Type)
๋ฐ์ํ
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] assert์ guard (0) | 2023.02.06 |
---|---|
[Swift] ํ์ ์บ์คํ (0) | 2023.02.06 |
[Swift] ์ต์ ๋ (Optional) (0) | 2023.02.06 |
[ํ๋ก๊ทธ๋๋จธ์ค LV.1] ์์ธ์์ ๊น์๋ฐฉ ์ฐพ๊ธฐ (0) | 2023.02.06 |
[ํ๋ก๊ทธ๋๋จธ์ค LV.1] ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ ๊ธฐ๋ณธ (0) | 2023.02.06 |