SSISO Community

시소당

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


Assertion  기본

자바  1.4  버전은  1.3  버전에  보안을  비롯한  다양한  확장  API를  추가하여  그  크기가  방대해졌을  뿐만  아니라  NIO와  로깅  등  새로운  기능을  추가함으로써  완벽한  개발  플랫폼으로  확장되었다.  이러한  새로운  기능들  중에서  자바에서는  전혀  새로운  기능이라고  할  수  있는  게  Assertion  기능이다.

Assertion은  무엇인가

JSR(Java  Specifiaction  Request)  41을  보면  다음과  같이  Assertion에  대해서  정의를  내리고  있다.

        Assertion은  불리언  식(expression)을  포함하고  있는  문장으로서,  프로그래머는  그  문장이  실행될  경우  불리언  식이  참이라고  단언할  수  있다.  

다시  말해서  개발자가  자신이  개발한  프로그램에서  가정하고  있는  사실이  올바른  지  검사할  수  있도록  하기  위해서  자바  1.4에  추가된  기능이  바로  Assertion인  셈이다.  예를  들어,  이러한  가정에는  이자율에  해당하는  변수가  0보다  커야  한다는  것  등이  있을  수  있다.  Assertion은  그러한  가정이  올바른  지  검사할  수  있도록  함으로써  프로그램이  부드럽게  수행될  수  있도록  도와준다.  이러한  검사  기능은  예외(Exception)를  사용해서도  구현할  수  있긴  하지만,  Assertion은  예외와는  다른  의미의  검사  기능을  제공한다.  이에  대해서는  이  글을  진행하면서  살펴볼  것이다.

왜  Assertion을  사용하는가?

사실,  예외를  사용하면  에러  검사  기능을  어느  정도  처리할  수  있다.  그런데  왜  Assertion이라는  새로운  검사  기능을  도입한  것일까?  이제  이  질문에  답을  해  보도록  하자.  먼저  자바의  예외는  주로  프로그램을  실행하는  도중에  예상하지  못한(또는  드물게  발생하는)  상태를  처리하는  데  사용된다.  예를  들어  파일을  열수  없다던가,  네트워크의  연결이  끊어졌다던가  하는  등의  이상  상태를  처리할  때  주로  예외가  사용된다.  반면에  Assertion은  개발자가  참이라고  가정하는  상태를  명시하기  위해서  사용된다.  에를  들어,  어떤  메소드가  파라미터로  양수만  입력받아야  한다고  확신한다면,  Assertion을  사용하여  그  사실을(즉,  파라미터가  양수라는  것을)  명시할  수  있다.

예외는  프로그램을  수행하는  도중에  발생하는  비정상적인  상태를  처리하기는  하지만  프로그램의  코드가  수행되는  도중에  예외가  발생한다.  반면에  Assertion은  프로그램이  올바르게  수행될  수  있는  조건을  명시해주어  그  조건을  만족시키는  경우에만  코드가  실행될  수  있도록  해  준다.  따라서  Assertion은  프로그램이  올바르게  실행되도록  해주는  효과적인  도구가  될  수  있으며,  프로그램의  안정성을  높여줄  수  있다.

Assertion의  문법

Assertion  문장은  다음과  같은  두가지  형태를  취한다.

    assert  불리언식;

    assert  뷸라온식:수식;

첫번째  형태는  간단한  형태로서  불리언식을  인자로  받는다.  불리언  식은  개발자가  참(true)이라고  생각하는  식이다.  만약  그  가정이  틀렸다면(즉,  불리언식이  false가  된다면),  불리언식은  Assertion이  틀렸음을  나타내는  false  값을  리턴하고,  불리언식이  성공한  경우에는  프로그램의  수행이  정상적으로  진행된다.

두번째  형태는  좀더  상황에  맞는  설정을  하는  것으로서,  첫번째  인자에는  불리언  식이  오며,  두번째  수식에는  Assertion이  틀렸을  때  사용할  수식이  온다.  두번째  수식은  값이  될  수도  있고,  또는  메소드를  수행한  결과값이  올  수도  있다.  두번째  수식이  void  값을  리턴할  경우  컴파일러는  에러를  발생시킨다.

첫번째  형태와  두번째  형태  모두  불리언식이  틀렸을  때,  즉  불리언식이  false를  리턴하면  AssertionError를  발생시킨다.  일반적인  예외와  마찬가지로  AssertionError도  스택  트레이스의  한  부분으로서  보여진다.  두번째  형태에서  지정한  수식의  결과값은  AssertionError의  생성자에  전달되어  스택  트레이스에  출력되는  메시지로  사용된다.

다음은  몇가지  assert의  사용  예를  보여준  것이다.

        assert  i<0;
        assert  (!pageNo.equals(""));
        assert  age  >  0  :  "나이는  음수가  될  수  없습니다:"+age;
        assert  ((i/2*23-12)>0):checkValue();


위의  예에서  첫번째  assert  문장은  i가  0보다  작지  않을  경우  AssertionError를  발생시킨다.  세번째  assert  문장의  경우는  age가  0보다  크지  않은  경우  AssertionError를  발생시키며,  그때  AssertionError의  예외  메시지는  "나이는  음수가  될  수  없습니다:"와  age  변수를  연결한  문자열이  된다.  네번째  예제의  checkValue()  메소드는  void가  아닌  값을  리턴해야만  한다.

출처  :  http://cafe.naver.com/glovallicence.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1749

518 view

4.0 stars