Effective C++ ์ •๋ฆฌ
Chap7~9
131054 ์ด์ธ์žฌ
ํ•ญ๋ชฉ 41 : ํ…œํ”Œ๋ฆฟ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์•”
์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ปดํŒŒ์ผ ํƒ€์ž„
ํ˜•์„ฑ๋ถ€ํ„ฐ
โ€ข ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ์ค‘์š”ํ•œ ์ ์€ ๋ช…
์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋Ÿฐํƒ€์ž„ ๋‹ค
ํ˜•์„ฑ
โ€ข ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์†Œ์Šค์ฝ”๋“œ์—์„œ
์ฐพ์œผ๋ฉด ์ด๊ฒƒ์ด ์–ด๋–ค ํ˜•ํƒœ์ธ์ง€
๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿฐ ์ธ
ํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œ์  ์ธํ„ฐํŽ˜์ด
์Šค
โ€ข ์†Œ์Šค ์ฝ”๋“œ์— ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ
๋‚˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
โ€ข class Widget{};
โ€ข void Do( Widget&
w){
};
โ€ข wํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€
์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜
์žˆ๋‹ค. ์ฆ‰ ๋ช…์‹œ์  ์ธ
ํ„ฐํŽ˜์ด์Šค
์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ปดํŒŒ์ผ ํƒ€
์ž„ ๋‹คํ˜•์„ฑ
โ€ข ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ปดํŒŒ์ผ
ํƒ€์ž„ ๋‹คํ˜•์„ฑ์€ ํ…œํ”Œ๋ฆฟ ์ผ๋ฐ˜ํ™”
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งค์šฐ ๋งŽ์ด ํ™œ
์šฉ
โ€ข ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ์ผ์–ด
๋‚˜๋Š” ์‹œ์ ์€ ์ปดํŒŒ์ผ ๋„์ค‘
โ€ข ์ด๊ฒƒ์„ ๊ฐ€๋ฆฌ์ผœ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹ค
ํ˜•์„ฑ
โ€ข template<typename T>
void Do(T& w)
{
โ€ฆ
}
์ด ํ•จ์ˆ˜์—์„œ๋Š” w ์˜ ํƒ€
์ž…์€ T๊ฐ€ ๋œ๋‹ค.
ํ•ญ๋ชฉ 41 ์ •๋ฆฌ
โ€ข ํด๋ž˜์Šค ๋ฐ ํ…œํ”Œ๋ฆฟ์€ ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹คํ˜•์„ฑ
์„ ์ง€์›ํ•จ
โ€ข ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ช…์‹œ์ ์ด๋ฉฐ ํ•จ์ˆ˜
์˜ ์‹œ๊ทธ๋„ˆ์ฒ˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค
ํ˜•์„ฑ์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚˜
ํƒ€๋‚จ
โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•”์‹œ์ ์ด
๋ฉฐ ์œ ํšจ ํ‘œํ˜„์‹์— ๊ธฐ๋ฐ˜์„ ๋‘์–ด ๊ตฌ์„ฑ
โ€ข ๋‹คํ˜•์„ฑ์€ ์ปดํŒŒ์ผ ์ค‘์— ํ…Œ๋ฏˆ๋ฆฟ ์ธ์Šคํ„ด์Šคํ™”์™€ ํ•จ
์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ ๋ชจํ˜ธ์„ฑ ํ•ด๊ฒฐ์„ ํ†ตํ•ด ๋‚˜ํƒ€๋‚จ
ํ•ญ๋ชฉ 42 : typename์˜ ๋‘๊ฐ€์ง€ ์˜
๋ฏธ
โ€ข ํ…œํ”Œ๋ฆฟ์˜ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ 
์–ธํ•  ๋•Œ๋Š” class์™€ typename
์˜ ๋œป์ด ์™„์ „ํžˆ ๋˜‘๊ฐ™๋‹ค
โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ข…์†๋œ ๊ฒƒ
์„ ๊ฐ€๋ฆฌ์ผœ ์˜์กด ์ด๋ฆ„์ด๋ผ๊ณ  ํ•œ
๋‹ค.
โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ป๋“  ์ƒ
๊ด€์—†๋Š” ํƒ€์ž… ์ด๋ฆ„์„ ๋น„์˜์กด ์ด
๋ฆ„์ด๋ผ๊ณ  ํ•œ๋‹ค.
โ€ข template<class T>class
W;
โ€ข template<typename T>
class W;
โ€ข ๋‘˜์€ ์ฐจ์ด๊ฐ€ ์—†๋‹ค.
โ€ข void Pro(const C& con){
C::const_iterator
iter(con.begin());
int value ;
}
โ€ข iter๋Š” ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜ C์—
์˜์กด์ ์ด๋‹ค.
value๋Š” C์— ์˜์กด์ ์ด์ง€ ์•Š
๋‹ค.
typename์˜ ์˜ˆ์™ธ
โ€ข typename ํ‚ค์›Œ๋“œ๋Š” ์ค‘์ฒฉ ์ด๋ฆ„ ์˜์กด๋งŒ ์‹๋ณ„ํ•˜๋Š”
๋ฐ ์จ์•ผ ํ•œ๋‹ค. ๊ทธ ์™ธ ์ด๋ฆ„์€ type-name์„ ๊ฐ€์ ธ์„ 
์•ˆ ๋œ๋‹ค.
โ€ข ์˜ˆ์™ธ์ ์œผ๋กœ ์ค‘์ฒฉ ์˜์กด ํƒ€์ž… ์ด๋ฆ„์ด ๊ธฐ๋ณธ ํด๋ž˜์Šค
์˜ ๋ฆฌ์ŠคํŠธ์— ์žˆ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ ๋‚ด์˜ ๊ธฐ
๋ณธ ํด๋ž˜์Šค ์‹๋ณ„์ž๋กœ์„œ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” typename
์„ ๋ถ™์—ฌ ์ฃผ๋ฉด ์•ˆ ๋œ๋‹ค.
ํ•ญ๋ชฉ 42 ์ •๋ฆฌ
โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ, class ๋ฐ
typename์€ ์„œ๋กœ ๋ฐ”๊พธ์–ด ์จ๋„ ๋ฌด๋ฐฉ
โ€ข ์ค‘์ฒฉ ์˜์กด ํƒ€์ž… ์ด๋ฆ„์„ ์‹๋ณ„ํ•˜๋Š” ์šฉ๋„์—๋Š” ๋ฐ˜๋“œ
์‹œ typename์„ ์‚ฌ์šฉ, ๋‹จ ์ค‘์ฒฉ ์˜์กด ์ด๋ฆ„์ด ๊ธฐ๋ณธ
ํด๋ž˜์Šค ๋ฆฌ์ŠคํŠธ์— ์žˆ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ ๋‚ด
์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค ์‹๋ณ„์ž๋กœ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์™ธ
ํ•ญ๋ชฉ 43 : ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„
๊ธฐ๋ณธ ํด๋ž˜์Šค ์•ˆ์˜ ์ด๋ฆ„์— ์ ‘๊ทผํ•˜
๋Š” ๋ฐฉ๋ฒ•
โ€ข ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์˜
์ •์˜์™€ ๋งˆ์ฃผ์น  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š”
๋Œ€์ฒด ์ด ํด๋ž˜์Šค๊ฐ€ ์–ด๋””์„œ ํŒŒ์ƒ
๋œ ๊ฒƒ์ธ์ง€๋ฅผ ๋ชจ๋ฆ„
โ€ข ์˜†์— ์˜ˆ์ œ์—์„œ Company๋Š” ํ…œ
ํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๊ณ , ์ด ํ…œํ”Œ๋ฆฟ
๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‚˜์ค‘๊นŒ์ง€ ๋ฌด์—‡์ด
๋ ์ง€ ์•Œ ์ˆ˜ ์—†์Œ
โ€ข Company๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€
๋„ ๋ชจ๋ฅด๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Œ
โ€ข template<typename Company>
class Msg{
public:
..
void sendClear(){ โ€ฆ };
};
โ€ฆ
class Log: public Msg{
sendClear();
};
โ€ข ๋‹ค์Œ์€ ์ปดํŒŒ์ผ์ด ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ
์ด๋‹ค.
๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
โ€ข ๊ธฐ๋ณธ ํด๋ž˜์Šค ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ๋ฌธ ์•ž์— โ€œthis->โ€๋ฅผ
๋ถ™์ธ๋‹ค.
this->sendClear();
โ€ข using ์„ ์€์„ ํ†ตํ•ด ํ•ด๊ฒฐ
using Msg<Company>::sendClear;
์ฆ‰ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ sendClear๊ฐ€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์žˆ
๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ผ ๊ณ  ์•Œ๋ ค์คŒ
ํ•ญ๋ชฉ 43 ์ •๋ฆฌ
โ€ข ํŒŒ์ƒ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์—์„œ ๊ธฐ๋ณธ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์˜
์ด๋ฆ„์„ ์ฐธ์กฐํ•  ๋•Œ๋Š” , โ€œthis->โ€๋ฅผ ์ ‘๋‘์‚ฌ๋กœ ๋ถ™์ธ๋‹ค
โ€ข using ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ( ์ด ํ•จ์ˆ˜
๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์กด์žฌํ•œ๋‹ค) ํ•˜์—ฌ ๊ธฐ๋ณธ ํด๋ž˜์Šค ํ•œ
์ •๋ฌธ์„ ๋ช…์‹œ์ ์œผ๋กœ ์จ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
ํ•ญ๋ชฉ 44 : ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋…๋ฆฝ์ ์ธ
์ฝ”๋“œ๋Š” ํ…œํ”Œ๋ฆฟ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ์‹œํ‚ค
์ž
โ€ข ํ…œํ”Œ๋ฆฟ์€ ์ฝ”๋”ฉ ์‹œ๊ฐ„ ์ ˆ์•ฝ, ์ฝ”
๋“œ ์ค‘๋ณต ํšŒํ”ผ์˜ ์ด์ ์ด ์žˆ๋‹ค.
โ€ข ๊ทธ๋Ÿฌ๋‚˜ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ํ…œํ”Œ๋ฆฟ
์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๋น„๋Œ€ํ™”๋ฅผ ์ดˆ
๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
-> ์„ฑ๋Šฅ ์ €ํ•˜ ์•ผ๊ธฐ
โ€ข ์ฆ‰ ํ…œํ”Œ๋ฆฟ์„ ๊ตฌ์„ฑํ•  ๋•Œ๋„ ์ฝ”๋“œ
์ค‘๋ณต์„ ํ”ผํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
โ€ข vector<int>
โ€ข vector<long>
โ€ข ์œ„์˜ ๋‘ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์„œ๋กœ ๋˜‘
๊ฐ™๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋”ฑ ์ฝ”๋“œ
๋น„๋Œ€ํ™”๊ฐ€ ๋˜๊ธฐ ์‰ฝ๋‹ค.
๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
โ€ข ํฌ์ธํ„ฐ ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ทจํ•˜๋Š” ๋™์ผ ๊ณ„์—ด์˜
ํ…œํ”Œ๋ฆฟ๋“ค ( list<int*>, list<const int*>,
list(SquareMatrix<long,3>*>๋“ฑ ์€ ์ด์ง„ ์ˆ˜์ค€์—์„œ
๋งŒ ๋ณด๋ฉด ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ์ง‘ํ•ฉ์„ ํ•œ ๋ฒŒ๋งŒ ์จ๋„ ๊ฐ€๋Šฅ
โ€ข ๊ธฐ์ˆ ์ ์œผ๋กœ ํƒ€์ž…์ œ์•ฝ์ด ์—„๊ฒฉํ•œ ํฌ์ธํ„ฐ(T* ํฌ์ธ
ํ„ฐ)๋ฅผ ์จ์„œ ๋™์ž‘ํ•˜๋Š” ๋ฉค๋ฒ„ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ํ•˜
๋‹จ์—์„œ ํƒ€์ž…๋ฏธ์ • ํฌ์ธํ„ฐ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฒ„์ „์„ ํ˜ธ
์ถœ
ํ•ญ๋ชฉ 44 ์ •๋ฆฌ
โ€ข ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„์Šท๋น„์Šทํ•œ ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜๊ฐ€
์—ฌ๋Ÿฌ ๋ฒŒ ๋งŒ๋“ค์–ด์ง„๋‹ค ๋”ฐ๋ผ์„œ ํ…œํ”Œ๋ฆฟ ๋ฐฐ๊ฐœ๋ณ€์ˆ˜์—
์ข…์†๋˜์ง€ ์•Š์€ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ๋Š” ๋น„๋Œ€ํ™”์˜ ์›์ธ
โ€ข ๋น„ํƒ€์ž… ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ƒ๊ธฐ๋Š” ์ฝ”๋“œ ๋น„๋Œ€ํ™”
์˜ ๊ฒฝ์šฐ, ํ…Œ๋ฏˆ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•จ์ˆ˜๋งค๊ฐœ๋ณ€์ˆ˜ ํ˜น์€
ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๋น„๋Œ€ํ™”๋ฅผ ์—†์•จ
๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
โ€ข ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ƒ๊ธฐ๋Š” ์ฝ”๋“œ ๋น„๋Œ€ํ™”์˜ ๊ฒฝ์šฐ, ๋™
์ผํ•œ ์ด์ง„ ํ‘œํ˜„๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ธ์Šคํ„ด์Šคํ™”๋˜๋Š”
ํƒ€์ž…๋“ค์ด ํ•œ ๊ฐ€์ง€ ํ•จ์ˆ˜ ๊ตฌํ˜„์„ ๊ณต์œ ํ•˜๊ฒŒ ๋งŒ๋“ฆ์œผ
๋กœ ๋น„๋Œ€ํ™”๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
ํ•ญ๋ชฉ 45 : ํ˜ธํ™˜๋˜๋Š” ๋ชจ๋“  ํƒ€์ž…์„
๋ฐ›์•„๋“ค์ด๋Š” ๋ฐ๋Š” ํ…œํ”Œ๋ฆฟ์ด ๋‹ต์ด
๋‹ค
โ€ข ํƒ€์ž… ๋ณ€ํ™˜์„ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ
์จ์„œ ํ•˜๋ ค๋ฉด ๋ฌด์ฒ™ ๊นŒ๋‹ค๋กญ๋‹ค.
โ€ข ๋Œ€์‹  ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๋Š” ์•”์‹œ์  ๋ณ€
ํ™˜์„ ์ง€์›ํ•˜์—ฌ ํŒŒ์ƒํด๋ž˜์Šค ใ…‚
ํฌ์ธํ„ฐ๊ฐ€ ์•”์‹œ์ ์œผ๋กœ ๊ธฐ๋ณธ ํด
๋ž˜์Šค ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜๊ฐ€๋Šฅํ•˜๋‹ค
โ€ข ์ฆ‰ ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๊ฐ€ ํƒ€์ž… ๋ณ€ํ™˜์—
์กฐ๊ธˆ ๋” ์šฉ์ดํ•˜๋‹ค
โ€ข class Top { โ€ฆ };
class Middle : public Top { โ€ฆ };
class Bottom: public Middle { โ€ฆ };
Top *pt1 = new Middle;
Top *pt2 = new Bottom
์ฆ‰, ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ์•”์‹œ
์  ๋ณ€ํ™˜์„ ํ†ตํ•ด ๊ธฐ๋ณธํด๋ž˜์Šค ํฌ์ธ
ํ„ฐ๋กœ ํŒŒ์ƒ ํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ
์Œ
์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ํ…œํ”Œ
๋ฆฟ์„ ์“ฐ์ž
โ€ข ์ƒ์„ฑ์ž ํ…œํ”Œ๋ฆฟ์€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์˜ ํ•œ๊ฐ€์ง€ ์˜ˆ์ด๋‹ค
template<typename T>
class SmartPtr {
public:
template<typename U >
SmartPtr( const SmartPtr<U>& other);
};
๋ชจ๋“  T ํƒ€์ž… ๋ฐ ๋ชจ๋“  U ํƒ€์ž…์— ๋Œ€ํ•ด์„œ SmartPtr<T>๊ฐ์ฒด
๊ฐ€ SmartPtr<U>๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Œ
โ€ข ์ด๋Ÿฐ ๊ผด์˜ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์ผ๋ฐ˜ํ™” ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋ผ ํ•œ๋‹ค
โ€ข ๊ธฐ๋ณธ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ SmartPointerํ™œ์šฉ ๊ฐ€๋Šฅ
ํ•ญ๋ชฉ 45 ์ •๋ฆฌ
โ€ข ํ˜ธํ™˜๋˜๋Š” ๋ชจ๋“  ํƒ€์ž…์„ ๋ฐ›์•„๋“ค์ด๋Š” ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ
๋งŒ๋“ค๋ ค๋ฉด ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋‹ค์ž
โ€ข ์ผ๋ฐ˜ํ™”๋œ ๋ณต์‚ฌ ์ƒ์„ฑ ์—ฐ์‚ฐ๊ณผ ์ผ๋ฐ˜ํ™”๋œ ๋Œ€์ž… ์—ฐ์‚ฐ
์„ ์œ„ํ•ด ๋ฉค๋ฒ„ ํ…œํ”Œ๋ฆฟ์„ ์„ ์–ธํ–ˆ๋‹ค ํ•˜๋”๋ผ๋„, ๋ณดํ†ต
์˜ ๋ณต์‚ฌ ์ƒ์„ฑ์ž์™€ ๋ณต์‚ฌ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋Š” ์—ฌ์ „ํžˆ ์ง
์ ‘ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค
ํ•ญ๋ชฉ 46 : ํƒ€์ž… ๋ณ€ํ™˜์ด ๋ฐ”๋žŒ์งํ•  ๊ฒฝ์šฐ
์—๋Š” ๋น„๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ
์•ˆ์— ์ •์˜
โ€ข ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ์ปดํŒŒ์ผ์ด ๋˜์ง€ ์•Š
๋Š”๋‹ค
โ€ข ํ…œํ”Œ๋ฆฟ ๋ฒ„์ „์˜ Rational์—๋Š”
์‹ค์ œ๋กœ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ ค
๋Š”์ง€์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ๋กœ์„œ๋Š” ์•Œ
์ˆ˜ ์—†๋‹ค ๋‹จ์ง€ ์ปดํŒŒ์ผ๋Ÿฌ๋Š”
operator*๋ผ๋Š” ์ด๋ฆ„์˜ ํ…œํ”Œ๋ฆฟ
์œผ๋กœ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šคํ™” ํ•  ํ•จ์ˆ˜
๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅ
โ€ข ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” T๋ฅผ ์•Œ์•„
์•ผ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
โ€ข template<typename T>
class Rational {
public:
Rational(const T& numerator = 0, const T&
denominator = 1);
โ€ฆ
};
template<typename T>
const Rational<T> operator*(const Rational<T>&
lhs, const Rational<T>& rhs>
Rational<int> oneHalf(1,2);
Rational<int> result = oneHalf *2;
์ด ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
operator* ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ์„ ์„ 
์–ธ๋ถ€์™€ ๋ถ™์ด์žโ€ข class Rational {
public:
โ€ฆ
friend const Rational operator* (const
Rational& lhs, const Rational& rhs) {
return Rational( lhs.numerator() *
rhs.numerator(),
lhs.denominator() *
rhs.denominator() );
โ€ข ํ”„๋ Œ๋“œ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ์ง€๋งŒ ํด๋ž˜์Šค์˜ public์˜์—ญ์ด
์•„๋‹Œ ๋ถ€๋ถ„์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๊ณผ ํ”„๋ Œ๋“œ ๊ถŒํ•œ์€ ์•„๋ฌด๋Ÿฐ
์ƒ๊ด€์ด ์—†์Œ
ํ•ญ๋ชฉ 46 ์ •๋ฆฌ
โ€ข ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์•”์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜์„ ์ง€์›
ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด
๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ์ด๋Ÿฐ ํ•จ์ˆ˜๋Š” ํด
๋ž˜์Šค ํ…œํ”Œ๋ฆฟ ์•ˆ์— ํ”„๋ Œ๋“œ ํ•จ์ˆ˜๋กœ์„œ ์ •์˜
ํ•ญ๋ชฉ 47 : ํƒ€์ž…์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€
ํ•„์š”ํ•˜๋‹ค๋ฉด ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋ฅผ
์‚ฌ์šฉํ•˜์ž
โ€ข ํŠน์„ฑ์ •๋ณด๋ž€ ์ปดํŒŒ์ผ ๋„์ค‘์— ์–ด๋–ค ์ฃผ์–ด์ง„ ํƒ€์ž…์˜
์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์นญํ•˜๋Š” ๊ฐœ๋…
โ€ข ํŠน์„ฑ์ •๋ณด๋Š” ๋ฌธ๋ฒ•๊ตฌ์กฐ๋‚˜ ํ‚ค์›Œ๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค
โ€ข C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์˜ ๊ตฌํ˜„ ๊ธฐ๋ฒ•์ด๋ฉฐ ๊ด€๋ก€
ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค์˜ ์„ค๊ณ„ ๋ฐ
๊ตฌํ˜„ ๋ฐฉ๋ฒ•
โ€ข ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋„๋ก ์—ด์–ด ์ฃผ๊ณ  ์‹ถ์€ ํƒ€์ž… ๊ด€
๋ จ ์ •๋ณด๋ฅผ ํ™•์ธ( ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ˜๋ณต์ž๋ผ๋ฉด ๋ฐ˜๋ณต์ž
๋ฒ”์ฃผ ๋“ฑ)
โ€ข ๊ทธ ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„์„ ์„ ํƒ
โ€ข ์ง€์›ํ•˜๊ณ ์ž ํ•˜๋Š” ํƒ€์ž… ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…œํ”Œ๋ฆฟ
๋ฐ ๊ทธ ํ…œํ”Œ๋ฆฟ์˜ ํŠปํ™”๋ฒ„์ „์„ ์ œ๊ณต
ํ•ญ๋ชฉ 47 ์ •๋ฆฌ
โ€ข ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋Š” ์ปดํŒŒ์ผ ๋„์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ
๋Š” ํƒ€์ž… ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด๋ƒ„
โ€ข ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋Š” ํ…œํ”Œ๋ฆฟ ๋ฐ ํ…œํ”Œ๋ฆฟ ํŠน์ˆ˜ ๋ฒ„์ „
์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„
โ€ข ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ ๊ธฐ๋ฒ•๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ํŠน์„ฑ์ •๋ณด ํด๋ž˜
์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋˜๋Š” ํƒ€์ž…๋ณ„
ifโ€ฆelse์ ๊ฒ€๋ฌธ์„ ๊ตฌ์‚ฌ ๊ฐ€๋Šฅ
ํ•ญ๋ชฉ 48 : ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ
โ€ข ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํŒŒ
์ผ ๋„์ค‘์— ์‹คํ–‰๋˜๋Š” ํ…œํ”Œ๋ฆฟ ๊ธฐ
๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋žจ
โ€ข ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊นŒ๋‹ค๋กญ๊ฑฐ๋‚˜
๋ถˆ๊ฐ€๋Šฅํ•œ ์ผ์„ ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ํ• 
๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊น€
โ€ข ์ปดํŒŒ์ผ์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ์— ์‹ค
ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ์ž‘์—…์„ ๋Ÿฐ
ํƒ€์ž„ ์˜์—ญ์—์„œ ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜
์—ญ์œผ๋กœ ์ „ํ™˜ ๊ฐ€๋Šฅ
โ€ข ๋ชจ๋“  ๋ฉด์—์„œ ํšจ์œจ์ด ์ข‹์„ ๊ฐ€๋Šฅ
์„ฑ์ด ์žˆ์Œ
-> ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋™์ž‘์„ ํ•ด์„œ
์‹คํ–‰์ฝ”๋“œ๊ฐ€ ์ž‘์•„์ง€๊ณ  ์‹คํ–‰์‹œ๊ฐ„
๋„ ์งง์•„์ง, ๋ฉ”๋ชจ๋ฆฌ๋„ ์ ๊ฒŒ๋จน์Œ
โ€ข template<unsigned n>
struct Factorial {
enum { value = n* Factorial<n-1>::value);
};
template<>
struct Factorial<0>{
enum { value = 1 };
};
ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ factorial ์ž‘์„ฑ
Factorial<5>::value ๋Š” 120์„ ๋Ÿฐํƒ€์ž„ ๊ณ„์‚ฐ
์—†์ด ์ถœ๋ ฅ!
๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ข‹์€
์˜ˆ
โ€ข ์น˜์ˆ˜ ๋‹จ์œ„์˜ ์ •ํ™•์„ฑ ํ™•์ธ : ๊ณผํ•™๊ธฐ์ˆ  ๋ถ„์•ผ์˜ ์‘์šฉ
ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ ์œ ๋ฆฌ
โ€ข ํ–‰๋ ฌ ์—ฐ์‚ฐ์˜ ์ตœ์ ํ™”
โ€ข ๋งž์ถค์‹ ๋””์ž์ธ ํŒจํ„ด ๊ตฌํ˜„์˜ ์ƒ์„ฑ - ๋””์ž์ธ ํŒจํ„ด์—
๋Œ€ํ•œ ๊ตฌํ˜„๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€์ผ ๋•Œ ๊ธฐ๋ฐ˜์„ ์„ค๊ณ„ํ• 
์ˆ˜ ์žˆ์Œ
ํ•ญ๋ชฉ 48 ์ •๋ฆฌ
โ€ข ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ธฐ์กด ์ž‘์—…์„ ๋Ÿฐํƒ€์ž„์—
์„œ ์ปดํŒŒ์ผ ํƒ€์ž„์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๋ƒ„. ๋”ฐ๋ผ์„œ
TMP๋ฅผ ์“ฐ๋ฉด ์„ ํ–‰ ์—๋Ÿฌ ํƒ์ง€์™€ ๋†’์€ ๋Ÿฐํƒ€์ž„ ํšจ์œจ
์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
โ€ข TMP๋Š” ์ •์ฑ… ์„ ํƒ์˜ ์กฐํ•ฉ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •
์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋˜ํ•œ ํŠน์ •
ํƒ€์ž…์— ๋Œ€ํ•ด ๋ถ€์ ์ ˆํ•œ ์ฝ”๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์„
๋ง‰๋Š” ๋ฐ๋„ ์“ธ ์ˆ˜ ์žˆ์Œ
ํ•ญ๋ชฉ 49 : new์ฒ˜๋ฆฌ์ž์˜ ๋™์ž‘ ์›
๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ž
โ€ข ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ€ํƒํ•œ ๋งŒํผ์˜ ๋ฉ”๋ชจ
๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด ์ฃผ์ง€ ๋ชปํ•˜๋ฉด
operator new ๋Š” ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ
๋ฆฌ๋ฅผ ์ฐพ์•„๋‚ผ ๋•Œ๊นŒ์ง€ new ์ฒ˜๋ฆฌ
์ž๋ฅผ ๋˜ํ’€์ดํ•ด์„œ ํ˜ธ์ถœ
โ€ข Class X{
public:
static void outOfMemory();
โ€ฆ
};
Class Y{
public:
static void outOfMemory();
โ€ฆ
};
X* p1 = new X;
Y* p2 = new Y;
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ๋‘ ๊ฒฝ์šฐ, ๊ฐ ํด๋ž˜์Šค๋Š”
OutofMemory๋ฅผ ํ˜ธ์ถœ
new ์ฒ˜๋ฆฌ์ž ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ์‹œ ์ฃผ
์˜ํ•  ์ 
โ€ข ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ๋งŽ์ด ํ™•๋ณด
โ€ข ๋‹ค๋ฅธ new ์ฒ˜๋ฆฌ์ž๋ฅผ ์„ค์น˜
โ€ข new ์ฒ˜๋ฆฌ์ž์˜ ์„ค์น˜๋ฅผ ์ œ๊ฑฐ - null pointer๋ฅผ ๋„˜๊น€
โ€ข ์˜ˆ์™ธ๋ฅผ ๋˜์ง - bad_alloc๋“ฑ์˜ ์˜ˆ์™ธ๋ฅผ ๋˜์ง
โ€ข ๋ณต๊ท€ํ•˜์ง€ ์•Š์Œ - abort ํ˜น์€ exit ghcnf
ํ•ญ๋ชฉ 49 ์ •๋ฆฌ
โ€ข set_new_handler ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ
์ด ๋งŒ์กฑ๋˜์ง€ ๋ชปํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ• 
์ˆ˜ ์žˆ์Œ
โ€ข ์˜ˆ์™ธ๋ถˆ๊ฐ€ new๋Š” ์˜ํ–ฅ๋ ฅ์ด ์ œํ•œ๋˜์–ด ์žˆ์Œ - ๋ฉ”๋ชจ
๋ฆฌ ํ• ๋‹น ์ž์ฒด์—๋งŒ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ. ์ดํ›„์— ํ˜ธ์ถœ๋˜
๋Š” ์ƒ์„ฑ์ž์—๋Š” ์–ผ๋งˆ๋“ ์ง€ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์Œ
ํ•ญ๋ชฉ 50 :new ๋ฐ delete๋ฅผ ์–ธ์ œ
๋ฐ”๊ฟ”์•ผ ์ข‹์€ ์†Œ๋ฆฌ๋ฅผ ๋“ค์„์ง€ ํŒŒ์•…
โ€ข ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ค€ operator new์™€ operator delete๋ฅผ ๋ฐ”๊พธ๊ณ ์‹ถ์€ ์ด์œ 
?
โ€ข ์ž˜๋ชป๋œ ํž™ ์‚ฌ์šฉ์„ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด
โ€ข ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด
โ€ข ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์‚ฌ์šฉ์— ๊ด€ํ•œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด
๋‹ค์‹œํ•œ๋ฒˆ ํ•„์š”ํ•œ ์กฐ๊ฑด ์ฒด
ํฌโ€ข ์ž˜๋ชป๋œ ํž™ ์‚ฌ์šฉ์„ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด
โ€ข ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์‚ฌ์šฉ์— ๊ด€ํ•œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ˆ˜
์ง‘ํ•˜๊ธฐ ์œ„ํ•ดํ• ๋‹น ๋ฐ ํ•ด์ œ ์†๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด
โ€ข ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์˜ ๊ณต๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด
โ€ข ์ ๋‹นํžˆ ํƒ€ํ˜‘ํ•œ ๊ธฐ๋ณธ ํ• ๋‹น์ž์˜ ๋ฐ”์ดํŠธ ์ •๋ ฌ ๋™์ž‘์„ ๋ณด์žฅ
ํ•˜๊ธฐ ์œ„ํ•ด
โ€ข ์ž„์˜์˜ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ ๊ตฐ๋ฐ์•  ๋‚˜๋ž€ํžˆ
๋ชจ์•„ ๋†“๊ธฐ ์œ„ํ•ด
โ€ข ๊ทธ๋•Œ๊ทธ๋–„ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด
ํ•ญ๋ชฉ 50 ์ •๋ฆฌ
โ€ข ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šค์Šค๋กœ ์‚ฌ์šฉ์ž ์ •์˜ new ๋ฐ delete๋ฅผ
์ž‘์„ฑํ•˜๋Š” ๋ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋‚˜๋ฆ„๋Œ€๋กœ ํƒ€๋‹นํ•œ ์ด์œ 
๊ฐ€ ์žˆ๋‹ค ์—ฌ๊ธฐ์—๋Š” ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๋Š” ๋ชฉ์ , ํž™
์‚ฌ์šฉ์‹œ์˜ ์—๋Ÿฌ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋ ค๋Š” ๋ชฉ์ , ํž™์‚ฌ์šฉ ์ •
๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋ ค๋Š” ๋ชฉ์  ๋“ฑ์ด ํฌํ•จ
ํ•ญ๋ชฉ 51 : new ๋ฐ delete๋ฅผ ์ž‘์„ฑํ• 
๋•Œ ๋”ฐ๋ผ์•ผ ํ•  ๊ธฐ์กด์˜ ๊ด€๋ก€๋ฅผ ์ž˜ ์•Œ
์•„๋‘์žโ€ข operator new์˜ ๋ฐ˜ํ™˜ ๊ฐ’ ๋ถ€๋ถ„์€ ์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งˆ๋ จํ•ด ์ค„ ์ˆ˜ ์žˆ
์œผ๋ฉด ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜, ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์œผ๋ฉด bad_alloc
ํ˜ธ์ถœ
โ€ข operator new ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค ์ชฝ์œผ๋กœ ์ƒ์†์ด ๋˜๋Š” ํ•จ์ˆ˜
โ€ข ๋ฐฐ์—ด์•ˆ์— ๋ช‡ ๊ฐœ ์˜ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐˆ ์ง€ ๊ณ„์‹ผํ•˜๋Š” ๊ฒƒ ์–ด๋ ค์›€ -> ๊ฐ์ฒด
ํ•˜๋‚˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ํฐ์ง€๋ฅผ ํ™•์ •ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Œ
โ€ข operator new[]์— ๋„˜์–ด๊ฐ€๋Š” size_t ํƒ€์ž…์˜ ์ธ์ž๋Š” ๊ฐ์ฒด๋“ค์„ ๋‹ด๊ธฐ์—
๋”ฑ ๋งž๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘๋ณด๋‹ค ๋” ๋งŽ๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ
โ€ข ๊ฐ€์ƒ ์†Œ๋ฉธ์ž๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ
์‚ญ์ œํ•˜๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ์—๋Š” operator delete๋กœ C++๊ฐ€ ๋„˜๊ธฐ๋Š” size_t๊ฐ’
์ด ์—‰ํ„ฐ๋ฆฌ ์ผ ์ˆ˜ ์žˆ์Œ
ํ•ญ๋ชฉ 51 ์ •๋ฆฌ
โ€ข ๊ด€๋ ˆ์ ์œผ๋กœ operator new ํ•จ์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„
๋ฐ˜๋ณตํ•ด์„œ ์‹œ๋„ํ•˜๋Š” ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๊ณ , ๋ฉ”
๋ชจ๋ฆฌ ํ• ๋‹น ์š”๊ตฌ๋ฅผ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์—†์„ ๋•Œ new์ฒ˜๋ฆฌ
์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฉฐ, 0๋ฐ”์ดํŠธ์— ๋Œ€ํ•œ ๋Œ€์ฑ…๋„ ์žˆ
์–ด์•ผ ํ•จ
โ€ข ํด๋ž˜์Šค ์ „์šฉ ๋ฒ„์ „์€ ์ž์‹ ์ด ํ• ๋‹นํ•˜๊ธฐ๋กœ ์˜ˆ์ •๋œ
ํฌ๊ธฐ๋ณด๋‹ค ๋” ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ๋Œ€ํ•œ ์š”๊ตฌ๋„ ์ฒ˜๋ฆฌ
โ€ข operator delete ํ•จ์ˆ˜๋Š” ๋„ ํฌ์ธํ„ฐ๊ฐ€ ๋“ค์–ด์™”์„ ๋–„
์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ
ํ•ญ๋ชฉ 52 : ์œ„์น˜์ง€์ • new๋ฅผ ์ž‘์„ฑ
ํ•œ๋‹ค๋ฉด ์œ„์น˜์ง€์ • delete๋„ ๊ฐ™์ด
์ค€๋น„ํ•˜์ž
โ€ข ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์ด ํ•ด์ฃผ์–ด์•ผ ํ•˜
๋Š” ์ผ์€ ์ž์‹ ์ด ํ˜ธ์ถœํ•œ
operator new ํ•จ์ˆ˜์™€ ์ง์ด ๋˜
๋Š” ๋ฒ„์ „์˜ operator deleteํ•จ
์ˆ˜๋ฅผ ํ˜ธ์ถœ
โ€ข ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์€ ํ˜ธ์ถœ๋œ
operator new๊ฐ€ ๋ฐ›์•„๋“ค์ด๋Š”
๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜ ๋ฐ ํƒ€์ž…์ด ๋˜‘
๊ฐ™์€ ๋ฒ„์ „์˜ operator delete
๋ฅผ ์ฐพ๊ณ  ์ฐพ์•„๋ƒˆ์œผ๋ฉด ํ˜ธ์ถœ.
โ€ข ์ฆ‰ ์ง์„ ์ด๋ฃจ๋Š” ์‹œ๊ทธ๋„ˆ์ฒ˜
โ€ข Widget *pw = new Widget
์ด ์‹คํ–‰์ด ๋˜๋ฉด ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„
์œ„ํ•ด operator new๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , ๊ทธ ๋’ค
๋ฅผ ์ด์–ด Widget์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
์ด๋•Œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์„ ํ•˜๋ฉด์„œ ์˜ˆ์™ธ
๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•˜๋ฉด ์ด ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œ
๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค!
-> C++ ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์—์„œ ๋งก์•„์„œ ํ•จ
์œ„์น˜์ง€์ • ์ฃผ์˜ ํ•  ์ 
โ€ข ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ๋ฐ›๋Š” new๋ฅผ ์œ„์น˜์ง€์ • ์ด๋ผ๊ณ  ํ•œ๋‹ค
โ€ข operator delete์—ญ์‹œ ์ด ์œ„์น˜์ง€์ •๊ณผ ๋˜‘๊ฐ™์€ ์‹œ๊ทธ๋„ˆ์ฒ˜๋ฅผ ๊ฐ€์ง„ ๊ฒƒ์ด
์–ด์•ผํ•œ๋‹ค
-> ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค delete๋ฅผ ํ˜ธ์ถœํ•˜๋Š”์ง€ ๊ฐˆํŒก์งˆํŒก ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด
๋‹ค
โ€ข ๋”ฐ๋ผ์„œ ์œ„์น˜์ง€์ •์„ ํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” delete๋„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค
ํ•ญ๋ชฉ 52 ์ •๋ฆฌ
โ€ข operator newํ•จ์ˆ˜์˜ ์œ„์น˜์ง€์ • ๋ฒ„์ „์„ ๋งŒ๋“ค ๋–„๋Š”
์ด ํ•จ์ˆ˜์™€ ์ง์„ ์ด๋ฃจ๋Š” ์œ„์น˜์ง€์ • ๋ฒ„์ „์˜
operator deleteํ•จ์ˆ˜๋„ ๊ผญ ๋งŒ๋“ค์–ด์•ผ ํ•จ -> ๋ฉ”๋ชจ๋ฆฌ
๋ˆ„์ถœ ์œ„ํ—˜์„ฑ
โ€ข new ๋ฐ delete์˜ ์œ„์น˜์ง€์ • ๋ฒ„์ „์„ ์„ ์–ธํ•  ๋•Œ๋Š”,
์˜๋„ํ•œ ๋ฐ”๋„ ์•„๋‹Œ๋ฐ ์ด๋“ค์˜ ํ‘œ์ค€ ๋ฒ„์ „์ด ๊ฐ€๋ ค์ง€
๋Š” ์ผ์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ฃผ์˜
ํ•ญ๋ชฉ 53: ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ
์ง€๋‚˜์น˜์ง€ ๋ง์ž
โ€ข ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ์‰ฝ๊ฒŒ ์ง€๋‚˜์น˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค ->
ํ›„์— ๋ถ„๋ช…ํžˆ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ์ผ์ด ์‹ญ์ค‘ํŒ”๊ตฌ
โ€ข ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ์— ๋„ˆ๋ฌด ์˜์ง€ํ•˜๋Š” ์ผ์„ ํ•˜์ง€ ๋ง ๊ฒƒ
-> ์ปดํŒŒ์ผ๋Ÿฌ๋งˆ๋‹ค ๊ฒฝ๊ณ ๋ฅผ ๋‚ด๋Š” ๋ถ€๋ถ„์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ
๋ฌธ์ด๋‹ค.
ํ•ญ๋ชฉ 54: TR1์„ ํฌํ•จํ•œ ํ‘œ์ค€ ๋ผ
์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ์™€ ํŽธ์•ˆํ•œ ์นœ
๊ตฌ๊ฐ€ ๋˜์ž
โ€ข ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (STL) : ์ปจํ…Œ์ด๋„ˆ, ๋ฐ˜๋ณต
์ž, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ,ํ•จ์ˆ˜๊ฐ์ฒด ๋“ฑ์„ ๋‹ด๊ณ  ์žˆ์Œ
โ€ข iostream, ๊ตญ์ œํ™” ์ง€์›, ์ˆ˜์น˜ ์ฒ˜๋ฆฌ ์ง€์›
โ€ข ์˜ˆ์™ธ ํด๋ž˜์Šค ๊ณ„ํ†ต ์ง€์›
โ€ข ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉ์˜
ํšจ์œจ์„ฑ์„ ํ‚ค์šฐ์ž
ํ•ญ๋ชฉ 55: ๋ถ€์ŠคํŠธ๋ฅผ ๋Š˜ ์—ฌ๋Ÿฌ
๋ถ„ ๊ฐ€๊นŒ์ด์—โ€ข ๋ถ€์ŠคํŠธ๋Š” C++ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋‹จ์ฒด์ด์ž ๋ฌด๋ฃŒ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๊ฐ€
๋Šฅํ•œ C++๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง‘ํ•ฉ์„ ๋™์‹œ์— ์ผ์ปซ๋Š” ๊ณ ์œ ๋ช…์‚ฌ ->
์›น์‚ฌ์ดํŠธ http://boost.org์— ๋ฐฉ๋ฌธํ•˜์—ฌ ๋งŒ๋‚  ์ˆ˜ ์žˆ์Œ
โ€ข ๋ถ€์ŠคํŠธ๋Š” C++ํ‘œ์ค€ํ™” ์œ„์›ํšŒ์™€ ๋ฐ€์ ‘ํ•˜๊ณ  ์˜ํ–ฅ๋ ฅ์žˆ๋Š” ๊ด€
๊ผ ์œ ์ง€
โ€ข ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šน์ธ ์‹ฌ์‚ฌ๋Š” ๊ณต๊ฐœ ๋™๋ฃŒ ์‹ฌ์‚ฌ์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ 
์žˆ์Œ
โ€ข ๋ถ€์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฐ๋‹จ์€ ์—„์ฒญ๋‚˜๊ฒŒ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž„
โ€ข ๋ฌธ์ž์—ด ๋ฐ ํ…์ŠคํŠธ์ฒ˜๋ฆฌ, ์ปจํ…Œ์ด๋„ˆ, ํ•จ์ˆ˜ ๊ฐ์ฒด ๋ฐ ๊ณ ์ฐจ ํ”„๋กœ
๊ทธ๋ž˜๋ฐ, ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ˆ˜
ํ•™ ๋ฐ ์ˆ˜์น˜์กฐ์ž‘, ์ •ํ™•์„ฑ ์œ ์ง€ ๋ฐ ํ…Œ์ŠคํŠธ, ์ž๋ฃŒ๊ตฌ์กฐ, ํƒ€ ์–ธ
์–ด์™€์˜ ์—ฐ๋™ ์ง€์›, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ๋“ฑ

More Related Content

PDF
Effective c++ chapter7_8_9_dcshin
PDF
C++ Advanced ๊ฐ•์˜ 3์ฃผ์ฐจ
PDF
C++ Advanced ๊ฐ•์˜ 5์ฃผ์ฐจ
PPTX
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 13์žฅ ํ…œํ”Œ๋ฆฟ
PDF
C++โ€™s move semantics
PPTX
Clean code
PPTX
Modern C++์˜ ํƒ€์ž… ์ถ”๋ก ๊ณผ ๋žŒ๋‹ค, ์ปจ์…‰
PDF
Api design for c++ 6์žฅ
Effective c++ chapter7_8_9_dcshin
C++ Advanced ๊ฐ•์˜ 3์ฃผ์ฐจ
C++ Advanced ๊ฐ•์˜ 5์ฃผ์ฐจ
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 13์žฅ ํ…œํ”Œ๋ฆฟ
C++โ€™s move semantics
Clean code
Modern C++์˜ ํƒ€์ž… ์ถ”๋ก ๊ณผ ๋žŒ๋‹ค, ์ปจ์…‰
Api design for c++ 6์žฅ

What's hot (20)

PDF
C++ api design ํ’ˆ์งˆ
PDF
[SwiftStudy 2016] 2์žฅ. Swift ํƒ€์ž… ํŒŒํŠธ 1
PDF
5 6 1
ย 
PPT
์นด์‚ฌ ๊ณต๊ฐœ์„ธ๋ฏธ๋‚˜1ํšŒ W.E.L.C.
PPTX
Chapter5 ~ 6
PPTX
Effective c++ chapter 7,8
PDF
[SwiftStudy 2016] 3์žฅ. ํ•จ์ˆ˜
PPTX
Effective c++chapter4
PPTX
Effective c++ 4
PPTX
Effective c++chapter1 and2
PPTX
Refelction์˜ ๊ฐœ๋…๊ณผ RTTR ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
PPTX
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)
PPTX
Effective c++chapter8
PPTX
NHNNEXT ๊ฐœ๊ฒฝํ”„14 Subway Rocket Team Study 3rd C++
PDF
C++ Advanced ๊ฐ•์˜ 1์ฃผ์ฐจ
PPTX
Effective c++(chapter 5,6)
PPT
C++api๋””์ž์ธ 1์žฅ
PDF
[C++ Korea 3rd Seminar] ์ƒˆ C++์€ ์ƒˆ Visual Studio์—, ์ขŒ์ถฉ์šฐ๋Œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ด์•ผ๊ธฐ
PPTX
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””
ย 
PDF
2013 C++ Study For Students #1
C++ api design ํ’ˆ์งˆ
[SwiftStudy 2016] 2์žฅ. Swift ํƒ€์ž… ํŒŒํŠธ 1
5 6 1
ย 
์นด์‚ฌ ๊ณต๊ฐœ์„ธ๋ฏธ๋‚˜1ํšŒ W.E.L.C.
Chapter5 ~ 6
Effective c++ chapter 7,8
[SwiftStudy 2016] 3์žฅ. ํ•จ์ˆ˜
Effective c++chapter4
Effective c++ 4
Effective c++chapter1 and2
Refelction์˜ ๊ฐœ๋…๊ณผ RTTR ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)
Effective c++chapter8
NHNNEXT ๊ฐœ๊ฒฝํ”„14 Subway Rocket Team Study 3rd C++
C++ Advanced ๊ฐ•์˜ 1์ฃผ์ฐจ
Effective c++(chapter 5,6)
C++api๋””์ž์ธ 1์žฅ
[C++ Korea 3rd Seminar] ์ƒˆ C++์€ ์ƒˆ Visual Studio์—, ์ขŒ์ถฉ์šฐ๋Œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ด์•ผ๊ธฐ
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””
ย 
2013 C++ Study For Students #1
Ad

Similar to Chapter7~9 ppt (20)

PDF
EC 789
PPT
effective c++ chapter 3~4 ์ •๋ฆฌ
PPTX
์ดํŽ™ํ‹ฐ๋ธŒ C++ 789 ๊ณต๋ถ€
ย 
PPTX
Mec++ chapter3,4
PPTX
Effective c++ 1
PPTX
Effective c++ ์ •๋ฆฌ 1~2
PPTX
A tour of C++ : the basics
PPTX
More effective c++ chapter1,2
PPTX
๋ถ„์„๊ณผ ์„ค๊ณ„
PDF
Effective c++ chapter 1,2 ์š”์•ฝ
PDF
Policy based Class Design
PDF
Template at c++
PPTX
Effective c++ 1~8์žฅ
PDF
2014-15 Intermediate C++ Study #7
PPTX
Effective c++ ์ •๋ฆฌ chapter 4
PDF
7 8 1
ย 
PDF
HolubOnPatterns/chapter2_2
PPTX
Effective c++ Chapter1,2
PPT
Working Effectively With Legacy Code - xp2005
PDF
[๋ฐ๋ธŒ๋ฃจํ‚ค] ๊ฒŒ์ž„ ์—”์ง„ ์•„ํ‚คํ…์ณ_3์žฅ_๊ฒŒ์ž„์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๊ธฐ์ดˆ
EC 789
effective c++ chapter 3~4 ์ •๋ฆฌ
์ดํŽ™ํ‹ฐ๋ธŒ C++ 789 ๊ณต๋ถ€
ย 
Mec++ chapter3,4
Effective c++ 1
Effective c++ ์ •๋ฆฌ 1~2
A tour of C++ : the basics
More effective c++ chapter1,2
๋ถ„์„๊ณผ ์„ค๊ณ„
Effective c++ chapter 1,2 ์š”์•ฝ
Policy based Class Design
Template at c++
Effective c++ 1~8์žฅ
2014-15 Intermediate C++ Study #7
Effective c++ ์ •๋ฆฌ chapter 4
7 8 1
ย 
HolubOnPatterns/chapter2_2
Effective c++ Chapter1,2
Working Effectively With Legacy Code - xp2005
[๋ฐ๋ธŒ๋ฃจํ‚ค] ๊ฒŒ์ž„ ์—”์ง„ ์•„ํ‚คํ…์ณ_3์žฅ_๊ฒŒ์ž„์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๊ธฐ์ดˆ
Ad

More from Injae Lee (6)

PPTX
Stonze study week1
PPTX
More Effective C++ 4์ฃผ์ฐจ
PPTX
More effective c++ 3์ฃผ์ฐจ
PPTX
More effective c++ แ„Žแ…ขแ†ธแ„แ…ฅ3~4ppt
PPTX
More effective c++ Chap1~2
PPTX
๊ฐ“์˜ค๋ธŒ์›Œ ์–ด์„ผ์…˜ ํฌ์ŠคํŠธ๋ชจํ…œ
Stonze study week1
More Effective C++ 4์ฃผ์ฐจ
More effective c++ 3์ฃผ์ฐจ
More effective c++ แ„Žแ…ขแ†ธแ„แ…ฅ3~4ppt
More effective c++ Chap1~2
๊ฐ“์˜ค๋ธŒ์›Œ ์–ด์„ผ์…˜ ํฌ์ŠคํŠธ๋ชจํ…œ

Chapter7~9 ppt

  • 2. ํ•ญ๋ชฉ 41 : ํ…œํ”Œ๋ฆฟ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์•” ์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ปดํŒŒ์ผ ํƒ€์ž„ ํ˜•์„ฑ๋ถ€ํ„ฐ โ€ข ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ์ค‘์š”ํ•œ ์ ์€ ๋ช… ์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋Ÿฐํƒ€์ž„ ๋‹ค ํ˜•์„ฑ โ€ข ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์†Œ์Šค์ฝ”๋“œ์—์„œ ์ฐพ์œผ๋ฉด ์ด๊ฒƒ์ด ์–ด๋–ค ํ˜•ํƒœ์ธ์ง€ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿฐ ์ธ ํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œ์  ์ธํ„ฐํŽ˜์ด ์Šค โ€ข ์†Œ์Šค ์ฝ”๋“œ์— ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ ๋‚˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค โ€ข class Widget{}; โ€ข void Do( Widget& w){ }; โ€ข wํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋ช…์‹œ์  ์ธ ํ„ฐํŽ˜์ด์Šค
  • 3. ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ปดํŒŒ์ผ ํƒ€ ์ž„ ๋‹คํ˜•์„ฑ โ€ข ์•”์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹คํ˜•์„ฑ์€ ํ…œํ”Œ๋ฆฟ ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งค์šฐ ๋งŽ์ด ํ™œ ์šฉ โ€ข ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ์ผ์–ด ๋‚˜๋Š” ์‹œ์ ์€ ์ปดํŒŒ์ผ ๋„์ค‘ โ€ข ์ด๊ฒƒ์„ ๊ฐ€๋ฆฌ์ผœ ์ปดํŒŒ์ผ ํƒ€์ž„ ๋‹ค ํ˜•์„ฑ โ€ข template<typename T> void Do(T& w) { โ€ฆ } ์ด ํ•จ์ˆ˜์—์„œ๋Š” w ์˜ ํƒ€ ์ž…์€ T๊ฐ€ ๋œ๋‹ค.
  • 4. ํ•ญ๋ชฉ 41 ์ •๋ฆฌ โ€ข ํด๋ž˜์Šค ๋ฐ ํ…œํ”Œ๋ฆฟ์€ ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹คํ˜•์„ฑ ์„ ์ง€์›ํ•จ โ€ข ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ช…์‹œ์ ์ด๋ฉฐ ํ•จ์ˆ˜ ์˜ ์‹œ๊ทธ๋„ˆ์ฒ˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค ํ˜•์„ฑ์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚˜ ํƒ€๋‚จ โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•”์‹œ์ ์ด ๋ฉฐ ์œ ํšจ ํ‘œํ˜„์‹์— ๊ธฐ๋ฐ˜์„ ๋‘์–ด ๊ตฌ์„ฑ โ€ข ๋‹คํ˜•์„ฑ์€ ์ปดํŒŒ์ผ ์ค‘์— ํ…Œ๋ฏˆ๋ฆฟ ์ธ์Šคํ„ด์Šคํ™”์™€ ํ•จ ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ ๋ชจํ˜ธ์„ฑ ํ•ด๊ฒฐ์„ ํ†ตํ•ด ๋‚˜ํƒ€๋‚จ
  • 5. ํ•ญ๋ชฉ 42 : typename์˜ ๋‘๊ฐ€์ง€ ์˜ ๋ฏธ โ€ข ํ…œํ”Œ๋ฆฟ์˜ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„  ์–ธํ•  ๋•Œ๋Š” class์™€ typename ์˜ ๋œป์ด ์™„์ „ํžˆ ๋˜‘๊ฐ™๋‹ค โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ข…์†๋œ ๊ฒƒ ์„ ๊ฐ€๋ฆฌ์ผœ ์˜์กด ์ด๋ฆ„์ด๋ผ๊ณ  ํ•œ ๋‹ค. โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ป๋“  ์ƒ ๊ด€์—†๋Š” ํƒ€์ž… ์ด๋ฆ„์„ ๋น„์˜์กด ์ด ๋ฆ„์ด๋ผ๊ณ  ํ•œ๋‹ค. โ€ข template<class T>class W; โ€ข template<typename T> class W; โ€ข ๋‘˜์€ ์ฐจ์ด๊ฐ€ ์—†๋‹ค. โ€ข void Pro(const C& con){ C::const_iterator iter(con.begin()); int value ; } โ€ข iter๋Š” ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜ C์— ์˜์กด์ ์ด๋‹ค. value๋Š” C์— ์˜์กด์ ์ด์ง€ ์•Š ๋‹ค.
  • 6. typename์˜ ์˜ˆ์™ธ โ€ข typename ํ‚ค์›Œ๋“œ๋Š” ์ค‘์ฒฉ ์ด๋ฆ„ ์˜์กด๋งŒ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์จ์•ผ ํ•œ๋‹ค. ๊ทธ ์™ธ ์ด๋ฆ„์€ type-name์„ ๊ฐ€์ ธ์„  ์•ˆ ๋œ๋‹ค. โ€ข ์˜ˆ์™ธ์ ์œผ๋กœ ์ค‘์ฒฉ ์˜์กด ํƒ€์ž… ์ด๋ฆ„์ด ๊ธฐ๋ณธ ํด๋ž˜์Šค ์˜ ๋ฆฌ์ŠคํŠธ์— ์žˆ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ ๋‚ด์˜ ๊ธฐ ๋ณธ ํด๋ž˜์Šค ์‹๋ณ„์ž๋กœ์„œ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” typename ์„ ๋ถ™์—ฌ ์ฃผ๋ฉด ์•ˆ ๋œ๋‹ค.
  • 7. ํ•ญ๋ชฉ 42 ์ •๋ฆฌ โ€ข ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ, class ๋ฐ typename์€ ์„œ๋กœ ๋ฐ”๊พธ์–ด ์จ๋„ ๋ฌด๋ฐฉ โ€ข ์ค‘์ฒฉ ์˜์กด ํƒ€์ž… ์ด๋ฆ„์„ ์‹๋ณ„ํ•˜๋Š” ์šฉ๋„์—๋Š” ๋ฐ˜๋“œ ์‹œ typename์„ ์‚ฌ์šฉ, ๋‹จ ์ค‘์ฒฉ ์˜์กด ์ด๋ฆ„์ด ๊ธฐ๋ณธ ํด๋ž˜์Šค ๋ฆฌ์ŠคํŠธ์— ์žˆ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ ๋‚ด ์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค ์‹๋ณ„์ž๋กœ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์™ธ
  • 8. ํ•ญ๋ชฉ 43 : ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋ณธ ํด๋ž˜์Šค ์•ˆ์˜ ์ด๋ฆ„์— ์ ‘๊ทผํ•˜ ๋Š” ๋ฐฉ๋ฒ• โ€ข ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์˜ ์ •์˜์™€ ๋งˆ์ฃผ์น  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋Œ€์ฒด ์ด ํด๋ž˜์Šค๊ฐ€ ์–ด๋””์„œ ํŒŒ์ƒ ๋œ ๊ฒƒ์ธ์ง€๋ฅผ ๋ชจ๋ฆ„ โ€ข ์˜†์— ์˜ˆ์ œ์—์„œ Company๋Š” ํ…œ ํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๊ณ , ์ด ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‚˜์ค‘๊นŒ์ง€ ๋ฌด์—‡์ด ๋ ์ง€ ์•Œ ์ˆ˜ ์—†์Œ โ€ข Company๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ๋„ ๋ชจ๋ฅด๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Œ โ€ข template<typename Company> class Msg{ public: .. void sendClear(){ โ€ฆ }; }; โ€ฆ class Log: public Msg{ sendClear(); }; โ€ข ๋‹ค์Œ์€ ์ปดํŒŒ์ผ์ด ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ด๋‹ค.
  • 9. ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• โ€ข ๊ธฐ๋ณธ ํด๋ž˜์Šค ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ๋ฌธ ์•ž์— โ€œthis->โ€๋ฅผ ๋ถ™์ธ๋‹ค. this->sendClear(); โ€ข using ์„ ์€์„ ํ†ตํ•ด ํ•ด๊ฒฐ using Msg<Company>::sendClear; ์ฆ‰ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ sendClear๊ฐ€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์žˆ ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ผ ๊ณ  ์•Œ๋ ค์คŒ
  • 10. ํ•ญ๋ชฉ 43 ์ •๋ฆฌ โ€ข ํŒŒ์ƒ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์—์„œ ๊ธฐ๋ณธ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์˜ ์ด๋ฆ„์„ ์ฐธ์กฐํ•  ๋•Œ๋Š” , โ€œthis->โ€๋ฅผ ์ ‘๋‘์‚ฌ๋กœ ๋ถ™์ธ๋‹ค โ€ข using ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ( ์ด ํ•จ์ˆ˜ ๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์กด์žฌํ•œ๋‹ค) ํ•˜์—ฌ ๊ธฐ๋ณธ ํด๋ž˜์Šค ํ•œ ์ •๋ฌธ์„ ๋ช…์‹œ์ ์œผ๋กœ ์จ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
  • 11. ํ•ญ๋ชฉ 44 : ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋…๋ฆฝ์ ์ธ ์ฝ”๋“œ๋Š” ํ…œํ”Œ๋ฆฟ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ์‹œํ‚ค ์ž โ€ข ํ…œํ”Œ๋ฆฟ์€ ์ฝ”๋”ฉ ์‹œ๊ฐ„ ์ ˆ์•ฝ, ์ฝ” ๋“œ ์ค‘๋ณต ํšŒํ”ผ์˜ ์ด์ ์ด ์žˆ๋‹ค. โ€ข ๊ทธ๋Ÿฌ๋‚˜ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ํ…œํ”Œ๋ฆฟ ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๋น„๋Œ€ํ™”๋ฅผ ์ดˆ ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค. -> ์„ฑ๋Šฅ ์ €ํ•˜ ์•ผ๊ธฐ โ€ข ์ฆ‰ ํ…œํ”Œ๋ฆฟ์„ ๊ตฌ์„ฑํ•  ๋•Œ๋„ ์ฝ”๋“œ ์ค‘๋ณต์„ ํ”ผํ•ด์•ผ๋งŒ ํ•œ๋‹ค. โ€ข vector<int> โ€ข vector<long> โ€ข ์œ„์˜ ๋‘ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์„œ๋กœ ๋˜‘ ๊ฐ™๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋”ฑ ์ฝ”๋“œ ๋น„๋Œ€ํ™”๊ฐ€ ๋˜๊ธฐ ์‰ฝ๋‹ค.
  • 12. ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• โ€ข ํฌ์ธํ„ฐ ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ทจํ•˜๋Š” ๋™์ผ ๊ณ„์—ด์˜ ํ…œํ”Œ๋ฆฟ๋“ค ( list<int*>, list<const int*>, list(SquareMatrix<long,3>*>๋“ฑ ์€ ์ด์ง„ ์ˆ˜์ค€์—์„œ ๋งŒ ๋ณด๋ฉด ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ์ง‘ํ•ฉ์„ ํ•œ ๋ฒŒ๋งŒ ์จ๋„ ๊ฐ€๋Šฅ โ€ข ๊ธฐ์ˆ ์ ์œผ๋กœ ํƒ€์ž…์ œ์•ฝ์ด ์—„๊ฒฉํ•œ ํฌ์ธํ„ฐ(T* ํฌ์ธ ํ„ฐ)๋ฅผ ์จ์„œ ๋™์ž‘ํ•˜๋Š” ๋ฉค๋ฒ„ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ํ•˜ ๋‹จ์—์„œ ํƒ€์ž…๋ฏธ์ • ํฌ์ธํ„ฐ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฒ„์ „์„ ํ˜ธ ์ถœ
  • 13. ํ•ญ๋ชฉ 44 ์ •๋ฆฌ โ€ข ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„์Šท๋น„์Šทํ•œ ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒŒ ๋งŒ๋“ค์–ด์ง„๋‹ค ๋”ฐ๋ผ์„œ ํ…œํ”Œ๋ฆฟ ๋ฐฐ๊ฐœ๋ณ€์ˆ˜์— ์ข…์†๋˜์ง€ ์•Š์€ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ๋Š” ๋น„๋Œ€ํ™”์˜ ์›์ธ โ€ข ๋น„ํƒ€์ž… ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ƒ๊ธฐ๋Š” ์ฝ”๋“œ ๋น„๋Œ€ํ™” ์˜ ๊ฒฝ์šฐ, ํ…Œ๋ฏˆ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•จ์ˆ˜๋งค๊ฐœ๋ณ€์ˆ˜ ํ˜น์€ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๋น„๋Œ€ํ™”๋ฅผ ์—†์•จ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ โ€ข ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ƒ๊ธฐ๋Š” ์ฝ”๋“œ ๋น„๋Œ€ํ™”์˜ ๊ฒฝ์šฐ, ๋™ ์ผํ•œ ์ด์ง„ ํ‘œํ˜„๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ธ์Šคํ„ด์Šคํ™”๋˜๋Š” ํƒ€์ž…๋“ค์ด ํ•œ ๊ฐ€์ง€ ํ•จ์ˆ˜ ๊ตฌํ˜„์„ ๊ณต์œ ํ•˜๊ฒŒ ๋งŒ๋“ฆ์œผ ๋กœ ๋น„๋Œ€ํ™”๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
  • 14. ํ•ญ๋ชฉ 45 : ํ˜ธํ™˜๋˜๋Š” ๋ชจ๋“  ํƒ€์ž…์„ ๋ฐ›์•„๋“ค์ด๋Š” ๋ฐ๋Š” ํ…œํ”Œ๋ฆฟ์ด ๋‹ต์ด ๋‹ค โ€ข ํƒ€์ž… ๋ณ€ํ™˜์„ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์จ์„œ ํ•˜๋ ค๋ฉด ๋ฌด์ฒ™ ๊นŒ๋‹ค๋กญ๋‹ค. โ€ข ๋Œ€์‹  ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๋Š” ์•”์‹œ์  ๋ณ€ ํ™˜์„ ์ง€์›ํ•˜์—ฌ ํŒŒ์ƒํด๋ž˜์Šค ใ…‚ ํฌ์ธํ„ฐ๊ฐ€ ์•”์‹œ์ ์œผ๋กœ ๊ธฐ๋ณธ ํด ๋ž˜์Šค ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜๊ฐ€๋Šฅํ•˜๋‹ค โ€ข ์ฆ‰ ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๊ฐ€ ํƒ€์ž… ๋ณ€ํ™˜์— ์กฐ๊ธˆ ๋” ์šฉ์ดํ•˜๋‹ค โ€ข class Top { โ€ฆ }; class Middle : public Top { โ€ฆ }; class Bottom: public Middle { โ€ฆ }; Top *pt1 = new Middle; Top *pt2 = new Bottom ์ฆ‰, ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ์•”์‹œ ์  ๋ณ€ํ™˜์„ ํ†ตํ•ด ๊ธฐ๋ณธํด๋ž˜์Šค ํฌ์ธ ํ„ฐ๋กœ ํŒŒ์ƒ ํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ ์Œ
  • 15. ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ํ…œํ”Œ ๋ฆฟ์„ ์“ฐ์ž โ€ข ์ƒ์„ฑ์ž ํ…œํ”Œ๋ฆฟ์€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์˜ ํ•œ๊ฐ€์ง€ ์˜ˆ์ด๋‹ค template<typename T> class SmartPtr { public: template<typename U > SmartPtr( const SmartPtr<U>& other); }; ๋ชจ๋“  T ํƒ€์ž… ๋ฐ ๋ชจ๋“  U ํƒ€์ž…์— ๋Œ€ํ•ด์„œ SmartPtr<T>๊ฐ์ฒด ๊ฐ€ SmartPtr<U>๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Œ โ€ข ์ด๋Ÿฐ ๊ผด์˜ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์ผ๋ฐ˜ํ™” ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋ผ ํ•œ๋‹ค โ€ข ๊ธฐ๋ณธ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ SmartPointerํ™œ์šฉ ๊ฐ€๋Šฅ
  • 16. ํ•ญ๋ชฉ 45 ์ •๋ฆฌ โ€ข ํ˜ธํ™˜๋˜๋Š” ๋ชจ๋“  ํƒ€์ž…์„ ๋ฐ›์•„๋“ค์ด๋Š” ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋‹ค์ž โ€ข ์ผ๋ฐ˜ํ™”๋œ ๋ณต์‚ฌ ์ƒ์„ฑ ์—ฐ์‚ฐ๊ณผ ์ผ๋ฐ˜ํ™”๋œ ๋Œ€์ž… ์—ฐ์‚ฐ ์„ ์œ„ํ•ด ๋ฉค๋ฒ„ ํ…œํ”Œ๋ฆฟ์„ ์„ ์–ธํ–ˆ๋‹ค ํ•˜๋”๋ผ๋„, ๋ณดํ†ต ์˜ ๋ณต์‚ฌ ์ƒ์„ฑ์ž์™€ ๋ณต์‚ฌ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋Š” ์—ฌ์ „ํžˆ ์ง ์ ‘ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค
  • 17. ํ•ญ๋ชฉ 46 : ํƒ€์ž… ๋ณ€ํ™˜์ด ๋ฐ”๋žŒ์งํ•  ๊ฒฝ์šฐ ์—๋Š” ๋น„๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ ์•ˆ์— ์ •์˜ โ€ข ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ์ปดํŒŒ์ผ์ด ๋˜์ง€ ์•Š ๋Š”๋‹ค โ€ข ํ…œํ”Œ๋ฆฟ ๋ฒ„์ „์˜ Rational์—๋Š” ์‹ค์ œ๋กœ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ ค ๋Š”์ง€์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ๋กœ์„œ๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค ๋‹จ์ง€ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” operator*๋ผ๋Š” ์ด๋ฆ„์˜ ํ…œํ”Œ๋ฆฟ ์œผ๋กœ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šคํ™” ํ•  ํ•จ์ˆ˜ ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅ โ€ข ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” T๋ฅผ ์•Œ์•„ ์•ผ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ โ€ข template<typename T> class Rational { public: Rational(const T& numerator = 0, const T& denominator = 1); โ€ฆ }; template<typename T> const Rational<T> operator*(const Rational<T>& lhs, const Rational<T>& rhs> Rational<int> oneHalf(1,2); Rational<int> result = oneHalf *2; ์ด ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • 18. operator* ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ์„ ์„  ์–ธ๋ถ€์™€ ๋ถ™์ด์žโ€ข class Rational { public: โ€ฆ friend const Rational operator* (const Rational& lhs, const Rational& rhs) { return Rational( lhs.numerator() * rhs.numerator(), lhs.denominator() * rhs.denominator() ); โ€ข ํ”„๋ Œ๋“œ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ์ง€๋งŒ ํด๋ž˜์Šค์˜ public์˜์—ญ์ด ์•„๋‹Œ ๋ถ€๋ถ„์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๊ณผ ํ”„๋ Œ๋“œ ๊ถŒํ•œ์€ ์•„๋ฌด๋Ÿฐ ์ƒ๊ด€์ด ์—†์Œ
  • 19. ํ•ญ๋ชฉ 46 ์ •๋ฆฌ โ€ข ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์•”์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜์„ ์ง€์› ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด ๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ์ด๋Ÿฐ ํ•จ์ˆ˜๋Š” ํด ๋ž˜์Šค ํ…œํ”Œ๋ฆฟ ์•ˆ์— ํ”„๋ Œ๋“œ ํ•จ์ˆ˜๋กœ์„œ ์ •์˜
  • 20. ํ•ญ๋ชฉ 47 : ํƒ€์ž…์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž โ€ข ํŠน์„ฑ์ •๋ณด๋ž€ ์ปดํŒŒ์ผ ๋„์ค‘์— ์–ด๋–ค ์ฃผ์–ด์ง„ ํƒ€์ž…์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์นญํ•˜๋Š” ๊ฐœ๋… โ€ข ํŠน์„ฑ์ •๋ณด๋Š” ๋ฌธ๋ฒ•๊ตฌ์กฐ๋‚˜ ํ‚ค์›Œ๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค โ€ข C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์˜ ๊ตฌํ˜„ ๊ธฐ๋ฒ•์ด๋ฉฐ ๊ด€๋ก€
  • 21. ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค์˜ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• โ€ข ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋„๋ก ์—ด์–ด ์ฃผ๊ณ  ์‹ถ์€ ํƒ€์ž… ๊ด€ ๋ จ ์ •๋ณด๋ฅผ ํ™•์ธ( ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ˜๋ณต์ž๋ผ๋ฉด ๋ฐ˜๋ณต์ž ๋ฒ”์ฃผ ๋“ฑ) โ€ข ๊ทธ ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„์„ ์„ ํƒ โ€ข ์ง€์›ํ•˜๊ณ ์ž ํ•˜๋Š” ํƒ€์ž… ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…œํ”Œ๋ฆฟ ๋ฐ ๊ทธ ํ…œํ”Œ๋ฆฟ์˜ ํŠปํ™”๋ฒ„์ „์„ ์ œ๊ณต
  • 22. ํ•ญ๋ชฉ 47 ์ •๋ฆฌ โ€ข ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋Š” ์ปดํŒŒ์ผ ๋„์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ ๋Š” ํƒ€์ž… ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด๋ƒ„ โ€ข ํŠน์„ฑ์ •๋ณด ํด๋ž˜์Šค๋Š” ํ…œํ”Œ๋ฆฟ ๋ฐ ํ…œํ”Œ๋ฆฟ ํŠน์ˆ˜ ๋ฒ„์ „ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ โ€ข ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ ๊ธฐ๋ฒ•๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ํŠน์„ฑ์ •๋ณด ํด๋ž˜ ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋˜๋Š” ํƒ€์ž…๋ณ„ ifโ€ฆelse์ ๊ฒ€๋ฌธ์„ ๊ตฌ์‚ฌ ๊ฐ€๋Šฅ
  • 23. ํ•ญ๋ชฉ 48 : ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ โ€ข ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํŒŒ ์ผ ๋„์ค‘์— ์‹คํ–‰๋˜๋Š” ํ…œํ”Œ๋ฆฟ ๊ธฐ ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋žจ โ€ข ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊นŒ๋‹ค๋กญ๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ผ์„ ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊น€ โ€ข ์ปดํŒŒ์ผ์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ์— ์‹ค ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ์ž‘์—…์„ ๋Ÿฐ ํƒ€์ž„ ์˜์—ญ์—์„œ ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜ ์—ญ์œผ๋กœ ์ „ํ™˜ ๊ฐ€๋Šฅ โ€ข ๋ชจ๋“  ๋ฉด์—์„œ ํšจ์œจ์ด ์ข‹์„ ๊ฐ€๋Šฅ ์„ฑ์ด ์žˆ์Œ -> ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋™์ž‘์„ ํ•ด์„œ ์‹คํ–‰์ฝ”๋“œ๊ฐ€ ์ž‘์•„์ง€๊ณ  ์‹คํ–‰์‹œ๊ฐ„ ๋„ ์งง์•„์ง, ๋ฉ”๋ชจ๋ฆฌ๋„ ์ ๊ฒŒ๋จน์Œ โ€ข template<unsigned n> struct Factorial { enum { value = n* Factorial<n-1>::value); }; template<> struct Factorial<0>{ enum { value = 1 }; }; ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ factorial ์ž‘์„ฑ Factorial<5>::value ๋Š” 120์„ ๋Ÿฐํƒ€์ž„ ๊ณ„์‚ฐ ์—†์ด ์ถœ๋ ฅ!
  • 24. ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ข‹์€ ์˜ˆ โ€ข ์น˜์ˆ˜ ๋‹จ์œ„์˜ ์ •ํ™•์„ฑ ํ™•์ธ : ๊ณผํ•™๊ธฐ์ˆ  ๋ถ„์•ผ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ ์œ ๋ฆฌ โ€ข ํ–‰๋ ฌ ์—ฐ์‚ฐ์˜ ์ตœ์ ํ™” โ€ข ๋งž์ถค์‹ ๋””์ž์ธ ํŒจํ„ด ๊ตฌํ˜„์˜ ์ƒ์„ฑ - ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ตฌํ˜„๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€์ผ ๋•Œ ๊ธฐ๋ฐ˜์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Œ
  • 25. ํ•ญ๋ชฉ 48 ์ •๋ฆฌ โ€ข ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ธฐ์กด ์ž‘์—…์„ ๋Ÿฐํƒ€์ž„์— ์„œ ์ปดํŒŒ์ผ ํƒ€์ž„์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๋ƒ„. ๋”ฐ๋ผ์„œ TMP๋ฅผ ์“ฐ๋ฉด ์„ ํ–‰ ์—๋Ÿฌ ํƒ์ง€์™€ ๋†’์€ ๋Ÿฐํƒ€์ž„ ํšจ์œจ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ โ€ข TMP๋Š” ์ •์ฑ… ์„ ํƒ์˜ ์กฐํ•ฉ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ • ์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋˜ํ•œ ํŠน์ • ํƒ€์ž…์— ๋Œ€ํ•ด ๋ถ€์ ์ ˆํ•œ ์ฝ”๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๋ฐ๋„ ์“ธ ์ˆ˜ ์žˆ์Œ
  • 26. ํ•ญ๋ชฉ 49 : new์ฒ˜๋ฆฌ์ž์˜ ๋™์ž‘ ์› ๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ž โ€ข ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ€ํƒํ•œ ๋งŒํผ์˜ ๋ฉ”๋ชจ ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด ์ฃผ์ง€ ๋ชปํ•˜๋ฉด operator new ๋Š” ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ ๋ฆฌ๋ฅผ ์ฐพ์•„๋‚ผ ๋•Œ๊นŒ์ง€ new ์ฒ˜๋ฆฌ ์ž๋ฅผ ๋˜ํ’€์ดํ•ด์„œ ํ˜ธ์ถœ โ€ข Class X{ public: static void outOfMemory(); โ€ฆ }; Class Y{ public: static void outOfMemory(); โ€ฆ }; X* p1 = new X; Y* p2 = new Y; ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ๋‘ ๊ฒฝ์šฐ, ๊ฐ ํด๋ž˜์Šค๋Š” OutofMemory๋ฅผ ํ˜ธ์ถœ
  • 27. new ์ฒ˜๋ฆฌ์ž ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ์‹œ ์ฃผ ์˜ํ•  ์  โ€ข ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ๋งŽ์ด ํ™•๋ณด โ€ข ๋‹ค๋ฅธ new ์ฒ˜๋ฆฌ์ž๋ฅผ ์„ค์น˜ โ€ข new ์ฒ˜๋ฆฌ์ž์˜ ์„ค์น˜๋ฅผ ์ œ๊ฑฐ - null pointer๋ฅผ ๋„˜๊น€ โ€ข ์˜ˆ์™ธ๋ฅผ ๋˜์ง - bad_alloc๋“ฑ์˜ ์˜ˆ์™ธ๋ฅผ ๋˜์ง โ€ข ๋ณต๊ท€ํ•˜์ง€ ์•Š์Œ - abort ํ˜น์€ exit ghcnf
  • 28. ํ•ญ๋ชฉ 49 ์ •๋ฆฌ โ€ข set_new_handler ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ ์ด ๋งŒ์กฑ๋˜์ง€ ๋ชปํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ โ€ข ์˜ˆ์™ธ๋ถˆ๊ฐ€ new๋Š” ์˜ํ–ฅ๋ ฅ์ด ์ œํ•œ๋˜์–ด ์žˆ์Œ - ๋ฉ”๋ชจ ๋ฆฌ ํ• ๋‹น ์ž์ฒด์—๋งŒ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ. ์ดํ›„์— ํ˜ธ์ถœ๋˜ ๋Š” ์ƒ์„ฑ์ž์—๋Š” ์–ผ๋งˆ๋“ ์ง€ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์Œ
  • 29. ํ•ญ๋ชฉ 50 :new ๋ฐ delete๋ฅผ ์–ธ์ œ ๋ฐ”๊ฟ”์•ผ ์ข‹์€ ์†Œ๋ฆฌ๋ฅผ ๋“ค์„์ง€ ํŒŒ์•… โ€ข ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ค€ operator new์™€ operator delete๋ฅผ ๋ฐ”๊พธ๊ณ ์‹ถ์€ ์ด์œ  ? โ€ข ์ž˜๋ชป๋œ ํž™ ์‚ฌ์šฉ์„ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด โ€ข ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด โ€ข ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์‚ฌ์šฉ์— ๊ด€ํ•œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด
  • 30. ๋‹ค์‹œํ•œ๋ฒˆ ํ•„์š”ํ•œ ์กฐ๊ฑด ์ฒด ํฌโ€ข ์ž˜๋ชป๋œ ํž™ ์‚ฌ์šฉ์„ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด โ€ข ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์‚ฌ์šฉ์— ๊ด€ํ•œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ˆ˜ ์ง‘ํ•˜๊ธฐ ์œ„ํ•ดํ• ๋‹น ๋ฐ ํ•ด์ œ ์†๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด โ€ข ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์˜ ๊ณต๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด โ€ข ์ ๋‹นํžˆ ํƒ€ํ˜‘ํ•œ ๊ธฐ๋ณธ ํ• ๋‹น์ž์˜ ๋ฐ”์ดํŠธ ์ •๋ ฌ ๋™์ž‘์„ ๋ณด์žฅ ํ•˜๊ธฐ ์œ„ํ•ด โ€ข ์ž„์˜์˜ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ ๊ตฐ๋ฐ์•  ๋‚˜๋ž€ํžˆ ๋ชจ์•„ ๋†“๊ธฐ ์œ„ํ•ด โ€ข ๊ทธ๋•Œ๊ทธ๋–„ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด
  • 31. ํ•ญ๋ชฉ 50 ์ •๋ฆฌ โ€ข ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šค์Šค๋กœ ์‚ฌ์šฉ์ž ์ •์˜ new ๋ฐ delete๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋‚˜๋ฆ„๋Œ€๋กœ ํƒ€๋‹นํ•œ ์ด์œ  ๊ฐ€ ์žˆ๋‹ค ์—ฌ๊ธฐ์—๋Š” ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๋Š” ๋ชฉ์ , ํž™ ์‚ฌ์šฉ์‹œ์˜ ์—๋Ÿฌ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋ ค๋Š” ๋ชฉ์ , ํž™์‚ฌ์šฉ ์ • ๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋ ค๋Š” ๋ชฉ์  ๋“ฑ์ด ํฌํ•จ
  • 32. ํ•ญ๋ชฉ 51 : new ๋ฐ delete๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋”ฐ๋ผ์•ผ ํ•  ๊ธฐ์กด์˜ ๊ด€๋ก€๋ฅผ ์ž˜ ์•Œ ์•„๋‘์žโ€ข operator new์˜ ๋ฐ˜ํ™˜ ๊ฐ’ ๋ถ€๋ถ„์€ ์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งˆ๋ จํ•ด ์ค„ ์ˆ˜ ์žˆ ์œผ๋ฉด ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜, ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์œผ๋ฉด bad_alloc ํ˜ธ์ถœ โ€ข operator new ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ํŒŒ์ƒ ํด๋ž˜์Šค ์ชฝ์œผ๋กœ ์ƒ์†์ด ๋˜๋Š” ํ•จ์ˆ˜ โ€ข ๋ฐฐ์—ด์•ˆ์— ๋ช‡ ๊ฐœ ์˜ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐˆ ์ง€ ๊ณ„์‹ผํ•˜๋Š” ๊ฒƒ ์–ด๋ ค์›€ -> ๊ฐ์ฒด ํ•˜๋‚˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ํฐ์ง€๋ฅผ ํ™•์ •ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Œ โ€ข operator new[]์— ๋„˜์–ด๊ฐ€๋Š” size_t ํƒ€์ž…์˜ ์ธ์ž๋Š” ๊ฐ์ฒด๋“ค์„ ๋‹ด๊ธฐ์— ๋”ฑ ๋งž๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘๋ณด๋‹ค ๋” ๋งŽ๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ โ€ข ๊ฐ€์ƒ ์†Œ๋ฉธ์ž๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ์—๋Š” operator delete๋กœ C++๊ฐ€ ๋„˜๊ธฐ๋Š” size_t๊ฐ’ ์ด ์—‰ํ„ฐ๋ฆฌ ์ผ ์ˆ˜ ์žˆ์Œ
  • 33. ํ•ญ๋ชฉ 51 ์ •๋ฆฌ โ€ข ๊ด€๋ ˆ์ ์œผ๋กœ operator new ํ•จ์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋ฐ˜๋ณตํ•ด์„œ ์‹œ๋„ํ•˜๋Š” ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๊ณ , ๋ฉ” ๋ชจ๋ฆฌ ํ• ๋‹น ์š”๊ตฌ๋ฅผ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์—†์„ ๋•Œ new์ฒ˜๋ฆฌ ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฉฐ, 0๋ฐ”์ดํŠธ์— ๋Œ€ํ•œ ๋Œ€์ฑ…๋„ ์žˆ ์–ด์•ผ ํ•จ โ€ข ํด๋ž˜์Šค ์ „์šฉ ๋ฒ„์ „์€ ์ž์‹ ์ด ํ• ๋‹นํ•˜๊ธฐ๋กœ ์˜ˆ์ •๋œ ํฌ๊ธฐ๋ณด๋‹ค ๋” ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ๋Œ€ํ•œ ์š”๊ตฌ๋„ ์ฒ˜๋ฆฌ โ€ข operator delete ํ•จ์ˆ˜๋Š” ๋„ ํฌ์ธํ„ฐ๊ฐ€ ๋“ค์–ด์™”์„ ๋–„ ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ
  • 34. ํ•ญ๋ชฉ 52 : ์œ„์น˜์ง€์ • new๋ฅผ ์ž‘์„ฑ ํ•œ๋‹ค๋ฉด ์œ„์น˜์ง€์ • delete๋„ ๊ฐ™์ด ์ค€๋น„ํ•˜์ž โ€ข ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์ด ํ•ด์ฃผ์–ด์•ผ ํ•˜ ๋Š” ์ผ์€ ์ž์‹ ์ด ํ˜ธ์ถœํ•œ operator new ํ•จ์ˆ˜์™€ ์ง์ด ๋˜ ๋Š” ๋ฒ„์ „์˜ operator deleteํ•จ ์ˆ˜๋ฅผ ํ˜ธ์ถœ โ€ข ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์€ ํ˜ธ์ถœ๋œ operator new๊ฐ€ ๋ฐ›์•„๋“ค์ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜ ๋ฐ ํƒ€์ž…์ด ๋˜‘ ๊ฐ™์€ ๋ฒ„์ „์˜ operator delete ๋ฅผ ์ฐพ๊ณ  ์ฐพ์•„๋ƒˆ์œผ๋ฉด ํ˜ธ์ถœ. โ€ข ์ฆ‰ ์ง์„ ์ด๋ฃจ๋Š” ์‹œ๊ทธ๋„ˆ์ฒ˜ โ€ข Widget *pw = new Widget ์ด ์‹คํ–‰์ด ๋˜๋ฉด ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์œ„ํ•ด operator new๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , ๊ทธ ๋’ค ๋ฅผ ์ด์–ด Widget์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ด๋•Œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์„ ํ•˜๋ฉด์„œ ์˜ˆ์™ธ ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•˜๋ฉด ์ด ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œ ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค! -> C++ ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์—์„œ ๋งก์•„์„œ ํ•จ
  • 35. ์œ„์น˜์ง€์ • ์ฃผ์˜ ํ•  ์  โ€ข ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ๋ฐ›๋Š” new๋ฅผ ์œ„์น˜์ง€์ • ์ด๋ผ๊ณ  ํ•œ๋‹ค โ€ข operator delete์—ญ์‹œ ์ด ์œ„์น˜์ง€์ •๊ณผ ๋˜‘๊ฐ™์€ ์‹œ๊ทธ๋„ˆ์ฒ˜๋ฅผ ๊ฐ€์ง„ ๊ฒƒ์ด ์–ด์•ผํ•œ๋‹ค -> ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค delete๋ฅผ ํ˜ธ์ถœํ•˜๋Š”์ง€ ๊ฐˆํŒก์งˆํŒก ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด ๋‹ค โ€ข ๋”ฐ๋ผ์„œ ์œ„์น˜์ง€์ •์„ ํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” delete๋„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค
  • 36. ํ•ญ๋ชฉ 52 ์ •๋ฆฌ โ€ข operator newํ•จ์ˆ˜์˜ ์œ„์น˜์ง€์ • ๋ฒ„์ „์„ ๋งŒ๋“ค ๋–„๋Š” ์ด ํ•จ์ˆ˜์™€ ์ง์„ ์ด๋ฃจ๋Š” ์œ„์น˜์ง€์ • ๋ฒ„์ „์˜ operator deleteํ•จ์ˆ˜๋„ ๊ผญ ๋งŒ๋“ค์–ด์•ผ ํ•จ -> ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ถœ ์œ„ํ—˜์„ฑ โ€ข new ๋ฐ delete์˜ ์œ„์น˜์ง€์ • ๋ฒ„์ „์„ ์„ ์–ธํ•  ๋•Œ๋Š”, ์˜๋„ํ•œ ๋ฐ”๋„ ์•„๋‹Œ๋ฐ ์ด๋“ค์˜ ํ‘œ์ค€ ๋ฒ„์ „์ด ๊ฐ€๋ ค์ง€ ๋Š” ์ผ์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ฃผ์˜
  • 37. ํ•ญ๋ชฉ 53: ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ์ง€๋‚˜์น˜์ง€ ๋ง์ž โ€ข ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ์‰ฝ๊ฒŒ ์ง€๋‚˜์น˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค -> ํ›„์— ๋ถ„๋ช…ํžˆ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ์ผ์ด ์‹ญ์ค‘ํŒ”๊ตฌ โ€ข ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ์— ๋„ˆ๋ฌด ์˜์ง€ํ•˜๋Š” ์ผ์„ ํ•˜์ง€ ๋ง ๊ฒƒ -> ์ปดํŒŒ์ผ๋Ÿฌ๋งˆ๋‹ค ๊ฒฝ๊ณ ๋ฅผ ๋‚ด๋Š” ๋ถ€๋ถ„์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ ๋ฌธ์ด๋‹ค.
  • 38. ํ•ญ๋ชฉ 54: TR1์„ ํฌํ•จํ•œ ํ‘œ์ค€ ๋ผ ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ์™€ ํŽธ์•ˆํ•œ ์นœ ๊ตฌ๊ฐ€ ๋˜์ž โ€ข ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (STL) : ์ปจํ…Œ์ด๋„ˆ, ๋ฐ˜๋ณต ์ž, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ,ํ•จ์ˆ˜๊ฐ์ฒด ๋“ฑ์„ ๋‹ด๊ณ  ์žˆ์Œ โ€ข iostream, ๊ตญ์ œํ™” ์ง€์›, ์ˆ˜์น˜ ์ฒ˜๋ฆฌ ์ง€์› โ€ข ์˜ˆ์™ธ ํด๋ž˜์Šค ๊ณ„ํ†ต ์ง€์› โ€ข ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉ์˜ ํšจ์œจ์„ฑ์„ ํ‚ค์šฐ์ž
  • 39. ํ•ญ๋ชฉ 55: ๋ถ€์ŠคํŠธ๋ฅผ ๋Š˜ ์—ฌ๋Ÿฌ ๋ถ„ ๊ฐ€๊นŒ์ด์—โ€ข ๋ถ€์ŠคํŠธ๋Š” C++ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋‹จ์ฒด์ด์ž ๋ฌด๋ฃŒ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๊ฐ€ ๋Šฅํ•œ C++๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง‘ํ•ฉ์„ ๋™์‹œ์— ์ผ์ปซ๋Š” ๊ณ ์œ ๋ช…์‚ฌ -> ์›น์‚ฌ์ดํŠธ http://boost.org์— ๋ฐฉ๋ฌธํ•˜์—ฌ ๋งŒ๋‚  ์ˆ˜ ์žˆ์Œ โ€ข ๋ถ€์ŠคํŠธ๋Š” C++ํ‘œ์ค€ํ™” ์œ„์›ํšŒ์™€ ๋ฐ€์ ‘ํ•˜๊ณ  ์˜ํ–ฅ๋ ฅ์žˆ๋Š” ๊ด€ ๊ผ ์œ ์ง€ โ€ข ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šน์ธ ์‹ฌ์‚ฌ๋Š” ๊ณต๊ฐœ ๋™๋ฃŒ ์‹ฌ์‚ฌ์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ์Œ โ€ข ๋ถ€์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฐ๋‹จ์€ ์—„์ฒญ๋‚˜๊ฒŒ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž„ โ€ข ๋ฌธ์ž์—ด ๋ฐ ํ…์ŠคํŠธ์ฒ˜๋ฆฌ, ์ปจํ…Œ์ด๋„ˆ, ํ•จ์ˆ˜ ๊ฐ์ฒด ๋ฐ ๊ณ ์ฐจ ํ”„๋กœ ๊ทธ๋ž˜๋ฐ, ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ˆ˜ ํ•™ ๋ฐ ์ˆ˜์น˜์กฐ์ž‘, ์ •ํ™•์„ฑ ์œ ์ง€ ๋ฐ ํ…Œ์ŠคํŠธ, ์ž๋ฃŒ๊ตฌ์กฐ, ํƒ€ ์–ธ ์–ด์™€์˜ ์—ฐ๋™ ์ง€์›, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ๋“ฑ