์์ธ ์ฒ๋ฆฌ
์์ธ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก์จ ์๊ณ ๋ฆฌ์ฆ์ด ๋ง์ฃผํ ์ ์๋ ์์ธ ์ํฉ์ ๋ํด ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค. ์ด ๊ฒฐ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ๋ณด๋ค ์ง์คํ ์ ์๋ค.
์๋ฌ๋ฅผ ๋ง๋ค์ด ๋ณด์.
Output
10
=> Error
vector size๋ณด๋ค ํฐ index๋ฅผ ๋ฃ์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ด ๋ฉ์ถฐ๋ฒ๋ฆฐ๋ค.
์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ ๋ง๋๋ ์ฌ๋ ์ ์ฅ์์๋ ์ด๋ ๋ถ๋ถ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฌ๋์ง ์ฐพ๊ธฐ ์ด๋ ต๋ค.
Try/catch
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ํ์ฉํ๋ค.
Output1
์๊ณ ์ถ์ ์ธ๋ฑ์ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ :3
4
[program is still running!]
Program ended with exit code: 0
Output2
์๊ณ ์ถ์ ์ธ๋ฑ์ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ :10
vector
์ธ๋ฑ์ค ์ค๋ฅ๊ฐ ๋ฐ์!
[program is still running!]
Program ended with exit code: 0
์ธ๋ฑ์ค๋ฅผ ๋์ด๊ฐ๋ ๊ฐ์ ์ ๋ ฅํ์ ๋, ์ด ์ค๋ฅ๋ฅผย ์บ์นํด์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด ์ฃผ์๋ค. ๋ํ, ์์ธ์ฒ๋ฆฌ ๊ตฌ๋ฌธ์ ํตํด์, ํ๋ก๊ทธ๋จ์ด ์ ๋๋ก ๋ง๋ฌด๋ฆฌ ๋์๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค! ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ธ๋ฅผ ํต๊ณผํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์์์ ํ๋จํ ์ ์๋ค.
์ฌ์ฉ๋ฒ
- ์์ธ๋ฅผ throw ํ ๊ฒ ๊ฐ์ ๊ณณ์ย
try
ย block์ผ๋ก ์ผ๋ค. - ์์ธ๊ฐ ๋ฐ์ ํ์ ๊ฒฝ์ฐ์๋ง ๋ฐ์ํ ์ฝ๋๋ฅผย
catch
ย block ์ผ๋ก ์ผ๋ค. exception& e
ย ๋ ํ๋ก๊ทธ๋จ์ด ๋์ง๋ ์๋ฌ๋ฅผ ๋ฐ์์ฃผ๋ ๊ฐ์ฒด์ด๋ค.try/catch
ย ๊ตฌ๋ฌธ์ยif
ย ๋ฌธ ์ฒ๋ผ state๊ฐ ํ์ค์ด๋๋ผ๋ ๊ผญย{}
ย ๋ก ๊ฐ์ธ์ค์ผ ํ๋ค.
std::exception class
์์ธ๋ฅผ ๋ด๋นํ๋ ๊ธฐ๋ณธ c++์ ๊ณต ํด๋์ค์ด๋ค. ๋ชจ๋ ์์ธ ์ฒ๋ฆฌ ํด๋์ค๋ ์ด ํด๋์ค๋ฅผ ์์๋ฐ์์ ์์ฑ๋๋ค.
๋ฐ๋ผ์ ๋คํ์ฑ์ ์๋ฆฌ์ ์ํด ์ด๋ค ์๋ฌ๋ฅผ ๋์ง๋๋ผ๋, ์ถ์ํด๋์ค์ธย exception classย ๋ก ๋ฐ์ ์ ์๋ค.
Member functions
์ด์ค์์ย what()
ย ์ด๋ผ๋ ํจ์๊ฐ ์ค์ํ๊ฒ ์ฌ์ฉ๋๋๋ฐ, ์ด๋ค ์์ธ์ด๋์ ๋ฐ๋ผ ์ดย what()
ย ํจ์๊ฐ ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ๋๋ค. ์ฆ, override ๋ฅผ ํตํด ์ฌ์ ์ํด์ ์ฌ์ฉํ๋ค!
์ฌ๊ธฐ์๋ ์ฌ์ค ๋ค๋ฅธ๊ตฌ๋ฌธ์ ์ฐ์ง๋ง ๊ทธ๊ฑด ๋ฐ์์ ์์๋ณด์.
vector container ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
์์ ์์์, vector์ index๋ก ์ ๊ทผํ๋ ๋ถ๋ถ์ ๋ฐ๊ฟ๋ณด์.
Output
์๊ณ ์ถ์ ์ธ๋ฑ์ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ :3
4
[program is still running!]
Program ended with exit code: 0
์๊ณ ์ถ์ ์ธ๋ฑ์ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ :10
1
[program is still running!]
Program ended with exit code: 0
๊ธฐ์กด ์๋ 10์ ๋ฃ์์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋๋ฐ, ์ด๋ฒ์๋ ์๋ฌ๊ฐ ๋จ์ง ์๋๋ค ์ ๊ทธ๋ด๊น?
์ด๊ฑด ํด๋์ค ๋ด๋ถ์์ ์๋ฌ๋ฅผ ๋ฐ์ํ๋ย exception
ย ๊ฐ์ฒด๋ฅผย throw
ย ํด์ฃผ์ง ์์์ ๊ทธ๋ ๋ค.
ํด๋์ค์์ ์์ธ ์ฒ๋ฆฌ ๊ตฌ๋ฌธ ๋ง๋ค๊ธฐ
์์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ํจ์ ๋ง๋ค๊ธฐ
์์์๋ย try/catch
ย ๊ตฌ๋ฌธ์ ์ฌ์ฉํด vector container ์์ ๋ฐ์ํ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ฐ์์ ํํํ๋์ง ์์๋ณด์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ ํจ์๋ ํด๋์ค๋ฅผ ๋ง๋ค ๋, ์ด๋ค ๋ถ๋ถ์์ ์๋ฌ๊ฐ ๋ ์ง๋ฅผ ๊ท๋ช ํด์ฃผ๋ ๊ฒ์ด ํ์ํ๋ค.
์ฌ๊ธฐ์๋, file์ ์ฝ์ด, ๋ฒกํฐ๋ก ๋ฃ์ด์ฃผ๋ ํจ์๋ฅผ ๋ง๋ค์ด ๋ณด์๋ค. ์ด๋ ๋ง์ฝ ํ์ผ์ ์ฝ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ throw ํ๋๋ก ๋ง๋ค์๋ค.
throw ๊ตฌ๋ฌธ
๊ตฌ๋ฌธํด์
- ์์ธ ์ฒ๋ฆฌ throw
- ํน์ ์ํฉ์ ์๋ฌ๊ฐ ๋ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์๋ฌ๋ฅผ ๋์ ธ์ค์ผ ํ๋ค.
- ์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ดย throwย ๊ตฌ๋ฌธ์ด๋ค.
์์ธ ์ฒ๋ฆฌ ํด๋์ค ๋ง๋ค๊ธฐ
๊ทธ๋ ๋ค๋ฉดย FileNotFoundException
ย ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ํด๋์ค์ด๋ฏ๋ก,
์์์ ๋งํ๋ฏ, ์์ธ ์ฒ๋ฆฌ ํด๋์ค๋ย std::exception
ย ํด๋์ค๋ฅผ ์์ํด์ ๋ง๋ ๋ค.
๊ตฌ๋ฌธ ํด์
- ์์ฑ์(constructor)
- member variable ๋ก ๊ฐ๊ณ ์๋, message์ ๋ด์์ค๋ค.
what()
ย override ํ๊ธฐ.- virtual
- ์ดย
FileNotFoundException
ย ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ค๋ฅธ ํด๋์ค๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์จ์ฃผ์๋ค.
- ์ดย
- const
what()
ย ํจ์์ return type์ยconst char*
ย ์ด๋ค.- ์ฆ, ๋ฌธ์์ด์ ๋ฆฌํด ๊ฐ์ผ๋ก ๊ฐ๋๋ค๋ ๊ฒ์ธ๋ฐ,
- ์ด ๋ฆฌํด ๊ฐ์ ๋ณํ ์ ์์ผ๋ฏ๋กย
const
ย ๋ฅผ ์ ์ด ๋ช ์์ ์ผ๋ก ์จ์ค๋ค.
- what()
- override๋ฅผ ์ํํ ํจ์์ ์ด๋ฆ์ด๋ค.
- const
- ์ธ๋ถ ํจ์์์ ๋ง๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ฌ ๋,ย
callbyreference
ย ๋ก ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ ๊ฐ์ ๋ณํ ์ํฌ ์ ์๋ค. - ๊ทธ๋์ ์ฐ๋ฆฌ๋
void print(const ํด๋์ค์ด๋ฆ& p)
์ด๋ฐ์์ผ๋ก ๊ฐ์ ธ์ค๋๋ฐ, ์ด๋ ์ ๋ ฅ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ณํ์ํค์ง ์์ผ๋ฉด์ reference ํ๊ฒ ๋ค๋ ์๋์์ const๋ฅผ ์ ๊ฒ๋๋ฉด, ๋ด๊ฐ ๋ง๋ class ์์๋ const๋ฅผ ์ ์ ํจ์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. - ์ฆ, ์ธ๋ถ์์ const ์ํ๋ก ์ฌ์ฉํ๋ ํจ์๋ฅผ ์๋ฏธํ๋ค.
- ์ธ๋ถ ํจ์์์ ๋ง๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ฌ ๋,ย
- throw()
- ์์์ ์ค๋ช
ํ ์ด ๋ถ๋ถ์ด ๋ค๋ฅธ๋ฐ, exception ํด๋์ค๋ฅผ ์์๋ฐ์ ๋,ย
what()
ย ํจ์๋ฅผยoverride
ย ํ ๋๋,throw()
ย ๋ฅผ ์ฌ์ฉํ๋ค.
- ์์์ ์ค๋ช
ํ ์ด ๋ถ๋ถ์ด ๋ค๋ฅธ๋ฐ, exception ํด๋์ค๋ฅผ ์์๋ฐ์ ๋,ย
- virtual
- string ์ธย
message
ย ๋ฅผยchar
ย ๋ก ๋ง๋ค์ด์ฃผ์.
main ์์ try/catch ๊ตฌ๋ฌธ
์ด์ ํจ์๋ ๋ง๋ค๊ณ , ์์ธ์ฒ๋ฆฌ ํด๋์ค๋ ์ ์ํ์ผ๋, try/catch
ย ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ ๋ํ๋ด๋ณด์.
๊ตฌ๋ฌธํด์
- ์ฃผ์์ฒ๋ฆฌํ ๋ถ๋ถ์ ๋ณด๋ฉด, ์๋ย
catch
ย ๊ตฌ๋ฌธ์์๋ ์์ธ ์ฒ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ฐ์์ค์ผ ํ๋ค.- ์ฆ,ย
catch(FileNotFoundException& e)
ย ์ด๋ฐ์์ผ๋ก ์จ์ค์ผ ํ๋๋ฐ,catch(exception& e)
ย ์ด๋ ๊ฒ๋ง ์จ์คฌ๋ค. - ์ด ์ด์ ๋ ์์์ ์ค๋ช ํ ๊ฒ๊ณผ ๊ฐ์ดย ๋คํ์ฑย ๋๋ฌธ์ด๋ค.
- ์ฆ,ย
- ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋, ์ด ์๋ฌ๊ฐ ์ด๋ค ์๋ฌ์ธ์งย
what()
ย ๋ฉ์๋๋ก ๋ณด์ฌ์ค๋ค.
์ ์ฒด ์ฝ๋
try/catch ๊ตฌ๋ฌธ์ ์๋ ๋ฐฉ์
Findint Nearestย catch
ย Statement
์ฌ๋ฌ๊ฐ์ ํจ์์ย exception
ย ๊ณผย try/catch
ย ๊ตฌ๋ฌธ์ ๊ฑธ์ด๋์ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๊ทผ์ ํย catch
ย ๊ตฌ๋ฌธ์ ์ฐพ์๊ฐ์ ์คํํ๋ค.
์์
Output
******1๋ฒ catch********
๋ฐ๋ณต๋ฌธ์ด ์ค๊ฐ์ ๋ฉ์ท์ต๋๋ค.
when i =5
**********************
ํ๋ก๊ทธ๋จ ์ข
๋ฃ
Program ended with exit code: 0
๊ตฌ๋ฌธ ํด์
- main ํจ์
- main ํจ์๋ฅผ ๋ณด๊ฒ ๋๋ฉด, compute ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
- compute ํจ์
- compute ํจ์๋ filter ํจ์๋ฅผ ํธ์ถํ๋ค.
- filter ํจ์
- filter ํจ์๋ฅผ ์ํํ๋ ๋์ค, i์ ๊ฐ์ด size๋ฅผ ๋๋ ์๊ฐ์ด ์ค๊ณ , exception ๊ฐ์ฒด๋ฅผ throw ํ๋ค.
- ํ๋ก๊ทธ๋จ์ ์๋ ๊ธธ์ ๋๋์๊ฐ๋ฉฐ ๊ฐ์ฅ ๊ทผ์ ํ catch ๋ฌธ์ ์ฐพ๋๋ค.
- ์ด ๊ฒฝ์ฐ compute ํจ์์ ์๊ธฐ ๋๋ฌธ์, ์ด catch ๋ฌธ์ ์คํํ๋ค.
- main ํจ์๋ก ๋์์ฌ ๋๋ throw๊ฐ ๋ค ํด์๋๊ณ , ๋์์ค๋ throw๊ฐ ์์ผ๋ฏ๋ก catch ํจ์๋ ์คํ๋์ง ์๋๋ค.
double throw(Re-thorwing)
๊ทธ๋ฌ๋ฉด, main์ผ๋ก ๋์์ฌ ๋๋, ๊ฐ์ฒด๋ฅผ ๋์ ธ์ฃผ๋ฉด, ์ฌ๋ฌ๋ฒ์ catch ๊ตฌ๋ฌธ์ ์คํ ์ํฌ ์ ์์ง ์์๊น?
์์
Output
******1๋ฒ catch********
๋ฐ๋ณต๋ฌธ์ด ์ค๊ฐ์ ๋ฉ์ท์ต๋๋ค.
when i =5
**********************
******2๋ฒ catch******
์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
std::exception
**********************
ํ๋ก๊ทธ๋จ ์ข
๋ฃ
Program ended with exit code: 0