Java

조건문

'비교 수업'에서 비교 연산의 결과로 참(true)이나 거짓(false)을 얻을 수 있다고 배웠다. 불린은 조건문에서 핵심적인 역할을 담당하는데 이 불린 값을 기준으로 실행 흐름을 제어하기 때문이다.

조건문

조건문이란 주어진 조건에 따라서 애플리케이션을 다르게 동작하도록 하는 것으로 프로그래밍의 핵심 중의 하나라고 할 수 있다.

조건문의 문법

프로그래밍에서 문(文, Statements)은 문법적인 완결성을 가진 하나의 완제품이라고 할 수 있다. if문, for문, while문등이 여기에 해당한다. 절(節마디절, clause)은 문(statements)를 구성하고 있는 부품이라고 할 수 있다. 곧 배우게 된다. 물론 이러한 문법적인 개념은 이해를 돕기 위한 것일 뿐 암기해야 할 것은 전혀 아니다.

if

조건문은 if로 시작한다. 아래 그림을 보자. if 뒤의 괄호를 if절이라고 부르고, 중괄호가 감싸고 있는 구간을 then 절이라고 부르겠다. 조건문에서는 if 절의 값이 true일 때 then 절이 실행된다. if 절이 false이면 then 절은 실행되지 않는다.

아래 예제의 실행결과는 'result : true'다. if 뒤에 True가 왔기 때문이다. 아래의 실행 결과는 화면에 result : true를 출력한다. (실행)

package org.opentutorials.javatutorials.condition;

public class Condition1Demo {

    public static void main(String[] args) {
		if(true){
			System.out.println("result : true");
		}
	}

}

다음 예제는 아무것도 출력하지 않을 것이다. if절이 false이기 때문이다.

if(false){
	System.out.println("result : true");
}   

다음 예제를 보자. 결과는 12345를 출력할 것이다. (실행)

package org.opentutorials.javatutorials.condition;

public class Condition2Demo {

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

}

다음 예제를 실행해보자. 결과는 5만 출력될 것이다. (실행)

if(false){
	System.out.println(1);
	System.out.println(2);
	System.out.println(3);
	System.out.println(4);
}
System.out.println(5);

else

if만으로는 좀 더 복잡한 상황을 처리하는데 부족하다. 아래의 그림처럼 if-else절은 if 절의 값이 true일 때 then절이 실행되고, false일 때 else절이 실행된다.

아래 예제를 보자. 결과는 1이다. (실행)

package org.opentutorials.javatutorials.condition;

public class Condition3Demo {

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

	}

}

다음 예제의 결과는 2다. (실행)

if(false){
	System.out.println(1);
} else {
	System.out.println(2);
}

else if

else if절을 이용하면 조건문의 흐름을 좀 더 자유롭게 제어할 수 있다. if절의 값이 true라면 then절이 실행된다. false라면 else if절로 제어가 넘어간다. else if절의 값이 true라면 else if then절이 실행된다. false라면 else 절이 실행된다. else if절은 여러 개가 복수로 등장할 수 있고, else절은 생략이 가능하다. else 절이 else if 절보다 먼저 등장할 수는 없다.

아래 예제를 보자. 결과는 2다. (실행)

package org.opentutorials.javatutorials.condition;

public class ElseDemo {

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

	}

}

다음 예제의 결과는 3이다. (실행)

if(false){
	System.out.println(1);
} else if(false) {
	System.out.println(2);
} else if(true) {
	System.out.println(3);
} else {
	System.out.println(4);
}

다음 예제의 결과는 4다. (실행)

if(false){
	System.out.println(1);
} else if(false) {
	System.out.println(2);
} else if(false) {
	System.out.println(3);
} else {
	System.out.println(4);
}

변수와 비교연산자 그리고 조건문

지금까지 배운 부품들을 결합해서 작은 프로그램을 만들어보자. 예제에서 사용할 부품은 변수, 비교연산자, 조건문이다. 사용자가 입력한 아이디 값을 체크하는 프로그램을 만들어 볼 것이다. ID의 값으로 egoing을 입력해보고, 다른 값도 입력해보자. 

package org.opentutorials.javatutorials.condition;

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

위의 프로그램을 실행하기 위해서는 조금 새로운 방법을 사용해야 한다. 파일을 컴파일한 후에 실행할 때 아래와 같이 입력한다.

java LoginDemo egoing

egoing은 Java 앱인 LoginDemo의 입력 값이다. 이 값은 프로그램 내부로 전달된다. 그럼 프로그램에서 이 값을 알아내는 구문은 아래와 같다.

String id = args[0];

