제어문

Java의 핵심 명령어인 제어문에 대해 알아보자.

자바를 실행하면 코드를 읽는 방향은 위에서 아래로, 왼쪽에서 오른쪽이다.

이 방향으로 순서가 정해지고 그에 따라 결과값이 달라지기도 한다.

하지만 이 방향을 무조건적으로 따르기엔 단순 반복이 너무 많아져서 비효율적인데다가 지저분하기때문에, 이 흐름을 통제해서 코드를 더욱 간결하게 정리해주는 제어문이 나타난 것이다.

 

1) 조건문

첫번째 제어문으로 조건문이 있다.

조건문에는 if, if~else, if~else if, switch~case가 있다. 

if(조건문){	// 조건식이 true일때 실행
	...
    ...
}

가장 기본적인 if문의 형태는 이렇다. 조건문의 true/false여부가 중괄호 안에 있는 명령의 실행여부를 결정한다.

예시로 살펴보면 이렇다.

public class if {

	public static void main(String[] args) {
		
	/* 조건문 - if 형식)
	 * if(조건식){		// 관계연산자, 논리연산자 숙지 필수!!
	 * 		문장들;
	 * 		...
	 * 		...
	 * }
	 */
		
		int x=20;
		if(x>10) {		// 20 > 10 --> if(1) --> run
			System.out.println("10보다 큰 수입니다.");
			System.out.println("x: " + x);		// x: 20
		}	// 조건이 true일때만 실행된다
		System.out.println("오늘은 힘들고 어려워요! 하지만 재밌습니다!\n");
		
		int y=50;
		if(y>0 && y<100) {		// 50 > 0 && 50 < 100 --> if(1) --> run
			y+=200;		// y=y+200
			System.out.println(y + "\n");
		}
		
		int num=52;
		int value=24;
		if(num>value) {		// 52 > 24 --> if(1) --> run
			System.out.println("num > value");
		}
		
		if(num==value) {	// 52 == 24 --> if(0) --> don't run
			System.out.println("num == value");
		}
		
		if(num<value) {		// 52 < 24 --> if(0) --> don't run
			System.out.println("num < value");
		}
		
		int su=20;
		if(su%2 == 0) {		// 20을 2로 나눈 후 나머지가 0 --> if(1) --> run
			System.out.println("짝수입니다.");
		}
		
		if(su%2 != 0) {		// 20을 2로 나눈 후 나머지가 1 --> if(0) --> run
			System.out.println("홀수입니다.");
		}
	}

}

가장 중요하게 봐야 할 부분은 당연히 조건문이다. 조건문이 true일 때만 코드가 실행되고 false일 때는 아예 존재하지 않은 취급을 해주기 때문이다.

 

if~else와 if~else if도 알아보자.

// if ~ else
if(조건식){	// if(1)일때
	문장들;
	...
	...
}else{		// if(0)일때
	문장들;
	...
}

// if ~ else if
if(조건식){
		문장들;
		...
}else if(조건식){
		문장들;
		...
}else{
		문장들;
		...
}

if(1)은 조건식이 true일때, if(0)은 false일때를 말한다.

기본적인 if문의 조건식이 false일때는 코드 자체를 넘어가버렸다면, if~else문에서는 false일때의 명령어를 추가해서 무조건 실행하게 되는 코드로 바뀌었다.

더 나아가서 if~else if문에서는 조건식을 true/false에서 진화시켜서 원하는 만큼 경우의 수를 추가할 수 있게 되었다.

예시로 살펴보자.

public class if_else {

	public static void main(String[] args) {

	//if~else 예시
		int a=-24;
		
		if(a>0) {		// -24 > 0 --> if(0) --> don't run
			System.out.println(a + "는 양수입니다.");
		}else {			// if(1) --> run
			System.out.println(a + "는 음수입니다.");
		}
		
		if(a%2==0) {	// -24%2 == 0 --> if(1) --> run
			a+=100;
			System.out.println(a + "짝수입니다.");
		}else {
			a*=200;
			System.out.println(a + "홀수입니다.");
		}
        
        
	// if~else if 예시
		// 학년 예
		int value=3;
		
		if(value==1) {			// 3 == 1 --> if(0) --> don't run
			System.out.println("1학년입니다.");
		}else if(value==2) {	// 3 == 2 --> if(0) --> don't run
			System.out.println("2학년입니다.");
		}else if(value==3) {	// 3 == 3 --> if(1) --> run
			System.out.println("3학년입니다.");
		}else if(value==4) {
			System.out.println("4학년입니다.");
		}
		
	}

}

