22
예외처리 예외처리 예외처리 예외처리 프로그램을 안전하게 만들어 주는 보험 ( ( (쳬계적인 쳬계적인 쳬계적인 쳬계적인 에러 에러 에러 에러 처리 처리 처리 처리) ) )

예외처리 만들어 - dongseo.ac.krdongseo.ac.kr/~dkkang/OOP2008Fall/W14.pdf · 01_예외처리 개요 #1 예외처리란 쳬계적인 에러 처리 메커니즘으로 프로그램의

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 예외

    처리

    예외

    처리

    예외

    처리

    예외

    처리

    프로

    그램

    을안

    전하

    게만

    들어

    주는

    보험

    ( (((쳬계

    적인

    쳬계

    적인

    쳬계

    적인

    쳬계

    적인

    에러

    에러

    에러

    에러

    처리

    처리

    처리

    처리

    ) )))

  • 이장

    에서

    다룰

    내용

    예외

    처리

    개요

    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

    장 장장장끝 끝끝끝