Java

비교와 Boolean

프로그래밍의 비교나 불린은 이것만으로는 효용이 크지 않다. 후속 수업인 반복문과 조건문에서 그 효용이 드러나기 때문에 조금 지루하더라도 조건문까지만 인내하자.

Boolean

불린(Boolean)은 참과 거짓을 의미하는 데이터 타입으로 bool이라고도 부른다. 불린은 정수나 문자와 같이 하나의 데이터 타입인데, 참을 의미하는 true와 거짓을 의미하는 false 두 가지의 값을 가지고 있다. 아래는 비교 연산자들에 대한 설명이다.

비교 연산자 (관계 연산자)

프로그래밍에서 비교란 주어진 값들이 같은지, 다른지, 큰지, 작은지를 구분하는 것을 의미한다. 이때 비교 연산자를 사용하는데 비교 연산자의 결과는 true나 false 중의 하나다. true는 비교 결과가 참이라는 의미이고, false는 거짓이라는 뜻이다. 

==

좌항과 우항을 비교해서 서로 값이 같다면 true 다르다면 false가 된다. '='이 두 개인 것을 주의하자. '='이 하나인 것은 대입 연산자로 우항의 값을 좌항의 변수에 대입할 때 사용하는 것으로 의미가 완전히 다르다. (실행)

package org.opentutorials.javatutorials.compare;

public class EqualDemo {

    public static void main(String[] args) {
		System.out.println(1==2);           //false
		System.out.println(1==1);           //true
		System.out.println("one"=="two");   //false
		System.out.println("one"=="one");   //true
	}

}

!=

'!'는 부정을 의미한다. '같다'의 부정은 '같지 않다'이다. 이것을 기호로는 '!='로 표시한다. 아래의 결과는 !=의 결과인데 ==와 정반대의 결과를 보여준다. (실행)

package org.opentutorials.javatutorials.compare;

public class NotDemo {

    public static void main(String[] args) {
		System.out.println(1!=2);      		//true
		System.out.println(1!=1);			//false
		System.out.println("one"!="two");	//true	
		System.out.println("one"!="one");	//false
	}
	
}

>

좌항이 우항보다 크다면 참, 그렇지 않다면 거짓임을 알려주는 연산자다. '<'는 반대의 의미로 언급은 생략하겠다. (실행)

package org.opentutorials.javatutorials.compare;

public class GreaterThanDemo {

    public static void main(String[] args) {
		System.out.println(10>20);      	//false
		System.out.println(10>2);			//true
		System.out.println(10>10);			//false

	}

}

>=

좌항이 우항보다 크거나 같다. '<='는 반대의 의미로 언급은 생략하겠다. (실행)

package org.opentutorials.javatutorials.compare;

public class GreaterThanOrEqualDemo {

    public static void main(String[] args) {

		System.out.println(10 >= 20); // false
		System.out.println(10 >= 2); // true
		System.out.println(10 >= 10); // true

	}

}

.equals

.equals는 문자열을 비교할 때 사용하는 메소드다. 우리는 아직 메소드를 배우지 않았기 때문에 지금은 그냥 이것을 연산자로 이해해도 무방하다. 아래는 문자와 문자를 비교하는 방법이다. (실행)

package org.opentutorials.javatutorials.compare;

public class EqualStringDemo {

    public static void main(String[] args) {
		String a = "Hello world";
		String b = new String("Hello world");
		System.out.println(a == b);
		System.out.println(a.equals(b));
	}

}

변수 a와 b에 각각 문자열을 생성해서 저장했다. 변수 b에 문자열을 만드는 방법은 생성자를 이용하고 있는데 이 방법은 후에 객체 지향 시간에 배우게 된다. 지금은 new String의 괄호 안에 문자열을 넣으면 문자열을 생성할 수 있다고만 알아두자. 결과는 false와 true이다. ==은 두개의 데이터 타입이 동일한 객체인지를 알아내기 위해서 사용하는 연산자이기 때문에 b에 담긴 객체와 일치하지 않는 것이다. 이를 보안하는 비교 방법이 equals이고 이를 이용해서 서로 다른 객체들간에 값이 같은지를 비교할 수 있다. 이 이야기는 지금 단계에서는 이해하기 다소 어려움이 있다. 문자와 문자를 비교할 때는 '=='를 사용하지 않고 .equals를 사용한다고 일단은 알아두자.

댓글