※ 조건문 응용

if는 중첩해서 사용할 수 있다.

여러개의 조건문을 겹쳐서 더 구체적인 조건을 완성시켜보자.

public class if_applied {

	public static void main(String[] args) {
	
    // 조건문 응용 예시
		int num=150;	// 양수 or 음수, 200보다 큰 수 작은 수?
		
		if(num>0) {		// 150 > 0 --> if(1)
			System.out.println("양수입니다.");
			if(num>200) {	// 150 > 200 --> if(0) --> don't run
				System.out.println("200보다 큰 수 입니다.");
			}else {			// 150 < 200 --> if(1) -->run
				System.out.println("200보다 작은 수 입니다.");
			}
		}else if(num<0) {
			System.out.println("음수입니다.");
		}
		System.out.println("");
		
		// 학점 예제 A : A+ >= 97, A0 96 ~ 94, A- <= 93, B : B+ B0 B-
		int score=84;
		String grade=null;
		
		if(score>=90) {
			if(score>=97) {
				grade="A+";
			}else if(score>=94 && score<=96) {
				grade="A";
			}else if(score<=93) {
				grade="A-";
			}
		}else if(score>=80) {
			if(score>=87) {
				grade="B+";
			}else if(score>=84 && score<=86) {
				grade="B";
			}else if(score<=83) {
				grade="B-";
			}
		}else if(score>=70) {
			if(score>=77) {
				grade="C+";
			}else if(score>=74 && score<=76) {
				grade="C";
			}else if(score<=73) {
				grade="C-";
			}
		}else if(score<70) {
			grade="F";
		}
		System.out.println("학생의 점수는 " + score + "이고, 학점은 " + grade + "입니다");
		
	}

}

 

마지막으로 switch~case를 알아보자.

switch(조건식){		// 정수형 또는 문자열, 실수 및 논리관계 연산자 사용X
case 값:
	문장들;
	...
    break;
case 값:
	문장들;
...
}

if문과 유사한 면이 있지만, 한 가지 다른 점은 조건문의 결과값이 될 수도 있는 case들을 중괄호 안에 하나하나씩 나열한다는 점이다.

또 한가지 차이점은 if문의 경우 조건이 true가 되는 경우의 명령어를 실행한 후 조건문 전체를 빠져나오는 기능이 기본적으로 탑재된 반면, switch문의 경우엔 그 기능이 없다는 점이다.

만약 맨 위에 있는 case의 값이 조건식의 출력값이라서 실행을 하면, 그 밑에 있는 모든 명령어들도 다 같이 실행되어버린다.

이 때 등장하는 녀석이 break다. break는 위에 얘기한 if문에 기본적으로 탑재된 그 기능의 역할을 해낸다. 마치 집 나올때 에어컨을 끄는 리모컨 같은 명령어라고 볼 수 있겠다.

public class switch {

	public static void main(String[] args) {

	// switch 예시
		int su=3;
		switch(su) {
		case 1:
			System.out.println("1번");
			break;
		case 2:
			System.out.println("2번");
			break;
		case 3:
			System.out.println("3번");
			break;		// 조건이 맞아서 실행 후 블럭 밖으로 빠져나간다
		case 4:
			System.out.println("4번");
			break;
		}
}

'Java' 카테고리의 다른 글

10.20.(목) Java-07: 배열  (0) 2022.10.21
10.20.(목) Java-06: 제어문(반복문)  (0) 2022.10.20
10.18.(화) Java-04: 연산자 예시  (0) 2022.10.19
10.18.(화) Java-03: 연산자  (0) 2022.10.19
10.18.(화) Java-02: 자료형  (0) 2022.10.19

+ Recent posts