4. 제어문 - (1) 조건문

한승록·2023년 4월 5일
0

자바 기초

목록 보기
7/21
post-thumbnail
'제어문' 은 크게 '분기문', '반복문', '제어키워드'으로 나누어집니다.



그 중 이번 포스트에서 설명드릴 '제어문''분기문' 입니다.
'분기문''선택제어문'이라고도 하며 'if 조건문''switch ~ case 문' 이 있습니다.
먼저 'if 조건문' 에 대해 설명드리겠습니다.

1-1) if 조건문

		int num = 10;
        
        if (num < 20) {					// 만약, 조건이 참이라면
			++num;						// 종속 문장을 실행한다
            
			System.out.println("if조건문 실행 결과 : " + num);
		}
     	if(num >= 20) {					// 만약, 조건이 거짓이라면
			--num;						// 종속 문장을 실행하지 않는다
            
			System.out.println("if조건문 실행 결과 : " + num);
        }								

<※ 결과는 다음과 같습니다.>

위의 연산 결과를 보시게 되면 아래의 'if 조건문'조건을 충족하지 못해 실행되지 않는것 을 보실 수 있습니다.

1-2) else

'if 조건문''else' 를 결합하여 다음과 같이 정리할 수 있습니다.
		if(num < 20) {
			++num;					// 20보다 작으면 종속 문장을 실행한다
            
			System.out.println("if조건문 실행 결과 : " + num);
		}
		
		else {
			--num;					// 위의 조건을 만족하지 못하면 종속 문장을 실행하지 않는다
            
			System.out.println("if조건문 실행 결과 : " + num);
		}
해당 조건문의 실행결과는 위의 제어문과 동일합니다. 하지만 'else' 는 단독으로 사용하지 않고, 이전에 'if' 가 있어야 합니다. 별도의 조건을 가지지 않고 'if' 가 수행되지 않았다면 연결된 'else' 가 작동하는 방식이기 때문입니다.

그렇기 때문에 해당 구문이 연결되어 있다는 것을 인식시키기 위해서는 if 와 else 사이에 다른 구문을 넣으면 안됩니다.
		if(num < 20) {
			++num;				// 20보다 작으면 종속 문장을 실행한다
			System.out.println("if조건문 실행 결과 : " + num);
		}
		
		System.out.println("안녕하세요");
		
		else {
			--num;				// 위의 조건을 만족하지 못하면 종속 문장을 실행하지 않는다   
			System.out.println("if조건문 실행 결과 : " + num);
		}

<※ 결과는 다음과 같습니다.>

해당 오류 구문을 보시면 'else' 에서 오류가 발생했으니 해당 구문을 삭제해야 한다는 의미입니다.

이는 프로그램 언어가 실행 시 순서가 에서 아래왼쪽 에서 오른쪽 으로 실행되는 성질 때문입니다.

이러한 성질때문에 'if''else' 사이에 출력문 때문에 'else' 가 별도로 사용되는 것으로 인식되고 해당 오류가 발생하게 되는 것입니다.


1-3) else if

'else' 는 다음과 같이 결합하여 'else if' 의 형태로 사용될 수 있습니다.
해당 구문은 다중 조건을 통한 제어문을 작성할 경우 사용됩니다.
		Scanner sc = new Scanner(System.in);
		int num1, num2;
		
		System.out.print("첫번째 정수(num1) 입력 : ");
		num1 = Integer.parseInt(sc.nextLine());
		
		System.out.print("두번째 정수(num2) 입력 : ");
		num2 = Integer.parseInt(sc.nextLine());
		
		if (num1 > num2) {
			System.out.print("num1은 num2보다 크다\n");
		}
		else if(num1 == num2) {
			System.out.print("num1과 num2는 같다\n");
		}
		else {
			System.out.print("num1은 num2보다 작다\n");
		}
		
		sc.close();
	}

<※ 결과는 다음과 같습니다.>

이와 같이 세부적인 조건을 정해 해당 조건을 실행시키기 위해 작성되고 일반적인 'else' 와는 다르게 조건문을 삽입해줘야 한다는 특징이 있습니다.


2-1) switch ~ case:

'switch' 는 일상에서 사용하는 스위치를 떠올리시면 쉽게 이해하실 수 있습니다.


	Scanner sc = new Scanner(System.in);
		int num = 100;
		int answer;			// switch를 통제하기 위한 변수
		
		System.out.println("\n");
		System.out.println("보기에 주어진 정수보다 큰 수를 고르세요");
        System.out.println(num);
		System.out.println("① 10");
		System.out.println("② 20");
		System.out.println("③ 30");
		System.out.println("④ 120");
		System.out.print("정답 : ");
		answer = Integer.parseInt(sc.nextLine());
		
		switch (answer) {
		case 1:
			System.err.println("오답입니다!!!");
			break;
		case 2:
			System.err.println("오답입니다!!!");
			break;
		case 3:
			System.err.println("오답입니다!!!");
			break;
		case 4:
			System.out.println("정답입니다!!!");
			break;
		}
		
        
		sc.close();
해당 코드를 보시게 되면 'switch 문' 에는 항상 'case (위치값):' 가 따라오게 됩니다.
'switch 문'통제할 '변수' 를 선언한 뒤 해당 변수에 데이터 값을 입력받게 되면 데이터와 동일한 위치값을 가진 case구역으로 이동하여 해당 영역의 코드를 실행하게 됩니다.

그럼 해당 구문을 실행시켜 보도록 하겠습니다.

<※ 결과는 다음과 같습니다.>

이쯤이면 제가 처음에 언급한 실생활에서의 스위치 가 어떤 의미인지 눈치 채신 분들도 계실겁니다.

예를 들어 거실에 스위치를 보면 '거실등', '신발장', '베란다' 를 통제할 수 있는 각각의 스위치가 존재하는 것을 보실 수 있으실 겁니다.

'switch 문' 의 작동원리와 정말 비슷하지 않나요?

그런데 여기서 해당 구문을 잘 살펴보시면 각 'case' 가 끝날 때마다 'break' 라는 단어가 붙는 것을 보실 수 있을겁니다. 다음 포스트에서는 해당 단어가 속한 제어문과 함께 반복문에 대해 말씀드리겠습니다.

profile
개발 학습

0개의 댓글