M5 1 1
- 2. ์์ฑ์ ํจ์์ ๋น๋ฉค๋ฒ ํจ์๋ฅผ ๊ฐ์ ํจ์์ฒ๋ผ ๋ง๋๋ ๋ฐฉ๋ฒ
-๊ฐ์ ์์ฑ์-
์์ ์ด ๋ฐ์ ์
๋ ฅ ๋ฐ์ดํฐ์ ์์กดํ์ฌ
๋ค๋ฅธ ํ์
์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์
๊ฐ์ ๋ณต์ฌ ์์ฑ์๋ ํด๋น ํด๋์ค์ ์ง์ง ๋ณต์ฌ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก ๋
- 3. ๋น๋ฉค๋ฒ ํจ์๋ฅผ ๊ฐ์ ํจ์์ฒ๋ผ ๋์ํ๊ฒ ํ๋ ๋ฐฉ๋ฒ
์ํ๋ ์ผ์ ํ๋ ๊ฐ์ ํจ์๋ฅผ ๋ง๋ค์ด ๋๊ณ ,
๋น๊ฐ์ ํจ์์์ ํธ์ถ ํจ์๊ฐ ํ๋ฒ๋ ํธ์ถ๋๋ ๋น์ฉ์
์ธ๋ผ์ธ ์ ์ธ์ผ๋ก ์ ๊ฑฐ
- 4. ํด๋์ค ์ธ์คํด์ค์ ๊ฐ์๋ฅผ ์๋๋๋ก ์ ํํ๋ ๋ฐฉ๋ฒ
๊ฐ์ฒด๋ฅผ ์ ํ ์์ฑํ์ง ์๊ฑฐ๋ ํ ๊ฐ๋ง ์์ฑํ๊ธฐ
ํน์ ํ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง์ง ์๊ฒ ํ๋
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๊ทธ ํด๋์ค์ ์์ฑ์๋ฅผ private๋ก ์ ์ธ
- 5. ์์ฑ์๊ฐ private์ฌ์ ๊ฐ์ฒด ์์ฑ์ ํ ์์์ง๋ง
friend๋ก ์์ฑ์ ์ ํ์ ๋ฒ์ด๋ ์ํ์์
static์ผ๋ก ํ๋๋ฅผ ๋ง๋ค๊ณ ์ธ์ ๋ ๋ถ๋ฌ์ ์ฌ์ฉ
์ ์ญ๋ณ์๊ฐ ๊ฑฑ์ ๋๋ฉด
ํด๋์ค์ ์ ์ ๋ฉค๋ฒ ๋ณ์๋ก ๋๊ฑฐ๋
๋ค์์คํ์ด์ค์ ๋ฃ๋๋ค.
- 6. ํด๋์ค์ ์ ์ ๊ฐ์ฒด๊ฐ ์๋๋ผ ํจ์์ ์ ์ ๊ฐ์ฒด๋ฉด
์ด ํจ์๊ฐ ํธ์ถ๋์ง ์์ผ๋ฉด ๊ฐ์ฒด๋ ๋ง๋ค์ด์ง์ง ์๋๋ค.
!
๋ ํด๋์ค ์ ์ ๊ฐ์ฒด๋ฉด ์ด๊ธฐํ ์์ ์ด ๋ถ๋ช
ํํ๋ค.
- 7. ์ฌ์ค return ํ์ค์ง๋ฆฌ inline๊ณผ ๋ง์ฐฌ๊ฐ์ง์ง๋ง
inline์ ์ฌ์ฉํ๋ฉด ์ ์ ๊ฐ์ฒด๊ฐ ์ค๋ณต์ผ๋ก ์๊ธธ์ ์์ผ๋
์ ์ ๊ฐ์ฒด๋ฅผ ์ ์ธํ ๋น๋ฉค๋ฒ ํจ์๋ inline์ ํธ์ถํ์ง ๋ง์
ํ์ง๋ง ์์ฆ ์ปดํ์ผ๋ฌ๋ external์ฐ๊ฒฐ๋ก
๋ณ๊ฒฝํ๋ค๊ณ ํจโฆ
- 10. ํ(heap)์๋ง ์์ฑ๋๊ฑฐ๋ ํ์๋ ๋ง๋ค์ด์ง์ง ์๋
ํน์ํ ํด๋์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
๊ฐ์ฒด๊ฐ ์์ด(delete this)๋ฅผ ํ๊ฒ ๋ง๋ค๋ ค๋ฉด
๊ผญ ํ์ ํ ๋น๋์ด์ผํจ
!
๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ฐจ๋จํ๊ณ ์ถ์ผ๋ฉด
ํ์ ํ ๋นํ์ง ์๋๊ฒ๋ ๋ฐฉ๋ฒโฆ
!
์ด๊ฑธ ์ปจํธ๋กค ํ ๋ ค๋ฉด?
- 11. ๊ฐ์ฒด๊ฐ ํ์๋ง ์์ฑ๋๊ฒ ํ๊ธฐ
ํ์ผ๋ก ํ์ ์ง๋ ๋ฐฉ๋ฒ์ new์ด์ธ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด ์์ฑ์ ๊ธ์ง์ํด
!
์์ฑ์์ ์๋ฉธ์๋ก private๋ก ํ์โฆ
๋ ๋๋ฌด ์ ๋๋ฅผ ๋๋๋ค.
!
์์ฑ์๋ฅผ public์ผ๋ก ์๋ฉธ์๋ง private๋ก ํ๊ณ
์ง์ง ์๋ช
์๋ฅผ ํธ์ถํ๋ ์ ์ฌ ์๋ฉธ์๋ฅผ ๋ง๋ค์.
- 13. ์ ์ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ ๋ชปํจ
๊ทธ๋ฆฌ๊ณ ์ ๋ฒ ์์
๋ด์ฉ ์ฒ๋ผ ์ char๊ฐ ๋๋ถ๋ถ์ด ์๋
๋ค๋ฅธ ์๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ผ์ ์์๊นโฆ
- 16. ์ค๋งํธ ํฌ์ธํฐ(Smart pointer)
์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฐ๋ ์ด์
- ์์ฑ(construction)๊ณผ ์๋ฉธ(destruction) ์์
์ ์กฐ์
๋ฆฌ์์ค ๋์ ๋ง๊ณ ์ด๊ธฐํ๋ ํด์ค๋ค.
!
- ๋ณต์ฌ(copy)์ ๋์
(assignment) ๋์์ ์กฐ์
๊ฐ์ฒด, ํฌ์ธํฐ ๋ณต์ฌํ๋์ง ๋์
ํ๋์ง ๊ฒฐ์ ๊ฐ๋ฅ
!
- ์ญ์ฐธ์กฐ(dereferencing) ๋์์ ์กฐ์
๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ๋ ๊ฒฐ์ ๊ฐ๋ฅ
- 17. ์ค๋งํธ ํฌ์ธํฐ์ ์์ฑ, ๋์
, ์๋ฉธ
์์ฑ์ ๊ฐ๋ฆฌํฌ ๊ฐ์ฒด๋ฅผ ํ๋ ์ค๋นํ๊ณ ,
์ค๋งํธ ํฌ์ธํฐ์ ๋ด๋ถ์ ์๋ ๋ฒ์ด๋ฆฌ ํฌ์ธํฐ๋ฅผ
๊ทธ ๊ฐ์ฒด์ ์ฃผ์๋ก ์ธํ
ํ๋๊ฒ์ผ๋ก ๋
!
!
๊ทธ๋ฐ๋ฐ ๊ทธ๋ฅ ๋ฒ์ด๋ฆฌ ํฌ์ธํฐ์ ํฌ์ธํฐ ๋ณต์ฌํ๋ฉด
์ญ์ ๋ ๋ ๋๋ฒ์ญ์ ๋๋ ๋ฌธ์ ์์์ ์์
๊ทธ๋ฌ๋ฉด ๊ฐ ๋ณต์ฌ? -> ์ฑ๋ฅ ์ ํ
!
-> ๋ณต์ฌ ๋์
์ ๋ชปํ๊ฒ ํ๋ฉด ๋ฌธ์ ํด๊ฒฐ
!
->ํ์ง๋ง auto_ptr์ ๋ณต์ฌ, ๋์
๋ ๋ ์์ ๊ด๊ณ๋ฅผ ์ฎ๊น
!
-> ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ ์ฎ๊ธฐ๋ ๊ฒ์ ์ฃผ์
- 18. ์ญ์ฐธ์กฐ(Dereferencing) ์ฐ์ฐ์ ๊ตฌํํ๊ธฐ
operator*, operator-> ์ค๋งํธ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์
์ฐธ์กฐ์๋ฅผ ๋ฐํํด์ผ์ง ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ์ฌ๋ผ์ด์ค ๋ฌธ์ ๊ฐ ๋ฐ์
null์ผ๋๋ ์ด์ฉ์ ์์ ์์ธ์ฒ๋ฆฌ ํด์ผํจ
์ค๋งํธ ํฌ์ธํฐ๊ฐ null์ธ์ง ์ ๊ฒํ๊ธฐ
isNull๊ฐ์ ๋ฉค๋ฒ ํจ์๋ฅผ ์ถ๊ฐํ๋๊ฑด ๋ณ๋ก ์ค๋งํธ ํด๋ณด์ด์ง ์์
ํ์
๋ณํ ์ฐ์ฐ์๋ฅผ void*๋ก ๋ฐ๊พธ๋ฉด ์ค๋งํธ ํฌ์ธํฐ๊ฐ ๋์ด๋ฉด
0์ ๋ฐํํ๊ณ ์๋๋ฉด 0์ด ์๋ ๊ฐ์ ๋ฐํํ๋ค.
ํ์ง๋ง ์์ ์น ์์โฆ
- 19. ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ๋ฒ์ด๋ฆฌ ํฌ์ธํฐ๋ก ๋ณํํ๊ธฐ
์์์ ์ผ๋ก ํ์
์ ๋ณํํ๋ ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ๋ฉด ๋์ง๋ง
์ง์ ๋ฒ์ด๋ฆฌ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ์๋ค๊ฐ ์ฐธ์กฐ ์นด์ดํ
์ ํ์ํ ์ ๋ณด๊ฐ
์กฐ์ ๋์ง ์์์ ๋๋ฒ์ญ์ ๋๊ฑฐ๋ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค.
-> ๊ฐ๋ฅํ๋ฉด ํ์ง ๋ง์.
์ค๋งํธ ํฌ์ธํฐ์ ์์ ๊ธฐ๋ฐ์ ํ์
๋ณํ
์์ ๊ด๊ณ์ ์์ด๋ ์ค๋งํธ ํฌ์ธํฐ๋
๋ณํ์ ๋ชปํด์ค๋ค.
!
์์์ ํ์
์ฐ์ฐ์๋ฅผ ๋ง๋ค๊น?
-> ํ
ํ๋ฆฟ์ ์ฒ ํ๊ณผ ๋ค๋ฅด๋ค
-> ํด๋์ค ๊ณํต ๊ตฌ์กฐ๊ฐ ๊น์ผ๋ฉด
๋ ๋ง์ ๋ณํ ์ฐ์ฐ์ ์ถ๊ฐํด์ผํจ
!
์์์ ๋ณํ ์ฐ์ฐ์๋ฅผ ๋ง๋๋
ํ
ํ๋ฆฟ์ ๋ง๋ค์ -> ๊ฐ๋
์ฑ์ดโฆ
- 20. ์ค๋งํธ ํฌ์ธํฐ
์ค๋งํธ ํฌ์ธํฐ ์ธ๋ ค๋ฉด ์ ๊ฒฝ์จ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
๋ ์ ๊ฒ์ด๋ ๋ฒ์ด๋ฆฌ ํฌ์ธํฐ๋ก์ ๋ณํ,
์์ ๊ธฐ๋ฐ์ ๋ณํ, ์์ ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ ์ง์๋ฑ์ ์ํฉ์์๋
์ค๋งํธ ํฌ์ธํฐ ์ฌ์ฉ์ ์ ํํด์ผํจ
!
๊ตฌํ๋ ํ๋ค๊ณ ์ดํดํ๊ธฐ๋ ํ๋ค๊ณ ์ ์ง๋ณด์๋ ํ๋ค๋ค
๋๋ฒ๊น
๋ ํจ์ฌ ํ๋ค์ด ์ง๋ค.
!
ํ์ง๋ง ์ฐธ์กฐ ์นด์ดํ
์ฝ๋์์๋ ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด
์๋นํ ๋จ์ํด ์ง๋ค๋์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ๊ธฐ ํ๋ ๊ธฐ๋ฅ์
๊ตฌ์ฌํ๋๋ฐ ํจ๊ณผ์ ์ด๋ค.
- 21. ์ฐธ์กฐ ์นด์ดํ
(Reference Counting)
์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ค์ด ๋๊ฐ์ ๊ฐ์ ๊ฐ์ก์ผ๋ฉด,
๊ทธ ๊ฐ์ฒด๋ค๋ก ํ์ฌ๊ธ ๊ทธ ๊ฐ์ ๋ํ๋ด๋ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ฒ ํด์
๋ฐ์ดํฐ์ ์์ ์ ์ฝํ๋ ๊ธฐ๋ฒ
!
-ํ ๊ฐ์ฒด๋ฅผ ๋๋ฌ์ผ ๋ด๋ถ ์ ๋ณด๋ฅผ ์ ์งํ๋ ์์
์ ๋จ์ํ๊ฒ ํ์
-๋๊ฐ์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ค์ด ๊ทธ ์ค๋ณต์ ๋๋๋ ๊ฒ์ ๋ญ๋น
ํ์ง๋ง ์๋ฉธ์?
- 22. ์ฐธ์กฐ ํ์๋ฅผ ๊ธฐ๋กํ๊ณ ์๋ค๊ฐ
0์ด๋๋ฉด ์ญ์ ํด์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ง์
!
์ฌ์ฉ ์นด์ดํธ(use count)๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํจ
- 27. ์ฐธ์กฐ ์นด์ดํ
๊ธฐ๋ฅ์ ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค
๊ธฐ์กด์ ํด๋์ค์ ์์์ ๋ฐ๋ ๊ฒ์ผ๋ก ์ฐธ์กฐ ์นด์ดํธ ๊ธฐ๋ฅ์ ๋ฃ์.
-๊ธฐ๋ฅ-
์ฐธ์กฐ ์ถ๊ฐ(์นด์ดํธ ์ฆ๊ฐ)
์ฐธ์กฐ ์ ๊ฑฐ(์นด์ดํธ ๊ฐ์)
์ฐธ์กฐ ๊ฐ๋ฅ์ฑ ํ๋๊ทธ๋ก ํ๋๊ทธ ์กฐํ๋ ๋นํ์ฑํ
- 28. ์ฐธ์กฐ ์นด์ดํธ ์กฐ์์ ์๋ํํ๊ธฐ
์์ RCObject์๋ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ๊ณผ
์ฐธ์กฐ์นด์ดํธ๋ฅผ ์กฐ์ํ ์ ์๋ ๋ฉค๋ฒ ํจ์๊ฐ ์๋๋ฐ
์ด ํจ์๋ ์ง์ ํธ์ถํด ์ฃผ์ด์ผ ํ๋ ์ด๋ฐ ํธ์ถ ์ฝ๋๋
์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํด๋์ค์๊ฒ ๋ชฐ์์ค๋ณด์.
๊ฐ์ด ๋ค๋ฅด๋ฉด ๊ธฐ์กด์ ๊ฐ์ ์ ์ฅํ๊ณ
๊ณต์ ๋ ์ฌ๋ณธ์ ๋ง๋ค๊ณ
์ฐธ์กฐ ์ ๊ฑฐ
์๋ฉธ์๋ ๊ทธ๋ฅ ์ฐธ์กฐ ์ ๊ฑฐ
- 29. ์ฐธ์กฐ ์นด์ดํ
๊ฒฐ๋ก
์ข์ ๋ณด์ด์ง๋ง ๊ฒฐ๊ตญ ์ด๋ ์ํฉ์ ์ ํฉํ๋๊ฐ ์ค์
๋งค๋ฒ ์นด์ดํธ๋ฅผ ์ ์ดํ๊ณ ๋ณด๊ดํ๋ ๋น์ฉ๋ ์ถ๊ฐ๋ก ๋ค๊ณ
์ฝ๋๋ ๋ณต์กํ๊ฒ ๋๋ค. -> ์ ์ง๋ณด์ ํฌ
์๊ธฐ ์ฐธ์กฐํ(self-referential) ํน์
์ํ ์์กดํ (circular dependency)๊ตฌ์กฐ (ํธ๋ฆฌ ๋ฑ)์์๋
์ ์ฉ์ด ํ๋ค๋ค.
!
ํ์ง๋ง
์๋์ ์ผ๋ก ๋ง์ ๊ฐ์ฒด๋ค์ด ์๋์ ์ผ๋ก ์ ์ ๊ฐ์ ๊ณต์ ํ ๋,
์ด๋ค ๊ฐ์ฒด๊ฐ์ ์์ฑํ๊ฑฐ๋ ์๋ฉธ์ํค๋๋ฐ ๋ง์ ๋น์ฉ์ด ๋ค๊ฑฐ๋
๋ฉ๋ชจ๋ฆฌ ์๋ชจ๊ฐ ํด๋ ํฐ ํจ๊ณผ๋ฅผ ๋ฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์ฑ ์๋ฉธ์ ๋ ์ ๊ฒฝ์จ๋ ๋์ด์ ํธํ๋ค.
!
๊ทธ๋ฆฌ๊ณ ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ๋จํ๋ ๋ฐฉ๋ฒ์ ํ๋กํ์ผ๋ง