개발공부

JAVA쪼렙탈출기: 제어문

Yuniverse. 2023. 5. 20. 09:23
Python과 SQL만 써본 주니어 분석가. '개발공부를 해보고 싶다', '개발도 공부하긴 해야하는데...'는 말만 한지 어연 1년이 넘어가는 중, 이대로는 안되겠다 싶어 냅다 JAVA 수업 수강에 카드를 긁었다. 쪼렙 중의 쪼렙이 JAVA를 배워나가는 여정을 "JAVA 쪼렙 탈출기"라는 시리즈로 남길 예정이다.

 

제어문은 위에서 아래로 순차적으로 실행되는 프로그램의 흐름을 변경할 때 사용한다.

 

if문

if ( 조건식_a ) {
 		조건식_a 가 참이면 실행
 	} else if ( 조건식_b ) {
 		조건식_a 거짓, 조건식_b 가 참이면 실행
 	} ... {
 		여러 개의 else if 가능
 	} else {
 		상위의 조건식이 모두 거짓이면 실행
}

if문의 조건식이 참(true)이면 if문 안의 코드를 실행 & else if문과 else문 안의 코드 건너 뛴 후에 하위 코드를 실행하고,

if문의 조건식이 거짓(flase)이면 if문 안의 코드 건너뜀 & else if문의 조건식이 참(true)이면 else if문 안의 코드를 실행 & else문 안의 코드를 건너뛴 후에 하위 코드를 실행한다.

if문과 else if문의 조건식이 모두 거짓(false)이면 if문과 else if문 안의 코드 건너뜀 & else문 안의 코드를 실행한 후에 하위 코드를 실행한다.

else문은 필수로 작성해야 하는 것은 아니므로 if문만 작성해도 된다. 또한, if문 안에 또다른 if문을 넣을 수도 있다. (중첩 제어문)

 

public class ifEx01 {
	
	public static void main(String[] args) {
		
		int money = 3000;
		if(money >= 2500) {
			System.out.println("돈이 많다.");
		} else {
        	System.out.println("돈이 없다.");
        }
		System.out.println("보유 금액은 " + money + "원이다.");
		
	}

}

[결과값]

돈이 많다.

보유 금액은 3000원이다.

 

if문의 조건식 money >= 2500이 참이었기 때문에 if문 안의 코드가 실행되고, else문 안의 코드는 건너뛴 후에 하위 코드가 실행되었다.

 

if문 작성시 주의해야할 점

  • if(조건식); 을 해서는 안 된다. 세미콜론(;)은 if(조건식) { }; 에 위치해야 한다.
  • 조건문이 1줄일 때는 {중괄호}를 입력하지 않아도 if문이 알아서 조건문으로 인식한다. 2줄 이상일 때부터는 {중괄호}가 필수적이다.
  • else 뒤에는 조건식을 쓰지 않는다. else(조건식) 을 해서는 안 된다.

 

public class NestedIf {
	
	public static void main(String[] args) {
		
		int data = 10;
		int aData;
		System.out.println("data : " + data);
		
		if(data >= 0) {
			System.out.print("plus - ");
			if(data % 2 == 1) {
				System.out.print("홀수");
			} else {
				System.out.print("짝수");
			}
		} else {
			System.out.print("minus - ");
			aData = data * -1;
			if(aData % 2 == 1) {
				System.out.print("홀수");
			} else {
				System.out.print("짝수");
			} // 음수는 나눗셈 연산이 안되므로 양수로 바꿔서 짝홀수 판단하도록 코드짠 것
		}
		
		
	}

}

[결과값]

data : 10

plus - 짝수

 

public class IfelseifEx01 {
	
	public static void main(String[] args) {
		
		int var = 15;
		System.out.println("var : " + var);
		System.out.println();
		
		System.out.println(" - if 여러 개 -");
		if(var > 20) {
			System.out.println("20보다 큰 수");
		}
		if(var > 10) {
			System.out.println("10보다 큰 수");
		}
		if(var > 0) {
			System.out.println("0보다 큰 수");
		}
		System.out.println();
		
		
		System.out.println(" - if ~ else if -");
		if(var > 20) {
			System.out.println("20보다 큰 수");
		} else if(var > 10) {
			System.out.println("10보다 큰 수");
		} else if(var > 0) {
			System.out.println("0보다 큰 수");
		}
		
	}

}

[결과값]

- if 여러 개 -

10보다 큰 수

0보다 큰 수

 

- if ~ else if -

10보다 큰 수

 

이처럼 if ~ else if문은 위의 조건식이 만족하면 아예 코드가 끝나버리므로 if를 여러 개 써서 연결한 코드와는 결과값이 다르게 나온다. 만일 결과값이 동일하다해도 if를 여러 개 쓴 코드보다 if ~ else if문을 쓴 코드가 훨씬 깔끔하기 때문에 if ~ else if문을 사용하는 게 더 낫다. 코드는 최대한 깔끔하고 명료하게 쓰는 습관을 들이자!

 

 

switch문

switch (값) {
  	 case 상수값 : 
  		실행 코드
  		break;
  	 ...
  	 case 상수값 :
  		실행 코드
  		break;
  	 default :
  		실행 코드
}

switch문 안의 값과 정확하게 매칭되는 case값을 찾아서 해당 지역의 코드를 실행한다.

  • switch: 정수, 문자, 문자열의 값만 가능
  • case: 상수만 사용 가능 (변수 사용x)
            : 상수값 뒤에는 세미콜론(;)이 아닌 콜론(:) 사용
            : 하나의 case가 끝나는 마지막에는 break를 사용해서 종료 (break를 사용하지 않으면 다음 case까지 실행된다.)
  • default: 매칭되는 case값이 없을 때 실행할 코드가 있으면 사용한다.
                : 필수조건이 아니며, if문의 else와 같은 역할이다.
                : default에는 break를 쓰지 않는다. 

 

public class SwitchEx01 {
	
	public static void main(String[] args) {
		
		int no = 2;
		System.out.println("no : " + no);
		
		switch(no) {
		case 1:
			System.out.println("1 - one");
			break;
		case 2:
			System.out.println("2 - two");
			break;
		case 3:
			System.out.println("3 - three");
			break;
		default :
			System.out.println("?.?");
		}
		// break 사용하지 않으면 이후의 지역까지 계속해서 작동된다.
	}

}

[결과값]

no : 2

2 - two

 

public class SwitchEx02 {

	public static void main(String[] args) {
		
		char subject = 'J';
		
		switch(subject) {
		case 'J':
		case 'j':
			System.out.println("Java를 선택했습니다.");
			break;
		case 'P':
		case 'p':
			System.out.println("Python을 선택했습니다.");
			break;
		default:
			System.out.println("없는 과목입니다.");
		}
		
	}
	
}

[결과값]

Java를 선택했습니다.

 

이처럼 case값은 다르지만 실행되는 코드가 동일하다면 여러 case를 break 없이 하나로 묶어버리는 것도 가능하다.

'개발공부' 카테고리의 다른 글

JAVA쪼렙탈출기: Random Class  (0) 2023.05.21
JAVA쪼렙탈출기: 반복문  (0) 2023.05.20
JAVA쪼렙탈출기: Scanner Class  (0) 2023.05.14
JAVA쪼렙탈출기: System.in.read( )  (0) 2023.05.14
JAVA쪼렙탈출기: 연산자  (0) 2023.05.13