생활코딩

Coding Everybody

논리 연산자

토픽 생활코딩 > 언어 > Java

논리 연산자

조건문 수업에서 Boolean에 따라서 프로그램이 다르게 동작하도록 하는 방법을 배웠다. 이번 시간에는 Boolean의 값을 결합해서 코드를 좀 더 간결하게 만들 수 있는 논리 연산자(Conditional Operator)에 대해서 알아보자. 뒤에서는 조건문 수업의 예제에 논리 연산자를 결합해 볼 것이다. 

&&

&&는 좌항과 우항의 값이 모두 참(true)일 때 참이 된다. And라고 읽는다. 다음 예제를 보자. 결과는 1이다. and의 좌우항이 모두 true인 것은 첫 번째 조건문 밖에 없기 때문이다. (실행)

package org.opentutorials.javatutorials.conditionaloperator;

public class AndDemo {

    public static void main(String[] args) {
		if (true && true) {
			System.out.println(1);
		}

		if (true && false) {
			System.out.println(2);
		}

		if (false && true) {
			System.out.println(3);
		}

		if (false && false) {
			System.out.println(4);
		}

	}

}

논리 연산자를 이용한 사례를 살펴보자. 다음 예제는 논리 연산자를 이용해서 이전 예제를 개선한 것이다.

package org.opentutorials.javatutorials.conditionaloperator;

public class LoginDemo3 {
    public static void main(String[] args) {
		String id = args[0];
		String password = args[1];
		if (id.equals("egoing") && password.equals("111111")) {
			System.out.println("right");
		} else {
			System.out.println("wrong");
		}
	}
}

중첩된 if 문을 하나로 줄였다. 덕분에 코드의 복잡성도 낮아졌다. 위의 코드에서 &&는 아래와 같은 의미가 된다.

"id의 값이 egoing이고 password의 값이 111111이면 참이다"

즉 and 연산자의 좌항과 우항이 모두 참일 때 전체가 참이 되는 것이다.

||

||(or)는 좌우항 중에 하나라도 true라면 전체가 true가 되는 논리 연산자다. 다음 예를 보자. 결과는 1,2,3이 출력된다. 마지막 조건문의 or는 좌항과 우항이 모두 false이기 때문에 false가 된다. (실행)

package org.opentutorials.javatutorials.conditionaloperator;

public class OrDemo {

    public static void main(String[] args) {
		if (true || true) {
			System.out.println(1);
		}
		if (true || false) {
			System.out.println(2);
		}
		if (false || true) {
			System.out.println(3);
		}
		if (false || false) {
			System.out.println(4);
		}

	}

}

다음 예제는 id 값으로 egoing, k8805, sorialgi 중의 하나를 사용하고 비밀번호는 111111을 입력하면 right 외의 경우에는 wrong를 출력하는 예다.

package org.opentutorials.javatutorials.conditionaloperator;

public class LoginDemo4 {
    public static void main(String[] args) {
		String id = args[0];
		String password = args[1];
		if ((id.equals("egoing") || id.equals("k8805") || id.equals("sorialgi"))
				&& password.equals("111111")) {
			System.out.println("right");
		} else {
			System.out.println("wrong");
		}
	}
}

위의 예제에서는 or와 and를 혼합해서 사용하는 방법을 보여준다. id 값을 테스트하는 구간을 괄호()로 묶었다. 사용자가 id의 값으로 egoing 비밀번호를 111111을 입력했다면 연산의 순서는 아래와 같이 된다.

  1. (id=="egoing" or id=="k8805" or id=="sorialgi") : true가 된다.
  2. password=='111111' : true가 된다.
  3. true(1항) and true(2항) : true가 된다.

사칙 연산을 할 때 괄호부터 계산하는 것과 같은 원리다.

!

!는 부정의 의미로 not이라고 읽는다. Boolean의 값을 역전시키는 역할을 한다. true에 !를 붙으면 false가 되고 false에 !을 붙이면 true가 된다. 아래의 결과는 2다. (실행)

package org.opentutorials.javatutorials.conditionaloperator;

public class NotDemo {

    public static void main(String[] args) {
		if (!true) {
			System.out.println(1);
		}
		if (!false) {
			System.out.println(2);
		}

	}

}

댓글

댓글 본문
  1. 24.01.11 완료
  2. 23.09.01 학습완료.
    따라가는 과정에서 or연산자보다 &&연산자에 우선순위가 있다는걸 모르고 있는 상황에서 제가 실수로 소괄호를 빼먹었는데 검증하는 과정에서 30분 잡아먹었네요 ㅋㅋ 비밀번호를 틀리게 해놨는데 계속 right 나왔어요..
    저처럼 처음 접하시는 분들은 예제보시고 비교해가시면서 하시는거 추천드립니다 ㅠㅠ 화이팅!!
  3. 모멋
    23.07.09 학습 완료.
  4. 오늘도긍정적으로
    2023년 06월 13일 화요일 학습완료!
  5. 서달
    20230310
  6. 완료
  7. coster97
    .
  8. wwwqiqi
    완료
  9. 혜봉
    9/16 완료
  10. 하앙
    완료
  11. 람보
    2022.8.19
  12. 너굴
    220807
  13. 상상
  14. 치키티타
    220617
  15. 220425
  16. 행달
    22.02.04 완료
  17. 행달
    22.02.04 완료
  18. 모찌말랑카우
    22.01.24 완료
  19. 생동태
    2022.01.21 완료
  20. 구니
    22.01.08 완료
  21. nagvert
    2021.12.19 수강완료
  22. syh712
    2021-11-26
    08:25-08:45 자바강의<논리 연산자>
    1. B and B/ B or B
    2. && =>and
    if (id.equals("egoing") && password.equals("111111")) {
    System.out.println("right");
    } else {
    System.out.println("wrong");

    3. || => or
    if ((id.equals("egoing") || id.equals("k8805") || id.equals("sorialgi"))
    && password.equals("111111")) {
    System.out.println("right");
    } else {
    System.out.println("wrong");

    4. ! => not
    if (!true) {
    System.out.println(1);
    }
    if (!false) {
    System.out.println(2);
  23. 네제가해냈습니다
    211114
  24. 드림보이
    2021.11.12. 논리 연산자 파트 수강완료
  25. IaaS
    10.27수강완료
  26. 안젤라비
    21-10-21
  27. 성치
    2021-10-21일 완료
  28. H4PPY
    1011
  29. 미NI언
    10.7 완료!
  30. 아하
    21.09.28 완료
  31. 베이스박
    210823 학습완료했습니다. 감사합니다.
  32. 오션멍키
    210822완료
  33. super1Nova
    210811
  34. 이땅콩
    JAVA에서도 short circuit을 실행한다.
    && : and
    || : or
    ! : not

    &, | : 비트연산자
  35. B=loom
    2021.07.19
  36. 악어수장
    5.12 2회독 완료
  37. 개발꾸꾸
    5.11
  38. 드림보이
    수강완료했습니다...
  39. Ruinark
    21.03.18 완료
  40. 하연주
    210202 완료
  41. 윤성원
    21/01/27 완료!
  42. 김민혁
    21/1/10 수강완료
  43. 코린이
    2020.11.21 학습완료
  44. 자바남
    수강완료 !
  45. 오석민
    2020.09.21
  46. 프로페쎠널
    2020.08.24 - 완료
  47. 김태현
    공부완료
  48. hvii
    20200807 학습완료
  49. EunSeok Kang
    2020 0803 잘보고갑니다.
  50. yulrinam
    200803 시청완료 감사합니다 :)