예외처리 만들어 - dongseo.ac.krdongseo.ac.kr/~dkkang/oop2008fall/w14.pdf · 01_예외처리...
Post on 03-Nov-2019
7 Views
Preview:
TRANSCRIPT
-
예외
처리
예외
처리
예외
처리
예외
처리
프로
그램
을안
전하
게만
들어
주는
보험
( (((쳬계
적인
쳬계
적인
쳬계
적인
쳬계
적인
에러
에러
에러
에러
처리
처리
처리
처리
) )))
-
이장
에서
다룰
내용
예외
처리
개요
1
thro
w 인
자로
클래
스이
용하
기2
여러
타입
의catc
h3
예외
중첩
4
-
01_예
외처
리개
요#
1
�예
외처
리란
쳬계
적인
에러
처리
메커
니즘
으로
프로
그램
의에
러나
오동
작을
막기
위해
서반
드시
필요
한안
정장
치이
다.
�C
++에
서는
예외
처리
를위
해,
try-catc
h 블
록과
thro
w를
지원
한다
.�
C#
/Java와
는달
리tr
y-
catc
h-
fin
all
y의
fin
all
y를
지원
하지
않는
다.
•초
기화
초기
화초
기화
초기
화시
에시
에시
에시
에자
원자
원자
원자
원획
득을
획득
을획
득을
획득
을완
료하
고완
료하
고완
료하
고완
료하
고소
멸될
소멸
될소
멸될
소멸
될때 때때때
자원
자원
자원
자원
해제
를해
제를
해제
를해
제를
완료
한다
는완
료한
다는
완료
한다
는완
료한
다는
RAII
RAII
RAII
RAII
철학
철학
철학
철학
때문
임때
문임
때문
임때
문임
때문
임때
문임
때문
임때
문임
�tr
y 블
록에
는예
외가
일어
날가
능성
이있
는코
드를
넣고
, catc
h 블
록에
예외
가일
어난
경우
에대
한처
리코
드를
넣은
후,
try 내
부에
서예
외가
일어
난경
우에
는th
row
를이
용하
여예
외를
발생
시킨
다.
�th
row
를이
용하
여예
외가
발생
한이
후의
코드
는실
행되
지않
으며
, th
row
로발
생되
는예
외의
형태
는어
떤타
입이
든지
사용
할수
있다
.
-
01_예
외처
리개
요#
2
�예
외처
리에
대한
사용
법은
다음
과같
다
-
[기본
예제
14-1]
예외
처리
01
#in
clu
de<io
stream
>
02
usin
gnam
espace s
td;
03
double
recip
rocal(double
a)
04
{
05
if (
0 =
= a
) {
06
thro
w "
Recip
rocal Exception";
07
}
08
els
e {
09
double
ret = 1
/a;
10
retu
rn r
et;
11
}
12
}
13
예외
를예
외를
예외
를예
외를
발생
시킨
다발
생시
킨다
발생
시킨
다발
생시
킨다
. ...
13
14
int m
ain
(int arg
c,
char*
arg
v[])
15
{
16
try
17
{
18
cout << "
result :
" <
< r
ecip
rocal(0)
<< e
ndl;
19
}
20
catc
h(c
har*
e)
21
{
22
cout << e
<< e
ndl;
23
}
24
25
retu
rn 0
;
26
}
예외
가예
외가
예외
가예
외가
발생
할발
생할
발생
할발
생할
가능
성이
가능
성이
가능
성이
가능
성이
있는
있는
있는
있는
코드
를코
드를
코드
를코
드를
시도
한다
시도
한다
시도
한다
시도
한다
. ...
예외
가예
외가
예외
가예
외가
발생
한발
생한
발생
한발
생한
경우
를경
우를
경우
를경
우를
처리
한다
처리
한다
처리
한다
처리
한다
. ...
-
02_t
hro
w 인
자로
클래
스객
체이
용하
기
�변
수를
이용
하여
예외
에대
한정
보를
전달
하기
에는
약간
부족
한면
이있
으나
, 클
래스
를이
용하
면이
러한
문제
가해
결된
다.
�클
래스
를th
row
로전
달하
는방
법은
변수
와동
일하
다.
�다
만catc
h문
이시
작될
때객
체의
복사
가일
어나
게되
므로
,�
다만
catc
h문
이시
작될
때객
체의
복사
가일
어나
게되
므로
,다
음과
같이
레퍼
런스
를사
용하
는것
이바
람직
하다
.
catc
h(e
xcepti
on&
e)
{ � }
-
[기본
예제
14-4]
클래
스를
이용
한예
외처
리
01
#in
clu
de<io
stream
>
02
usin
g n
am
espace s
td;
03
cla
ss e
xception {
04
public
:
05
void
printo
ut(
) {
06
cout << "
exception o
ccurs
" << e
ndl;
07
}
08
};
09
10
double
recip
rocal(double
a)
11
{
12
if (
0 =
= a
) {
13
thro
w e
xception()
;
14
}
Exc
eption
Exc
eption
Exc
eption
Exc
eption 클
래스
를클
래스
를클
래스
를클
래스
를정
의한
다정
의한
다정
의한
다정
의한
다. ...
클래
스를
클래
스를
클래
스를
클래
스를
이용
하여
이용
하여
이용
하여
이용
하여
예외
를예
외를
예외
를예
외를
발생
시킨
다발
생시
킨다
발생
시킨
다발
생시
킨다
. ...14
}
15
els
e {
16
double
ret = 1
/a;
17
retu
rn r
et;
18
}
19
}
20
21
int m
ain
(int arg
c,
char*
arg
v[])
22
{
23
try
24
{
25
cout << "
result :
" <
< r
ecip
rocal(0)
<< e
ndl;
26
}
27
catc
h(e
xception&
e)
28
{
29
e.p
rinto
ut(
);
30
}
31
retu
rn 0
;
32
}
발생
시킨
다발
생시
킨다
발생
시킨
다발
생시
킨다
. ...
예외
가예
외가
예외
가예
외가
발생
할발
생할
발생
할발
생할
가능
성이
가능
성이
가능
성이
가능
성이
있는
있는
있는
있는
코드
를코
드를
코드
를코
드를
시도
한다
시도
한다
시도
한다
시도
한다
. ...
예외
가예
외가
예외
가예
외가
발생
한발
생한
발생
한발
생한
경우
경우
경우
경우
, ,,,받
은받
은받
은받
은클
래스
를클
래스
를클
래스
를클
래스
를이
용하
여이
용하
여이
용하
여이
용하
여처
리한
다처
리한
다처
리한
다처
리한
다. ...
-
03_여
러타
입의
catc
h
�만
약여
러가
지의
예외
가발
생한
다면
?�
catc
h를
형별
로여
러번
사용
한다
.
�정
의되
지않
은형
태의
예외
처리
는‘c
atc
h(.
..)’
를사
용한
다.
�기
본예
제[1
4-5]를
살펴
보자
.�
마치
sw
itch ~
case 문
과유
사하
게보
일것
이다
.실
제동
작도
그와
크게
다르
지않
다.
-
[기본
예제
14-5]
여러
타입
에대
한예
외처
리#
1
#in
clu
de
<io
stream
>
usin
g n
am
espace s
td;
01
cla
ss e
xception1 {
02
public
:
03
void
printo
ut(
) {
04
cout << "
exception1 o
ccurs
" << e
ndl;
05
}
06
};
07
08
cla
ss e
xception2 {
09
public
:
10
void
printo
ut(
) {
11
cout << "
exception2 o
ccurs
" << e
ndl;
Exc
eption1
Exc
eption1
Exc
eption1
Exc
eption1 클
래스
를클
래스
를클
래스
를클
래스
를정
의한
다정
의한
다정
의한
다정
의한
다. ...
Exc
eption2
Exc
eption2
Exc
eption2
Exc
eption2 클
래스
를클
래스
를클
래스
를클
래스
를정
의한
다정
의한
다정
의한
다정
의한
다. ...
11
cout << "
exception2 o
ccurs
" << e
ndl;
12
}
13
};
14
15
void
thro
w_exception(
int a )
16
{
17
if (
0 =
= a
)
18
thro
w e
xception1()
;
19
els
e if
( 1 =
= a
)
20
thro
w e
xception2()
;
21
}
22
�
정의
한다
정의
한다
정의
한다
정의
한다
. ...
상황
에상
황에
상황
에상
황에
따라
따라
따라
따라
예외
를예
외를
예외
를예
외를
발생
시킨
다발
생시
킨다
발생
시킨
다발
생시
킨다
. ...
-
[기본
예제
14-5]
여러
타입
에대
한예
외처
리#
2
23
void
test_
exception(
int a )
24
{
25
try
26
{
27
thro
w_exception(
a )
;
28
}
29
catc
h(e
xception1&
e)
30
{
31
e.p
rinto
ut(
);
32
}
33
catc
h(e
xception2&
e)
34
{
35
e.p
rinto
ut(
);
예외
가예
외가
예외
가예
외가
발생
할발
생할
발생
할발
생할
가능
성이
가능
성이
가능
성이
가능
성이
있는
있는
있는
있는
코드
를코
드를
코드
를코
드를
시도
한다
시도
한다
시도
한다
시도
한다
. ...
exc
eption1
exc
eption1
exc
eption1
exc
eption1에 에에에
해당
하는
해당
하는
해당
하는
해당
하는
예외
가예
외가
예외
가예
외가
발생
한발
생한
발생
한발
생한
경우
를경
우를
경우
를경
우를
처리
한다
처리
한다
처리
한다
처리
한다
. ...
exc
eption2
exc
eption2
exc
eption2
exc
eption2에 에에에
해당
하는
해당
하는
해당
하는
해당
하는
예외
가예
외가
예외
가예
외가
발생
한발
생한
발생
한발
생한
경우
를경
우를
경우
를경
우를
처리
한다
처리
한다
처리
한다
처리
한다
. ...
35
e.p
rinto
ut(
);
36
}
37
}
38
39
int m
ain
(int arg
c,
char*
arg
v[])
40
{
41
test_
exception(0
);
42
test_
exception(1
);
43
44
retu
rn 0
;
45
}
-
04_예
외중
첩
�tr
y 블
록이
중첩
되어
있다
면?
�예
외를
해당
블록
내에
서처
리하
지못
하면
밖의
try 블
록에
서처
리하
게된
다.
�다
음의
기본
예제
[14-6]은
기본
예제
[14-5]와
기본
적으
로동
일하
지만
, te
st_
excepti
on에
서tr
y,
catc
h 구
조를
중첩
되도
록수
정한
예제
이다
.
�또
한,
다음
과같
이예
외처
리를
한후
받은
예외
를그
대로
밖으
로던
질수
도있
다.
catc
h(e
xcepti
on&
e)
{e.p
rinto
ut(
);th
row
;}
-
[기본
예제
14-6]
예외
중첩
#1
� 17
void
thro
w_exception(
int a )
18
{
19
if (
0 =
= a
)
20
thro
w e
xception1()
;
21
els
e if
( 1 =
= a
)
22
thro
w e
xception2()
;
23
els
e
24
thro
w "
?";
25
}
26
27
void
test_
exception(
int a )
cla
ss e
xception1,
cla
ss e
xception1,
cla
ss e
xception1,
cla
ss e
xception1,
cla
ss e
xception2
cla
ss e
xception2
cla
ss e
xception2
cla
ss e
xception2는 는는는
기본
기본
기본
기본
예제
예제
예제
예제
14
14
14
14- ---5 555와 와와와
동일
하게
동일
하게
동일
하게
동일
하게
정의
한다
정의
한다
정의
한다
정의
한다
. ...
상황
에상
황에
상황
에상
황에
따라
따라
따라
따라
예외
를예
외를
예외
를예
외를
발생
시킨
다발
생시
킨다
발생
시킨
다발
생시
킨다
. ...
27
void
test_
exception(
int a )
28
{
29
try
30
{
31
try
32
{
33
try
34
{
35
thro
w_exception(
a )
;
36
}
37
catc
h(e
xception1&
e)
38
{
39
e.p
rinto
ut(
);
40
}
41
}
�
예외
가예
외가
예외
가예
외가
발생
할발
생할
발생
할발
생할
가능
성이
가능
성이
가능
성이
가능
성이
있는
있는
있는
있는
코드
를코
드를
코드
를코
드를
실행
한다
실행
한다
실행
한다
실행
한다
. ...
-
[기본
예제
14-6]
예외
중첩
#2
� 42
catc
h(e
xception2&
e)
43
{
44
e.p
rinto
ut(
);
45
}
46
}
47
catc
h(.
..)
48
{
49
cout <<
"unknow
n e
xception"
<< e
ndl;
50
}
51
}
52
53
나머
지나
머지
나머
지나
머지
모든
모든
모든
모든
예외
에예
외에
예외
에예
외에
대한
대한
대한
대한
처리
를처
리를
처리
를처
리를
수행
한다
수행
한다
수행
한다
수행
한다
. ...
53
54
int m
ain
(int arg
c,
char*
arg
v[])
55
{
56
test_
exception(0
);
57
test_
exception(1
);
58
test_
exception(2
);
59
60
retu
rn 0
;
61
}
-
예제
모음
_27의
요구
사항
및실
행결
과
요구
사항
요구
사항
요구
사항
요구
사항
1. 다
음과
같은
사각
형클
래스
가있
다.
cla
ss R
ecta
ngle
{in
t w
idth
, heig
ht;
public:
Recta
ngle
( in
t x,
int
y )
{w
idth
=x;
heig
ht=
y;}
}; 이사
각형
클래
스의
생성
자내
부에
x 혹
은y
값이
0 이
하인
경우
에예
외를
발생
시키
도록
수정
하라
.발
생시
키도
록수
정하
라.
2. 직
접작
성한
excepti
on 클
래스
를이
용하
여예
외를
발생
시켜
야하
며, excepti
on
클래
스를
이용
하여
어떤
입력
인자
가입
력으
로들
어와
서예
외가
발생
했는
지출
력하
라.
실행
결과
실행
결과
실행
결과
실행
결과
Recta
ngle
(3,0
)의경
우에
대한
결과
-
예제
모음
_27
소스
#1
01
#in
clu
de<io
stream
>
02
usin
gnam
espace s
td;
03
cla
ss e
xception {
04
int a,b
;
05
public
:
06
exception(int x,
int y)
: a(x
), b
(y)
{
} /
/ 생
성자
초기
자리
스트
07
void
printo
ut(
) {
08
cout << "
exception o
ccurs
: "
<<
09
a <
< "
, "
<< b
<< e
ndl;
10
}
11
};
12
13
cla
ss R
ecta
ngle
{
exc
eption
exc
eption
exc
eption
exc
eption 클
래스
를클
래스
를클
래스
를클
래스
를정
의한
다정
의한
다정
의한
다정
의한
다. ...
13
cla
ss R
ecta
ngle
{
14
int w
idth
, heig
ht;
15
public
:
16
Recta
ngle
( in
t x,int y )
: w
idth
(x),
heig
ht(
y)
{
17
if (
wid
th <
=0 |
| h
eig
ht<
=0 )
{
18
exception e
(wid
th,
heig
ht)
;
19
thro
w e
;
20
}
21
// w
idth
=x;
heig
ht=
y;
22
}
23
};
24
�
-
예제
모음
_27
소스
#2
� 25
int m
ain
(int arg
c,
char*
arg
v[])
26
{
27
try
28
{
29
Recta
ngle
rect1
( 1,
1 )
;
30
31
Recta
ngle
rect2
( 3,
0 )
;
32
}
33
catc
h(
exception&
e )
34
{
35
e.p
rinto
ut(
);
36
}
이 이이이경
우에
는경
우에
는경
우에
는경
우에
는정
상적
으로
정상
적으
로정
상적
으로
정상
적으
로처
리한
다처
리한
다처
리한
다처
리한
다. ...
이 이이이경
우에
는경
우에
는경
우에
는경
우에
는예
외가
예외
가예
외가
예외
가발
생한
다발
생한
다발
생한
다발
생한
다. ...
36
}
37
38
retu
rn 0
;
39
}
-
예제
모음
_28의
요구
사항
및실
행결
과
요구
사항
요구
사항
요구
사항
요구
사항
1. 예
제모
음_2
7의
Recta
ngle
과동
일한
사각
형클
래스
가있
다.
이사
각형
클래
스의
생성
자내
부에
x 혹
은y
값이
0 이
하인
경우
에예
외를
발생
시키
고, 또
한x
혹은
y의값
이음
수인
경우
에다
른종
류의
예외
를발
생시
켜라
.
2. 직
접작
성한
Zero
_Exc
epti
on 클
래스
와M
inus_
Exc
epti
on 클
래스
를이
용하
여예
외를
발생
시켜
야하
며, 어
떤예
외가
발생
했는
지화
면에
출력
하라
.
3. 아
래코
드와
같은
코드
가수
행될
수있
도록
exc
epti
on 클
래스
를상
속하
여Zero
_Exc
epti
on
클래
스와
Min
us_
Exc
epti
on 클
래스
를구
현하
도록
하라
.tr
y{
Recta
ngle
rect(
x, y
);
} catc
h(
exc
epti
on&
e )
{e.p
rinto
ut(
);} 실
행결
과실
행결
과실
행결
과실
행결
과
-
예제
모음
_28
소스
#1
01
#in
clu
de<io
stream
>
02
usin
g n
am
espace s
td;
03
cla
ss e
xception {
04
char*
szC
aption;
05
public
:
06
exception(c
har*
in){
07
szC
aption=in
;
08
}
09
void
printo
ut(
){
10
cout << s
zC
aption <
< e
ndl;
11
}
12
};
13
13
14
cla
ss Z
ero
_Exception : p
ublic
exception {
15
public
:
16
Zero
_Exception(
char*
in )
: e
xception(
in )
{
17
}
18
};
19
20
cla
ss M
inus_Exception :
public
exception {
21
public
:
22
Min
us_Exception(
char*
in )
: e
xception(
in )
{
23
}
24
};
25
�
exc
eption
exc
eption
exc
eption
exc
eption 클
래스
로클
래스
로클
래스
로클
래스
로부
터부
터부
터부
터상
속받
아상
속받
아상
속받
아상
속받
아Zero
_Exc
eption
Zero
_Exc
eption
Zero
_Exc
eption
Zero
_Exc
eption
클래
스를
클래
스를
클래
스를
클래
스를
정의
한다
정의
한다
정의
한다
정의
한다
. ...
exc
eption
exc
eption
exc
eption
exc
eption 클
래스
로클
래스
로클
래스
로클
래스
로부
터부
터부
터부
터상
속받
아상
속받
아상
속받
아상
속받
아M
inus_E
xception
Min
us_E
xception
Min
us_E
xception
Min
us_E
xception
클래
스를
클래
스를
클래
스를
클래
스를
정의
한다
정의
한다
정의
한다
정의
한다
. ...
-
예제
모음
_28
소스
#2
� 26
cla
ss R
ecta
ngle
{
27
int w
idth
, heig
ht;
28
public
:
29
Recta
ngle
( in
t x,int y )
wid
th(x
), h
eig
ht(
y)
{
30
if (
0 =
= w
idth
|| 0
== h
eig
ht
) {
31
Zero
_Exception e
("zero
exception o
ccurs
");
32
thro
w e
;
33
}
34
if (
wid
th <
0 |
| h
eig
ht < 0
) {
35
Min
us_Exception e
("m
inus e
xception o
ccurs
");
36
thro
w e
;
37
}
0 000이 이이이
입력
으로
입력
으로
입력
으로
입력
으로
들어
오면
들어
오면
들어
오면
들어
오면
, ,,,Zero
_Exc
eption
Zero
_Exc
eption
Zero
_Exc
eption
Zero
_Exc
eption을 을을을
발생
시킨
다발
생시
킨다
발생
시킨
다발
생시
킨다
. ...
음수
가음
수가
음수
가음
수가
입력
으로
입력
으로
입력
으로
입력
으로
들어
오면
들어
오면
들어
오면
들어
오면
, ,,,M
inus_E
xception
Min
us_E
xception
Min
us_E
xception
Min
us_E
xception을 을을을
발생
시킨
다발
생시
킨다
발생
시킨
다발
생시
킨다
. ...37
}
38
// w
idth
=x;
heig
ht=
y;
39
}
40
};
41
42
void
test_
exception(
int x,
int y)
43
{
44
try
45
{
46
Recta
ngle
rect(
x,
y )
;
47
}
48
catc
h(
exception&
e )
49
{
50
e.p
rinto
ut(
);
51
}
52
}
53
�
-
예제
모음
_28
소스
#3
� 54
int m
ain
(int arg
c,
char*
arg
v[])
55
{
56
test_
exception(
1,
1 )
;
57
58
test_
exception(
0,
2 )
;
59
60
test_
exception(
3,
-1 )
;
61
62
retu
rn 0
;
63
}
이 이이이경
우에
는경
우에
는경
우에
는경
우에
는정
상적
으로
정상
적으
로정
상적
으로
정상
적으
로동
작한
다동
작한
다동
작한
다동
작한
다. ...
이 이이이경
우에
는경
우에
는경
우에
는경
우에
는Zero
_Exc
eption
Zero
_Exc
eption
Zero
_Exc
eption
Zero
_Exc
eption이 이이이
발생
한다
발생
한다
발생
한다
발생
한다
. ...
이 이이이경
우에
는경
우에
는경
우에
는경
우에
는M
inus_E
xception
Min
us_E
xception
Min
us_E
xception
Min
us_E
xception이 이이이
발생
한다
발생
한다
발생
한다
발생
한다
. ...
-
요약 예
외처
리의
예외
처리
의개
요개
요
예외
처리
란프
로그
램의
에러
나오
동작
을막
기위
해서
꼭필
요한
최소
한의
안전
장치
다.
예외
처리
의예
외처
리의
사용
법사
용법
여러
여러
타입
의타
입의
catch
catch
예외
예외
중첩
중첩
•try
내부
에서
예외
가일
어난
경우
에는
thro
w를
이용
하여
예외
를발
생시
키며
, 예
외가
발생
한이
후의
코드
는실
행되
지않
는다
.•
어떤
변수
형이
나클
래스
도Thro
w를
이용
하여
예외
를발
생시
킬수
있다
.
여러
종류
의예
외를
처리
하기
위해
서는
처리
하고
자하
는예
외에
해당
하는
catc
h 문
들을
모두
사용
해야
한다
.
Try
문은
중첩
사용
이가
능하
며,
해당
try~
catc
h 블
록에
서처
리되
지않
은예
외는
그밖
의try~
catc
h 블
록에
서처
리하
게된
다.
-
www.themegallery.com
IT C
ookB
ook
for Begin
ner, C
++
IT C
ookB
ook
for Begin
ner, C
++
IT C
ookB
ook
for Begin
ner, C
++
IT C
ookB
ook
for Begin
ner, C
++ 기
초기
초기
초기
초14 141414
장 장장장끝 끝끝끝
top related