우린 아직 배열을 배우지 않았다. 따라서 위의 코드가 무엇인지 정확하게 설명하는 것은 지금 단계에서는 불필요하다. args[0]가 첫 번째 입력 값(egoing)을 의미한다고만 이해하자. 위의 코드는 입력 값을 문자열 타입의 변수 id에 담고 있다.

사용자가 입력한 데이터가 egoing과 같은지 비교할 때는 아래와 같이 id.equals("egoing")이라는 구문을 사용한다. equal은 같다는 의미다. 즉 사용자가 입력한 값(id)가 "egoing"인지를 확인하는 것이다. 그 결과가 true라면 right가 출력되고, false라면 wrong가 출력될 것이다.

if(id.equals("egoing")){

조건문의 중첩

위의 예제에서 아이디와 비밀번호를 모두 검증해야 한다면 어떻게 하면 될까? 다음 예제를 보자.

package org.opentutorials.javatutorials.condition;

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

		} else {
			System.out.println("wrong");
		}
	}
}

이 예제는 입력 값을 두 개 받는다. id와 password를 프로그램 내부로 전달하려면 프로그램을 실행할 때 아래와 같이 차례대로 아이디와 비밀번호를 입력하면 된다.

java LoginDemo2 egoing 111111

if문 안에 다시 if문이 등장했다. 즉 사용자가 입력한 값과 아이디의 값이 일치하는지를 확인한 후에 일치한다면 비밀번호가 일치하는지 확인한 것이다. 이렇게 조건문은 조건문 안에 중첩적으로 사용될 수 있다.

switch 문

조건문의 대표적인 문법은 if문이다. 사용빈도는 적지만 조건이 많다면 switch문이 로직을 보다 명료하게 보여줄 수 있다. 아래의 코드를 보자.

package org.opentutorials.javatutorials.condition;

public class SwitchDemo {

    public static void main(String[] args) {
		
		System.out.println("switch(1)");
		switch(1){
		case 1:
			System.out.println("one");
		case 2:
			System.out.println("two");
		case 3:
			System.out.println("three");
		}
		
		System.out.println("switch(2)");
		switch(2){
		case 1:
			System.out.println("one");
		case 2:
			System.out.println("two");
		case 3:
			System.out.println("three");
		}
		
		System.out.println("switch(3)");
		switch(3){
		case 1:
			System.out.println("one");
		case 2:
			System.out.println("two");
		case 3:
			System.out.println("three");
		}

	}

}

결과는 아래와 같다.

switch(1)
one
two
three
switch(2)
two
three
switch(3)
three

즉 switch 뒤의 괄호에 숫자로 1이 주어지면 case 1에 해당하는 로직 이후의 모든 case들이 실행된다.

아래와 같이 코드를 바꿔보자.

package org.opentutorials.javatutorials.condition;

public class SwitchDemo {

    public static void main(String[] args) {
		
		System.out.println("switch(1)");
		switch(1){
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		}
		
		System.out.println("switch(2)");
		switch(2){
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		}
		
		System.out.println("switch(3)");
		switch(3){
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		}

	}

}

결과는 다음과 같다.

switch(1)
one
switch(2)
two
switch(3)
three

break를 만나면 switch 문의 실행이 즉시 중지된다. 따라서 위의 코드는 아래와 같이 if문으로 변경 할 수 있다.

package org.opentutorials.javatutorials.condition;

public class SwitchDemo2 {

    public static void main(String[] args) {
		
		int val = 1;
		if(val == 1){
			System.out.println("one");
		} else if(val == 2){
			System.out.println("two");
		} else if(val == 2){
			System.out.println("three");
		}

	}

}

 즉 if문과 switch문은 서로 대체 가능한 관계다. 이번에는 default를 알아보자.

package org.opentutorials.javatutorials.condition;

public class SwitchDemo {

    public static void main(String[] args) {
		
		System.out.println("switch(1)");
		switch(1){
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		default:
			System.out.println("default");
			break;
		}
		
		System.out.println("switch(2)");
		switch(2){
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		default:
			System.out.println("default");
			break;
		}
		
		System.out.println("switch(3)");
		switch(3){
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		default:
			System.out.println("default");
			break;
		}
		
		System.out.println("switch(4)");
		switch(4){
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		default:
			System.out.println("default");
			break;
		}

	}

}

위의 코드는 각 switch 문에 default:가 이끄는 구문을 추가했다. 그 결과는 아래와 같다.

switch(1)
one
switch(2)
two
switch(3)
three
switch(4)
default

가장 마지막은 default로 끝난다. 즉 주어진 케이스가 없는 경우 default 문이 실행된다는 것을 알 수 있다. 

switch 문을 사용할 때 한가지 주의 할 것은 switch의 조건으로는 몇가지 제한된 데이터 타입만을 사용할 수 있다. byte, short, char, int, enum, String, Character, Byte, Short, Integer

