자바 논리연산의 단축평가(short-circuit)

프로그래밍 2007.07.21 02:17
  단축평가(short-circuit)란 무엇인가?

  우선 간단한 예제를 봅시다.


public class ShortCircuit {
    public static void main(String[] args) {
        int a=6;
        int b=6;
       
        if((a++ <6)&&(++b <6)){
            a=10;
        }
        System.out.println("a의 값 : " +a +" b의 값 : " +b);
    }
}

  설명을 위해 급조한 엉성한 예제입니다. 그래도 설명은 되니까 일단 봅시다. 위의 자바 코드를 컴파일 해서 실행하게 되었을때 최종적으로 변수 a와 b의 값은 각각 무엇이 될까요?

  소스코드에는 무시무시한 함정이 숨어있습니다. 조건문의 논리연산 조건으로 들어있는 "++"의 위치에 따른 전위연산, 후위연산을 따지려 하는 것일까요?

  제가 확인해 본 바로는 자바와 함께 C, 자바스크립트, VB 등의 언어의 논리연산에서 단축평가가 행해집니다. 일단 눈으로 확인한건 나열한 언어들이지만 대부분의 언어가 그렇지 않을까 생각됩니다.

우선 위 문제의 답은 a는 7, b는 6입니다.

  논리연산에서 논리표현식은 왼쪽에서 오른쪽의 방향으로 평가됩니다. &&연산의 경우에 왼쪽의 논리값이 false일 경우엔 오른쪽이 true이던 false이던 관계없이 false가 됨으로 오른쪽의 값은 확인해 보지 않습니다. 따라서 위 코드의 if문은 속의 논리연산은 "(a++ <6)"부분만을 수행하며 값이 false이기 때문에 우측의 "(++b <6)"는 평가하지 않고 전체를 false로 평가하게 됩니다. 그러므로 a의 값은 1이 증가되어 최종적으로 7이 되는 것이고 b의 변수가 있는 부분은 수행되지 않으므로 6의 값이 남게 됩니다.

  동일하게 ||연산에서도 단축평가가 적용됩니다. &&과 ||은 이렇게 됩니다.
  • (false)&&(아무개) 는 "아무개"부분을 수행하지 않고 false로 평가
  • (true)||(아무개)는  "아무개"부분을 수행하지 않고 true로 평가
하게 됩니다. 이것이 단축평가(short-circuit)인 것이지요.

  하지만 이것과 다르게 &, |가 비트연산이 아닌 boolean을 가지고 논리연산을 하게 될 경우에는 &&, ||과 다르게 단축평가를 하지 않습니다. &, |이 논리연산을 하게 되는 경우에는 좌측과 우측 모두 수행을 하게 됩니다.


  "String 변수의 동일한 문자열에 대해서 하나의 참조"와 같이 눈여겨 봐두지 않으면 그냥 넘어가기 쉬운 그런 원리중에 하나입니다. 근래에 읽은 "임백준의 소프트웨어산책"이라는 책에서 책속의 주인공이 면접을 볼 때 자바의 String에 관한 문제가 나오고 주인공은 손쉽게 그 문제를 푸는 짧막한 한줄의 내용이 있는데 그 부분을 읽을때 괜히 가슴이 두근두근 뛰는거 있죠? 사실 String객체에 관해서는 "다음 개발자 네트워크"의 "개발자가 놓치기 쉬운 자바의 기본원리"라는 글을 통해서 알게 되었고 좀 살펴본게 있어서 저도 정답을 알고 있었거든요^^ㅋ

  단축평가라는 것도 알게 된 김에 블로그에 이렇게 한번 정리를 해 봅니다. "임백준의 소프트웨어 산책"은 책을 다 읽고 2번째 읽기에 들어가고 있습니다. 처음 볼때 잘 이해되지 않던 부분들이 지금 제가 공부하는 것들과 맞물려 조금씩 이해가 되고 있거든요. 잘 이해가 되지 않았던 여러가지 것들.. C++과는 다르게 단일상속만을 지원하는 자바에서의 인터페이스를 이용한 다중상속을 구현(코드를 짤때 사용은 했었지만 세세한 부분은 지금에서야 이해, 상속과는 다르지만), 다형성(폴리모피즘)에서 파라메트릭 폴리모피즘과 자바 1.5버전에서의 generics 등에 대해서 처음 읽을 때 보다 머릿속에 좀 더 구체화 되어서 이해가 됩니다. XML에 대해서는 공부를 진행하면서 탄생과 발전, 현재를 믹스해서 머리에 정리해 봐야겠습니다. XML을 제대로 다뤄보고 알지 못하고선 탄생과정과 발전과정, 과도기의 모습 이런걸 읽어도 직접적으로 와닿지가 않아서요. XML을 만지작 거려보긴 했지만 뭘 알고 만졌어야 머릿속에 남아있죠^^ㅋ 소프트웨어 산책 책에 XML에 관련된 부분이 나올땐  그냥 감만잡고 읽었답니다..;;

  좋아하는 것을 공부할 수 있는것이 가장 행복해요.S