댓글 본문
작성자
비밀번호
  1. 진영
    8/11 완료
  2. 전하연
    감사합니다 ^^
  3. 감자감자
    완료
  4. 다블스타
    완료
    메소드에서 고생좀 하겠네요
  5. 완료
  6. 컹스맨
    완ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ료
  7. Jaebeom Lee
    완료
  8. 전민희
    완료
  9. 멀캠A_Son
    완료
  10. 이태호
    6/27
  11. 너무 잘듣고 있습니다.~ 옥에 티가 하나있어 제보요 ㅎㅎ
    8분 34초 부분 Boolean 값 True /False 비교 연산식 에서 10 >= 2 True 요기서 2를 20이라고 말하셔서 귀를 의심
    다시한번 들었네요~~ ^^ 알고 넘어가시라구요~~
  12. 좀더 공부를 해야할꺼 같네요 알듯말듯..하네요 아직은..ㅠㅠ
  13. 4월 24일 비교와 boolean
  14. 송영일
    == != > >= .equals 2018년 4월24일
  15. 박현모
    감사합니다~
  16. 열정하나
    오... 제대로 이해되네요 슬레이어즈님 감사합니다
    대화보기
    • 하동원
      헤헤헷

      a == b
      a.equal(b)

      차이 감사힙나다~
    • ㅎㅎ
      감사합니다 도움이 되네요!
      대화보기
      • 슬레이어즈
        String도 == 로 비교 가능합니다.

        String a = "Hello world";
        String b = "Hello world";

        인 경우 a, b 둘다 "Hello world" 라는 객체를 가르킵니다.
        그렇기 때문에 == 는 양쪽의 객체가 같기 때문에 true로 표시 됩니다.

        하지만
        String a = "Hello world";
        String b = new String("Hello world");

        의 경우는 b는 새로운 객체를 만들어 Hello world를 저장했기 때문에
        a와 b가 가르키는 객체가 다릅니다.

        그렇게 때문에 == 에서 false로 나옵니다.
      • 문자와 문자를 비교할때는 .equals()를 사용한다.
      • 4/9
      • henrykim
        String a = "Hello world";
        String b = new String("Hello world");
        System.out.println(a == b);
        System.out.println(a.equals(b));
        에서 new String은 왜 쓴거죠?
      • 최지오
        잘 보고 갑니다!
      • 김예슬
        180313
        오랜만이다
        boolean형 데이터 타입 존재 참(true)과 거짓(false)를 가짐
        비교연산자는 boolean형 데이터 타입 반환
        .equals() -> method 사용하여야 문자비교가능
      • 배성재
        09Mar2018 완료!
      • 이근환
        자바스크립트와 많이 닮은 부분이 있어서 좋은것 같습니다.
        복습도 되고 하지만 평소 알고있던게 왜 그런지 생각해본적은 없었는데
        배우면서 좀 더 생각을 하게 되는 것 같아 좋습니다!!:)
      • 반자동
        이번껀 쉬워서 조금 지루하지만 완료 ~
      • 이해가 훨씬 편해졌습니다. 감사해요~!
        대화보기
        • 2017/11/22
        • 완료.!
        • GoldPenguin
          감사합니다.
        • selina
          11.7완료
        • 11월
          6일
        • ywChoi
          감사합니다!
        • yoon88
          완료
        • 나는야 안성재 히힣히히히히힣히히ㅣ히히힣히히히힣히ㅣ히히힣히힣힣힣
          성재=동태=잠자리=생쥐
        • 미림_likelion
          수강 완료했습니다. 감사합니다.
        • 손정은
          정말정말 좋은강의 감사드립니다..
        • 최규선
          감사합니다.
        • 정은비
          :) 감사합니다.
        • 고현우
          오! 재미있게 잘 들었습니다. ^^
        • yosim
          감사합니다
        • SolidLiquid
          자세한 설명 고맙습니다!
          대화보기
          • J_Project
            감사합니다
          • 혜리 이잉
            꿀잼이네잉
          • InSoo
            170315
            감사합니다.
          • 김인섭
            감사합니다.^^
          • 영응왕
            달콤쿠키 님의 설명 한 마디가 확 이해를 도와주네요, 이름이 같은 사람은 있어도 주소가 다르다! 좋은 포스팅에는 좋은 댓글과 방문자들이 있기 마련인가봅니다. ^^ 감사합니다.!
          • 달콤쿠키
            막상 작성해놓고 보니... 이 강의가 프로그래밍을 처음 배우는 사람을 위한것 이란것을 잊어버렸습니다.
            간단하게 말해서..
            이 세상에 같은 이름을 가진 사람이 많지만 서로 다 다른 집에서 살고 있다고 생각하시면 편합니다.
            우리가 이름만 봤을때는 구분할 수 없지만 어디 사는지 주소만 보면 구분을 할 수있게 되는 것입니다.
            ==는 그 주소만 비교하는 것이고 equal은 문자열 데이터 자체를 비교한다고 보면 되겠네요.
            스택이 힙이니 어려운 소릴 했네요.ㅜㅜ
          • 달콤쿠키
            스트링 클래스 객체끼리 비교하는 부분은 조금 미흡한 부분이 있는거 같습니다.
            큰따옴표로 묶인 문자열은 리터럴 상수로 일단 메모리상 어딘가에 저장(무작위)이 됩니다. 그리고 그 주소값이 객체로 복사가 되어지죠. 그래서 정확히 말하면 객체가 가지고 있는 주소값을 통해서 메모리상 어딘가 저장되어 있는 해당 문자열을 가리키게 됩니다. 위의 설명처럼 "두개의 데이터 타입이 동일한 객체인지를 알아낸다"라고 이해하시기는 어려울듯합니다.(저는 c언어를 통해서 공부를해서..)

            String a = "hello world"
            String b = new String("Hello world")
            이 경우 a에는 문자열 가장 첫번째 바이트부분의 주소값을 객체로 복사하게 됩니다.
            b의 경우 힙 메모리에 문자열을 저장한후 그 주소값을 스택의 객체 b로 복사를 하여 가리키게 되죠.
            분명히 같은 문자열이지만 이미 두 개의 객체를 메모리상에 저장된 위치가 다르게 됩니다.
            == 연산자는 두개의 피연산자가 동일한지 아닌지를 판단하여 논리값을 반환합니다.
            가장 위에서 설명한것과 같이 이미 두 개의 객체에 저장된 문자열은 같을지 몰라도 그 주소값은 다르게 됩니다.
            다시 한번 반복하지만 메모리상에서 큰따옴표로 묶인 문자열은 변수나 객체에 복사가 될 때 문자열 데이터 그 자체가 옮겨지는 것이 아니라 그 문자열의 가장 첫번째 주소값을 복사하게 됩니다.
            그렇기 때문에 두개의 값은 false가 나올 수 밖에 없습니다. 사실 자바는 처음 공부하는 거라서 다분히 c언어의 관점에서 설명을 드렸습니다. 결국 같은 원리기 때문에 이렇게 이해하시는 것이 좋을거 같습니다.
          버전 관리
          egoing
          현재 버전
          선택 버전
          graphittie 자세히 보기