이렇게 해서 제대로 된 프로그램의 꼴을 갖춘 것을 한번 만들어봤다. 조건문까지 왔다면 고지가 얼마 남지 않았다. 조금만 힘내자.

Designed by factor[e] design initiative

댓글

댓글 본문
작성자
비밀번호
  1. 5vertime
    감사합니다 덕분에 cmd도 해봤어여 ㅋㅋㅋ
    대화보기
    • 왕 짜중 독고머리...
      명령 프롬프트...좀더 자세한 설명이 필요.
      대화보기
      • 뜨거운 감자
        me too.
        대화보기
        • 전민희
          2018.10.01 완료!
          * true, false = Boolean
          Boolean은 조건문에서 핵심적인 역할
          - if else 절에서 if가 true일 경우 if절이 실행되고 false일 경우 else가 실행된다.

          - else if 여러개의 조건이 올 수 있다. true가 한번이라도 발견되면 그 이후의 true는 실행되지 않는다.
          else는 생략가능.

          - if문 안에는 또 다른 if문이 들어갈 수 있다.
        • ?
          대화보기
          • !
            대화보기
            • 1.050845004488096
              c언어에서 args[0]은 자기 자신
            • 고구마원숭이
              9월 16일 일요일
            • Daydream
              IDEO 에서 실행하고
              프로그램 링크를 공유하면 좀더 자세한 진단이 가능할것 같습니다.
              대화보기
              • Daydream
                무엇?
                대화보기
                • Daydream
                  감사합니다 오늘도 화이팅 20180910
                • 최준영
                  what.the.funny.man;

                  public class Question {
                  public static void main(String[] args) {

                  if("개증".equals("죠크")){
                  System.out.println("어색함의극치");
                  } else {
                  System.out.println("무엇?");
                  }
                  }
                  }
                • 백선우
                  20180829 수요일 와아아안료~
                • 이지선
                  2018.08.29 완료~
                • 진영
                  8/11완료
                • 감자감자
                  완료
                • 완료
                • 제이z
                  강의에서 나오는거랑 똑같이 했는데 계속

                  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
                  at secondproject/condition.LoginDemo2.main(LoginDemo2.java:7)

                  이런게 떠요.. 도와주세요.. 헬미.. 헬미.. 솜보디 헬미..
                • 심원준
                  위 강의 보고 실행창에 프로그램 실행해보려고하는데
                  bin디렉토리까지 이동해서 java condition.LoginDemo 실행하는데
                  오류: 기본 클래스 condition.LoginDemo을(를) 찾거나 로드할 수 없습니다.
                  원인: java.lang.ClassNotFoundException: condition.LoginDemo
                  이렇게 뜹니다.
                  실제로 경로대로 이동해보면 LoginDemo.class파일이 있는데 실행이 안되는 이유가 뭘까요? ㅜㅠ
                • 전민희
                  완료
                • 멀캠A_Son
                  완료
                • 이태호
                  6/27
                • June-young
                  저처럼 조건문 응용 강의보고 한번 명령 프롬프트로 실행해보시려는 분들 중에 강의처럼 디렉토리 설정하는 방법을 모르시는 분들이 혹시라도 계실까봐 댓글로 남겨요!(제 기억으로는 이클립스 ,java 설치하는 강의에서 나왔던 내용인것 같지만.. ㅎㅎ)
                  명령 프롬프트에서 디렉토리 변경하려면 cd+공백+원하는디렉토리 를 입력하면 다음 줄부터는 원하는 디렉토리로 설정되더라고요! 제 경우엔 명령프롬프트를 실행하면
                  C:\Users\hefor> 이렇게 나오는데
                  C:\Users\hefor>cd C:\생활코딩\실습\java_tutorials\bin 으로 입력하니 다음줄 부터
                  C:\생활코딩\실습\java_tutorials\bin> 이렇게 나왔고 그래서 강의대로 입력할 수 있었습니다!
                  (물론 강의에서는 java 파일 저장 위치가 F드라이브로 다르지만 다들 보통 C로 되어있을테니까)
                  C:\Users\hefor>cd C:\생활코딩\실습\java_tutorials\bin>java org.opentutorials.condition.LoginDemo egoing 이렇게 했더니 강의처럼 결과물이 나오더라구요

                  수정사항 있으면 답글 남겨주세요~
                • 감사합니다
                • 감사합니다
                • 4월 25일 조건문
                • 송영일
                  2018년04월24일
                • 박현모
                  감사합니다~
                • 슬레이어즈
                  int val = 1;
                  if(val == 1){
                  System.out.println("one");
                  } else if(val == 2){
                  System.out.println("two");
                  } else if(val == 2){
                  System.out.println("three");
                  }

                  여기서 마지막 else if(val ==3){ 이게 되어야 three를 출력하지 않나요? 저 코드 그대로 있으면 2만 들어가면 two three 다 출력될 거 같은데요 ?^^
                  => 저 코드 그대로 있어도 2가 들어가면 two만 출력됩니다. 교재 155페이지 예제14.4 참고하세요.
                  대화보기
                  • Heedae Lee
                    저도 곧 해당되는 질문이었는데 현답 감사합니다 ^^
                    대화보기
                    • egoing
                      학원 수업 듣기 많이 힘드시죠? 저도 학원에서 공부했어요. 제 생각엔 주관을 가지시고 수업 시간에 모든 내용을 다 알아야 하는 것은 아니라는 생각을 가져보세요. 그냥 머가 먼지만 알고 나중에 필요할 때 공부하면되지 머 이런 생각을 가지고 유보하시면 어떨까해요.


                      제일 중요한 오직한가지는 시간의 순서에 따라서 명령을 실행한다는 것 뿐 입니다. 최소한의 지식으로 간단하게 무엇인가를 만들어가면서 한계에 부딛혀보세요. 한계에 충분히 머물게 되면 그 때 복잡한 개념들이 왜 필요한지 알수 있을꺼에요
                      대화보기
                      • 개발킴
                        국비지원을 받아 6개월동안에 클라우드기반과정인 학원을 다니고 있는데 도무지 이해가 안되고 수업이 너무 어렵습니다.
                        오로지 선생님 강의만이 이해가 되며 도움됩니다.
                        학원에서 헛시간?을 보내는게 아닌가 생각도 들고 고민도 많이 되어서, 선생님 강의로만 취업을 준비할까 하는데 선생님이라면 이 방법으로 하실지 알고싶습니다.. 도와주세요..! 개발자로 취업이 아니라면 길이 없다고 생각하고 있습니다.
                      • 김지수
                        아자
                      • 열심히할게요
                        감사합니다
                      • 레걸
                        술처먹고도 강의들었습니다 이글본 사람이라면 동기부여가 됬으면 좋겠습니다;
                      • 김예슬
                        180313
                        if문
                        if(){ }else if(){ }else{ }

                        switch문
                        switch(){
                        case 1:
                        실행결과1; break;
                        case 2:
                        실행결과2; break;
                        default :
                        초기값; break;

                        }
                      • 이근환
                        좋은 강의 감사드립니다!!:)
                      • 이클립스를 사용해서 환경변수를 전달하는 방법도 있습니다.
                        실행할 때 누르는 초록색 화살표 (run 버튼) 옆에 화살표를 누르면 하위항목이 보일텐데,
                        거기서 Run configurations를 누르면 창이 뜰겁니다.
                        중간에 보시면 Arguments라는 탭이 있는데, 이걸 눌러서 나오는 Program arguments 입력창이
                        프로그램 실행시 args에 들어가는 값이 됩니다. 여기에 문자열을 넣고 실행하시면
                        cmd에서 실행한 것과 똑같은 결과가 나올 겁니다.
                        대화보기
                        • 2차
                        • 이상수
                          감사합니다
                        • 반자동
                          으.. 이번껀 기네요
                        • 조건문 3번째 부분이 실행이 안 됩니다. 뭔가 잘못되었나 싶어서 위에 코드를 그대로 이클립스에 복붙까지 해놓고 실행했는데도 안 되네요.
                          Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
                          at cspreview.practice.ifstatements.applications.main(applications.java:6)
                          이렇게 에러 메시지만 띄우고 그냥 프로그램이 꺼지는데 어떻게 하면 좋을까요.

                          수정: 해결했습니다. 동영상에서 제대로 친절하게 설명해주고 있었네요. 저 외에도 위의 글만 읽으시면서 공부하시는 분들은 반드시 동영상을 참고하시면서 하셔야 할 것 같습니다. 해당 부분(조건문의 응용)은 이클립스만으로는 제대로 실행이 안 되는 구간이기 때문에 직접 cmd를 통해 실행하셔야 합니다. 글에서는 제가 겪은 이 현상에 대해 제대로 설명을 해주지 않고 있네요.
                        • 택희
                          감사합니다!
                        • DkHeadsj
                          감사합니다.
                        • GoldPenguin
                          감사합니다.
                        • Java에서는 if문의 패러미터가 상수일수는 없나봐요?
                          C에서는 if (1) { printf("true\n"); } 하면 출력이 되는데요..
                        • 정문경
                          잘봤습니당
                        • num09
                          2017/11/22
                        • zugi
                          완료.!
                        • JAVA
                          11월 6일



                        버전 관리
                        egoing
                        현재 버전
                        선택 버전
                        graphittie 자세히 보기