[Java] 자바 101 강의 - #5 (증감 연산자)

    증감 연산자(increment and decrement operators)

    증감 연산자는 정수형 변수를 1씩 증가하거나 감소시킬 때 사용하는 연산자입니다. 사실 증감 연산자는 장단점이 명확하고, 대체 방법이 있기 때문에 해당 기능이 없는 언어(ex: Python)도 존재합니다.

     

    자바 101 강의, 증감 연산자


    증감 연산자 종류

    증감 연산자 예시 예시 기반 설명
    전위 증가 ++i - i의 값을 1 증가 시킨 후 연산을 수행한다
    후위 증가 i++ - 먼저 연산을 수행한 후 i의 값을 1 증가 시킨다.
    전위 감소 --i - i의 값을 1 감소 시킨 후 연산을 수행한다.
    후위 감소 i-- - 먼저 연산을 수행한 후 i의 값을 1 감소 시킨다.

     

    코딩을 잘 모르는 분들은 이게 무슨 소린가? 할 수 있는데 설명만 보고서는 증감 연산자를 이해하기 힘이 들 수 있다. 아래의 코드를 보면서 이해를 해보도록 한다.

     

    증감 연산자 예시

    public static void main(String args[]) {
        int i = 0;
        System.out.println("첫번째 결과 : " + i++ * 2);
        System.out.println("두번째 결과 : " + i);
    }

    위 예시는 후위 증가를 한 후, X 2를 한 모습이다. i의 값은 0이고, i에 증가 연산자가 사용됐으니 2를 곱하면 첫번째 값은 2가 될 것이라 생각할 수 있다. 하지만 결과는...

     

    첫번째 결과 : 0
    두번째 결과 : 1

    즉, 첫번째 i를 증가 한 후 2를 곱한 것은 사실 i의 값에 2를 곱한 후 1을 증가시킨 것이 된다.

     

    i에 1을 증가시킨 상태에서 2를 곱하기를 원한다면 아래와 같이 전위 증가 연산자를 사용하면 된다.

     

    public static void main(String args[]) {
        int i = 0;
        System.out.println("첫번째 결과 : " + ++i * 2);
        System.out.println("두번째 결과 : " + i);
    }

     

    전위와 후위에 대해서 이해를 했다면 아래의 증감 연산자를 머리로 풀어보도록 해보자.

     

     

    증감 연산자 문제

    public static void main(String args[]) {
        int i = 10;
    
        System.out.println("첫번째 : " + (++i * 10));
        System.out.println("두번째 : " + (i-- * 5));
        System.out.println("세번째 : " + (--i * 2));
        System.out.println("네번째 : " + (++i * 4));
    }

    증감 연산자 문제 정답

    첫번째 : 110
    두번째 : 55
    세번째 : 18
    네번째 : 40

     

    증감 연산자 문제 풀이

    첫번째는 i가 10으로 시작되었고, 1을 증가 시킨 후 10을 곱했으니, 11 * 10이 돼서 110이 된다. 

    두번째는 i가 11인 상황에서 5를 곱한 후, i의 값을 1 감소시켰으니, 55가 된다.

    세번째는 i의 값이 10인 상태에서 전위 감소로 9가 된 후 2를 곱했으니 18이 된다.

    네번째는 9에서 다시 전위 증가로 10이 된 상태에서 4를 곱했으니 40이 된다.

     

    증감 연산자의 단점

    증감 연산자는 위와 같이 헷갈릴 수 있다. 특히 전위, 후위를 헷갈려서 결과가 잘못 나오는 실수를 하는 경우가 종종 발생할 수 있다. 문제는 이와 같은 문제를 인지 못한 상태에서 런칭을 하는 경우 나중에 해당 문제를 발견하게 된다는 것이다. 그래서 증감 연산자는 파이썬과 같은 언어에서는 아예 지원을 하지 않는다.

     

    증감 연산자는 바로 이전에 포스팅한 대입 연산자를 잘 섞어주면 동일한 기능을 지원하기 때문에 쓰는 것이 맞는가 아닌가는 누가 더 옳다라고 말을하기가 상당히 애매하다. 파이썬이라는 언어 자체가 쉽고 간결하며 명시적인 프로그래밍을 지향하기 때문에 앞으로도 지원을 해줄 분위기는 아닐 것 같다.

     

    반응형

    댓글

    Designed by JB FACTORY