SSISO Community

시소당

[JAVA(SCJP),JSP(SCWCD),EJB(SCBCD)] 자바 1.4의 새기능: Assertion(2)


Assertion의  사용

Assertion은  예외를  대체하진  않지만  예외보다  효과적인  기능을  제공할  수가  있다.  프로그램을  매끄럽게  실행하기  위해서는  Assertion의  위치가  중요하다.  만약  Assertion의  위치가  올바르지  않다면  Assertion이  아무  소용이  없기  때문이다.

전위조건으로  Assertion  사용하기

Assertion을  사용하기  가장  좋은  경우는  어떤  동작을  수행하기  전에  수행에  필요한  값들의  조건을  검사하는  것이다.  예를  들어,  회원  가입을  처리하는  register(MemberInfo  member)라는  메소드를  생각해보자.  register()  메소드는  다음과  같이  전달받은  파라미터를  검사할  수  있을  것이다.

        private  void  register(MemberInfo  member)  {
                assert  Member  !=  null:"MemberInfo  cannot  be  null";
                assert  member.getId()  !=  null  &&  !member.getId().equals("");
                
                ...
        }


후위조건으로  Assertion  사용하기

어떤  동작을  수행하기  전에  값들을  검사할  때  Assertion을  사용하는  것과  반대로,  동작을  수행한  후의  결과값들을  검사하기  위해서도  Assertion을  사용할  수  있다.  예를  들어,  어떤  값을  리턴하기  전에  assert  문장을  사용하여  리턴할  값이  올바른지의  여부를  판단할  수  있다.

Assertion을  사용해선  안  되는  경우

예외가  모든  경우에  알맞은  것이  아니듯이,  Assertion도  모든  경우에  알맞지는  않다.  다음의  경우에는  Assertion을  사용하지  않는  것이  좋다.

        *  public  메소드의  파라미터를  검사하는  경우
        *  올바른  수행을  위해  필요한  작업을  수행하는  경우  

먼저  public  메소드의  파라미터를  검사하는  경우를  살펴보자.  일반적으로  public  메소드에  전달된  파라미터를  검사할  때에는,  파라미터의  값이  잘못된  경우에  메소드에  알맞은  의미를  나타내지  않는  AssertionError  보다는  IllegalArgumentException과  같이  알맞은  의미를  갖는  예외를  발생시키는  것이  좋다.

또한,  올바른  수행을  위해서  필요한  작업을  assert  문장에서  실행하면  안된다.  예를  들어,  다음과  같은  코드를  생각해보자.

        assert  checkName();


1.4버전의  자바가상환경(JRE)는  기본적으로  Assertion  기능을  사용하지  않는다.  따라서,  기본적으로  기능을  사용하도록  명시하지  않는다면  위의  메소드는  실행되지  않을  것이다.  따라서,  올바른  수행을  하는  데  반드시  필요한  코드는  assert  문장에  넣어서는  안  되며,  다음과  같이  해  주어야  한다.

        boolean  checked  =  checkName();
        assert  checked;

578 view

4.0 stars