일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 초보코딩
- Git
- 자바 스프링
- 자바
- 기초코딩
- JShell
- 초보코딩탈출
- 자바프로그래밍
- eclips
- 이클립스
- 스프링 기초
- 배열
- 코딩초보
- spring
- 데이터베이스
- 리눅스
- Java
- Elk
- JAVA기초
- github
- 컴퓨터과학개론
- 프로그래밍기초
- 메소드
- 제이쉘
- 스프링
- 프로그래밍언어
- 프로그래밍
- 클래스
- 자바기초
- 알고리즘
- Today
- Total
키보드워리어
【자바】Boolean - 단축평가 논리연산자 본문
Short-Circuit and Lazy evaluation
논리 연산자 중에서
그렇다면 &&를 쓰는 것과일반 &차이는 무엇일까요?
아래 그림을 통해 살펴보시죠
표현식을 살펴보시면 참, 거짓 유무를 따지지 않고 실행한다면 변수 i의 경우는 11이 되어야 합니다.
하지만 실행되지 않았죠? 그 이유는 첫 번째 표현식이 false였기 때문입니다.
논리 연산자 {A && B}에서 A -> B 순으로 계산하여 최종적으로 마지막 평가도 이뤄지지 않았습니다.
요령을 피운다고 생각하면 될 거 같습니다.
그래서 이러한 문법을
Short-Circuit Evaluation (간단한 평가) 또는 lazy evaluation(나태한 평가)로 불립니다.
논리 연산자 &를 하나만 쓴다면?
그런데 논리 연산자를 두 개 쓰는 게 아니라 1개를 쓴다면 말이 달라집니다.
and연산자의 또 다른 버전인 &는 게으른 평가를 하지 않습니다.
두 피연산자를 항상 평가하는 것이 &으로 하나라도 참이라면 나머지 하나는 실행됩니다.
그래서
왼쪽 j연산자는 그대로 false값을 출력하지만 i값은 10으로 5보다 크기 때문에 11로 출력된 것을 확인해볼 수 있습니다.
비슷하게, 논리 연산자 or도 마찬가지입니다. ||를 쓴다면 나태한 평가를, |를 유일하게 한 개만 쓴다면
or 연산자 뒤에 나오는 식도 하나씩 다 체크하게 됩니다.
주의!) 로직을 실행할 때 단축 회로 평가에만 의존하는 것은 좋지 않습니다.
단축 회로를 많이 쓰는 것은 가독성을 낮추게 합니다. 그 말인즉슨 소프트웨어의 버그도 찾기가 어려워지죠. 그것은 명백하게 코드 유지에 부담을 주는 일입니다.
로직을 구분할 때 단축 회로와 일반 싱글 연산자를 혼용하는 건 추천하지 않고 최선의 방법은 i++를 먼저 설정하고 증가한 i값과 비교하기 위해 비교 연산자를 사용해주세요.
이것이 코드를 복잡하게 만드는 것보다 낫습니다. 코드는 항상 심플하게 쓰고 부수효과는 없는지 확인하는 것이 좋겠습니다.
'JAVA > 입문' 카테고리의 다른 글
【자바】논리연산자 활용한 메소드 만들어보기 (0) | 2022.11.27 |
---|---|
【자바】char타입 표현과 연산 (0) | 2022.11.26 |
【자바】Boolean형 (0) | 2022.11.23 |
【자바】부동소수점 연산 (0) | 2022.11.21 |
【자바】정수형 integer 타입 (0) | 2022.11.19 |