top
     TAG 자바, 프로그래밍, 행복
  1. Favicon of http://mewmew.tistory.com 야옹*^^* 2007.07.23 00:01 신고 수정/삭제 댓글

    오.. 정말 까닥하면 실수할 수도 있겠군요. @.@

    • Favicon of http://signpen.net 싸인펜 2007.07.24 23:29 신고 수정/삭제

      실수하게되면 찾아내기 참 애매한 문제같아요^^ㅋ

      처음엔 자바만 단축평가를 하는줄 알았는데 대부분의 언어가 똑같더라구요.

  2. Favicon of http://raonsky.com/tt/ 라온수카이 2007.07.23 00:47 신고 수정/삭제 댓글

    http://nateonweb.nate.com/help/beta/linux_mac_tester/index.php

    맥,리눅스용 네이트온 베타테스터 모집한다는 거 보고 생각나서 댓글 달아봅니다라고 쓰다가보니 아마 파코즈에서 보셨을꺼라는 생각이 드네요. ㅡ,.ㅡ;

    • Favicon of http://signpen.net 싸인펜 2007.07.24 23:30 신고 수정/삭제

      정보 감사합니다^^ㅋ

      므히힛~ 라온수카이님께서 댓글을 달아주시기 얼마전에 신청을 했답니다^^ㅋ

      그런데.. 수신확인이 안되네요..;;; 제 메일만 안읽는 것일까요??;;;

  3. Favicon of http://www.myhyuny.net/ 화현 2007.07.23 19:47 신고 수정/삭제 댓글

    그리고 보니 올해 초에 저거에 당했었죠 ㅎㅎ
    곰곰히 생각해보니 나중에 단축평가에 대해 생각이나서 디버깅을 ㅋㅋ

    • Favicon of http://signpen.net 싸인펜 2007.07.24 23:34 신고 수정/삭제

      이미 단축평가에 대해서 알고 계셨군요..;;
      저는 이 글을 쓰기 바로 전날 처음 알았답니다..;;;

      항상 저보다 한발작 앞서나가시네요..ㅎ

  4. Favicon of http://wooyoon.net 흰우유 2007.07.24 23:44 신고 수정/삭제 댓글

    마지막 문장, 정말 부럽습니다.

    좋아하는 것을 공부할 수 있는 행운!
    (위에 전문적인 내용들은 전혀 이해할 수 없지만요)

    화이삼^^

    • Favicon of http://signpen.net 싸인펜 2007.07.26 11:33 신고 수정/삭제

      공부도 때가 있다는게 사실 인가봐요. 예전엔 그렇게도 싫어했던 공부가 요즘엔 왜 이렇게 좋은지 모르겠어요.

      흰우유님도 여름에 지치시지 말고 화이팅이에요^^ㅋ

댓글 쓰기

꿈을 이루다!!

공개일기 2007.04.27 01:36
맥주와 카레

  제가 가지고 있던 조그마한 꿈 중에 하나가 매일 저녁 샤워 후에 시원하게 맥주 한 캔 마시면서 휴식을 하는 것이었거든요^^ㅋ

  현재 냉장고에 맥주 충전 완료!!

  원래 3줄로 줄서있던 맥주였는데 어느새 2줄로 줄었습니다.

  3분요리와 맥주캔만 냉장고에 있으면 두려울 것 없는 자취생입니다. 참치캔이 함께 있었다면 더욱 든든했을테지만 현재 상황에서도 만족하고 있습니다.S

'공개일기' 카테고리의 다른 글

