์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด ์์๋ณด์.
๋จผ์ , ์๋ ๊ทธ๋ฆผ์ ํ๋ก๊ทธ๋จ์ ์ ๋ณด๋ฅผ ์ฝ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋ ๊ณผ์ ์ผ๋ก
ํ๋ก๊ทธ๋จ์ด ์คํํ๊ฒ ๋๋ฉด OS๋ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ๊ณต๊ฐ์ ํ ๋นํด์ค๋๋ค.
์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(RAM)์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด,
ํฌ๊ฒ ์ฝ๋(Code), ๋ฐ์ดํฐ(Data), ์คํ(Stack), ํ(Heap) ์์ญ์ผ๋ก ๋๋ฉ๋๋ค.
(๋ง์์ ๋๋ ์ด๋ฏธ์ง๊ฐ ์์ด์ ์ง์ ๋ง๋ค๋ค....!!๐)
๊ทธ๋ผ ๊ฐ ์์ญ์ด ์ด๋ค ์ญํ ์ ํ๋์ง ์์๋ด ์๋ค :)
โถ ์ฝ๋(Code) ์์ญ
- ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญ์ผ๋ก ๊ธฐ๊ณ์ด ํํ(0,1)๋ก ์ ์ฅ
- ์คํ ํ์ผ์ ๊ตฌ์ฑํ๋ ๋ช ๋ น์ด๋ค์ด ์ฌ๋ผ๊ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ํจ์, ์ ์ด๋ฌธ, ์์ ๋ฑ์ด ์ฌ๊ธฐ์ ์ง์ ๋๋ค.
- CPU๋ ์ฝ๋ ์์ญ์ ์ ์ฅ๋ ๋ช ๋ น์ด๋ค์ ํ๋์ฉ ๊ฐ์ ธ๊ฐ์ ์คํํ๋ค.
โถ ๋ฐ์ดํฐ(Data) ์์ญ
- ์ ์ญ ๋ณ์์ static ๋ณ์๊ฐ ํ ๋น๋๋ ์์ญ
- mainํจ์ ์ ์ ์ ์ธ๋์ด ํ๋ก๊ทธ๋จ์ ์์๊ณผ ๋์์ ํ ๋น๋๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ด์ผ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ๋จ
var a: Int = 10; // ์ ์ญ๋ณ์๋ก ๋ฐ์ดํฐ ์์ญ์ ํ ๋น
var b: Int = 20; // ์ ์ญ๋ณ์๋ก ๋ฐ์ดํฐ ์์ญ์ ํ ๋น
struct dataFunc(){
static let data = "data" // ์ ์ (static) ๋ณ์๋ก ๋ฐ์ดํฐ ์์ญ์ ํ ๋น
}
โถ ํ(Heap) ์์ญ
- ๋์ ์ผ๋ก ํ ๋น๋ ๋ณ์๊ฐ ํ ๋น๋๋ ์์ญ(Dynamic Memory Allocation)
- C++์์ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ฉด ์ด ๋ฉ๋ชจ๋ฆฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ ์ธ๊ทธ๋จผํธ์ ํ ๋น
int* ptr = new int; // ptr์ ํ์์ 4๋ฐ์ดํธ๋ก ํ ๋น๋๋ค.
int* array = new int[10]; // array๋ ํ์์ 40๋ฐ์ดํธ๋ก ํ ๋น๋๋ค.
๋์ ์ผ๋ก ํ ๋น๋ ๋ณ์๊ฐ ์ญ์ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ํ์ผ๋ก "๋ฐํ"๋๊ณ , ์ดํ ๋ค์ ํ ๋น๋ ์ ์๋ค. ํฌ์ธํฐ๋ฅผ ์ญ์ ํ๋ฉด ๋ณ์๊ฐ ์ญ์ ๋๋ ๊ฒ์ด ์๋๋ผ ๊ด๋ จ ์ฃผ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ ์ฒด์ ์ ๋ฐํํ๋ ๊ฒ์ด๋ค.
- ํ๋ก๊ทธ๋๋จธ๊ฐ ์ํ๋ ์์ ์ ๋ณ์๋ฅผ ํ ๋น(malloc, calloc)ํ๊ณ ์๋ฉธ์ ๊ฐ๋ฅํ๋๋ก ํ๋ ์์ญ
- ์ฌ์ฉํ๊ณ ๋ ํ ๋ฐ๋์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํด์ค์ผ ํจ, ๊ทธ๋ ์ง ์์ผ๋ฉด memory leak ๋ฐ์.(์์ฉ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ ์ง๋จ)
- ์์ญ ์ค ์ ์ผํ๊ฒ ๋ฐํ์ ์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์
- (In Swift) ํด๋์ค ์ธ์คํด์ค(Class Instance), ํด๋ก์ ๊ฐ์ ์ฐธ์กฐ ํ์
์ ๊ฐ์ด ๋ถ๋ถ์ ํด๋น.
- Swift๋ ARC๋ฅผ ํตํด ํ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์ด์ ์ธ๋ชจ ์์ด์ง๋ฉด(์ฐธ์กฐ๋์ง ์์ผ๋ฉด) ์๋์ผ๋ก ํด์ ํด์ค
- ๋ฉ๋ชจ๋ฆฌ ์์ชฝ ์ฃผ์๋ถํฐ ํ ๋น๋๋ ์ ์ ์ ์ถ(FIFO) ๊ตฌ์กฐ.
class Person {
var name: String?
var age: Int?
}
var person: Person = Person() // ํด๋์ค ์ธ์คํด์ค๋ ํ, person ๋ณ์๋ ์คํ ์์ญ์ ํ ๋น
โถ ์คํ(Stack) ์์ญ
- ํจ์ ํธ์ถ ์ ์์ฑ๋๋ ์ง์ญ ๋ณ์์ ๋งค๊ฐ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ
- ํจ์ ํธ์ถ์ด ์๋ฃ๋๋ฉด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋จ
- ๋ฉ๋ชจ๋ฆฌ ์๋์ชฝ ์ฃผ์๋ถํฐ ํ ๋น๋๋ ํ์ ์ ์ถ(LIFO) ๊ตฌ์กฐ.
func add(_ a: Int, _ b: Int) -> Int { // ํ๋ผ๋ฏธํฐ a,b ๋ ์คํ์ ํ ๋น
let result = a + b // ์ง์ญ๋ณ์ result๋ ์คํ์ ํ ๋น
return result
}
728x90
๋ฐ์ํ