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. ㅎㅎ
    으아앗! 다음은 반복문!!
  2. java
    4/9
  3. 강철
    괄호가 하나 더 많아요ㅎ
    대화보기
    • 수달
      //다깅
      저도 배우는 입장이지만ㅎㅎ

      마지막 코딩 마무리 지어주는 } 하나 빼먹어서 그런거 아닐가여?
      대화보기
      • 김예슬
        and or not!
      • 다깅
        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");
        }


        }
        자꾸 오류뜨는데.. 휴 짜증나네요
      • 배성재
        09Mar2018 완료!
      • 반자동
        잘봤습니다
      • 이근환
        좋은 강의 감사드립니다!!:)
      • 2차
      • 짜몽
        1213
      • GoldPenguin
        감사합니다.
      • JeongHo Park
        완료했습니다~
      • 2017/11/22
      • 완료.!
      • 11월 9일




        료!!
      • ywChoi
        감사합니다!
      • Rbaa Jung
        good
      • yoon88
        완료
      • 박병장
        완료했습니다. 감사합니다.
      • 모가비
        앞뒤에 () 안써도 결과는 동일한데 왜 그렇게 했는지를 질문하는 듯 합니다.
        (id.equals("imogavy") || id.equals("modory") && password.equals("111111"))
        ((id.equals("imogavy") || id.equals("modory") && password.equals("111111")))
        대화보기
        • Jung SuHyun
          목소리가 너무 좋으셔서 귀에 쏙쏙 들어옵니다 얼굴도 핸썸하실꺼 같아요!!
        • 미림_likelion
          수강 완료했습니다. 감사합니다.
        • 보모탄보
          네용이 아주 죠습네다
        • 서희진
          정말 잘 보고 있습니다 :)
        • 고현우
          좋은 강연 고맙습니다 ^^
        • ㅇㅅㅇㅅ
          감사합니다 .!! 이해가 정말 잘되네요 ㅎㅎㅎㅎ
        • 정은비
          저도 궁금했는데 넘나 감사합니다:)
          대화보기
          • That's nonono
            if문을 최종적으로 묶기 위해서입니다.
            만약 하지않았더라면 컴파일러가 if문을 구별하지 못해 오류가 나죠 ㅎ
            대화보기
            • && password.equals("111111")) 이거까지 하나의 조건문입니다.
              대화보기
              • 컴박사가될거다
                ((id.equals("egoing") || id.equals("k8805") || id.equals("sorialgi"))
                여기에 첫줄에 괄호 ( 이걸 하나더 한 이유가있나요 ?
              • 컴박사가될거다
                감사히 잘들었습니다!
              • J_Project
                감사합니다!
              • InSoo
                170315
                감사합니다.
              • 김인섭
                감사합니다.^^
              • 오오
                감사합니다ㅎㅎㅎ
              • 내이름은이한샘
                @이고잉 선생님~ 동영상 강의 잘 듣고 있습니다! 감사합니다.!!!
              • 초보늦깍이30살
                아 이번 강의도 너무나 감사히 잘들었습니다!!!!
                감사합니다 정말 ㅎㅎ
              • 리브
                ㅇ...액셀 어려운데용,.,ㅠㅠ
                대화보기
                • 라떼
                  감사합니다!!
                • 감사합니당
                • GADA
                  친절한 강의굿.
                • ㅎㅎㅎ
                  if 뒤에 괄호 ()가 빠졌네요~~
                  대화보기
                  • Sadak
                    445번째 시청자 입니다.
                    초등학교3학년 이후로 수포자로 살아왔는데 이고잉 덕분에
                    수학까지 재밌어 졌네요 ^^
                  • 감사합니다!
                  • 짧고굵게
                    감사히 보고 있습니다.
                  • JustStudy
                    고맙습니다
                  • somnium
                    감사합니다~~
                  • yskioi
                    감사합니다.
                  • 현벨
                    감사합니다!
                  버전 관리
                  egoing
                  현재 버전
                  선택 버전
                  graphittie 자세히 보기