캔맥주는 역시!!  (8) 2007.05.08
단백질 보충!!  (12) 2007.05.04
꿈을 이루다!!  (16) 2007.04.27
낮잠을 너무 길게 자버렸어  (10) 2007.04.25
밥은 든든하게!!  (4) 2007.04.20
휴대폰 구입, 중간고사, 게임  (13) 2007.04.17
top
     TAG 맥주, 자취생활, 행복
  1. Favicon of http://kou.pe.kr Kou 2007.04.27 04:02 신고 수정/삭제 댓글

    와 저도 자취를 하고있는데
    냉장고에 항상 맥주를 넣어놓고있죠.
    보고있을때마다 흐믓해요~

    • Favicon of http://signpen.net 싸인펜 2007.04.27 11:40 신고 수정/삭제

      Kou님 블로그에 구경갔다 왔습니다^^ㅋ
      인도에서 유학을 하고 계시네요. 인도에서 개 20마리에게 쫓겨보신 경험도 있으시고 재미있으신것 같아요..ㅎㅎ

      한국이든 인도든... 냉장고에 가득찬 맥주는 모든 사람을 흐뭇하게 하나봅니다^^ㅋ 저도 흐뭇~ㅋ

  2. Favicon of http://ha2juk.com ha2juk 2007.04.27 04:27 신고 수정/삭제 댓글

    제목을 보고..
    '소박하시네요~' 이렇게 쓸려고 들어왔는데.
    막상 사진 보니..
    부럽네요.. orz..

    • Favicon of http://signpen.net 싸인펜 2007.04.27 11:42 신고 수정/삭제

      저의 야심가득찬 꿈은 결코 소박하지 않습니다..ㅎㅎ
      저 시스템을 구축하기 위해서 무려 1만원 이상의 거금을 투자했다니까요^^

  3. Favicon of http://raonsky.com/tt/ 라온수카이 2007.04.27 18:21 신고 수정/삭제 댓글

    고시원에 들어간 이후로 자취생의 로망 중 하나인 '샤워와 맥주'는 남의 이야기가 되었습니다. 지금 있는 고시원이 술을 먹고 들어가면 벌점을 주거든요.. 그래서 굳이 술을 먹으려면 낮술을 해야한다는...;;;

    그리고, 아직 티스토리 이벤트에 응모하지 않으셨네요? 선정되고 열심히 하면 나도살래(NDSL)을 받을 수도 있는데, 한번 도전해보세요~ㅎ http://notice.tistory.com/761


    ps.열심히 댓글을 적었는데 내용중간에 shift+7을 샤워와 맥주 사이에 넣었더니 그 뒤의 내용들이 몽땅 날아가는 사태가... ㅠ.ㅠ 큰 거 하나 배웠습니다.(뭔가 하하스러운..;;; )

    • Favicon of http://signpen.net 싸인펜 2007.04.29 01:54 신고 수정/삭제

      먹고싶다면 낮술!!
      라온수카이님의 댓글을 읽고나니 왠지 눈물이 핑 도는군요..ㅜㅜ

      나도살래 이벤트페이지에 들어가봤는데 참가자 숫자가 어마어마 하네요....;;

  4. Favicon of http://laputian.net Laputian 2007.04.27 19:09 신고 수정/삭제 댓글

    ... 소박하시네요(?)
    그보다 이벤트 응모나 해봐야겠군요. 나도살래.. 꼭 받고 싶습니다(글 내용과는 무관)

    • Favicon of http://signpen.net 싸인펜 2007.04.29 01:59 신고 수정/삭제

      Laputian님은 PSP도 가지구 계시잖아요....ㅜㅜ
      DJ MAX 포터블2는 완죤부럽....부럽...

  5. Favicon of http://rukxer.net/ Rukxer 2007.04.28 00:12 신고 수정/삭제 댓글

    술을 그다지 즐기지 않는 저는 녹차라테가 저 정도 있었으면 좋겠군요 ㅠ_ㅠ
    .......맥주와 비교해서도 만만찮게 비싸다는 게 문제 ㄱ-

    • Favicon of http://signpen.net 싸인펜 2007.04.29 02:06 신고 수정/삭제

      Rukxer님도 녹차라테를 지르시는겁니다!!
      꿈은 이루어지는 겁니다^^ㅋ

  6. 폐인정씨 2007.04.30 06:53 신고 수정/삭제 댓글

    내 보물 장고님엔 두부8개랑 산사춘 한병이 들어있다오..훗훗
    맥주먹고 뱃살왕자 되지말고 작고 실한 소주를 장만해바바바..

    그리고 어여어여 나두 '이 저작물...머시기머시기 궁시렁 궁시렁...'
    달아 달란말야...흥흥흥..ㅡ,.ㅡ..

  7. Favicon of http://raonsky.com/tt/ 라온수카이 2007.05.01 02:59 신고 수정/삭제 댓글

    http://ecse.kr/6 ㅡ.-)乃

  8. Favicon of http://wurifen.com 우리팬 2007.05.08 15:59 신고 수정/삭제 댓글

    자취생활의 최고도 경지에 이르르면 아무런 사물조차도 필요없게 되더군요. 단지 女만 필요하게 된다는... ㅋㅋ -_-

댓글 쓰기