티스토리 뷰

[개발] - Java/개념 정리

조건문과 반복문

완벽한 장면 2023. 1. 13. 11:23

제어문

- 조건을 판별하여 선택적으로 실행하거나 비슷한 작업을 반복함으로써 프로그램의 흐름을 통제하는 명령

 

블록 구조

- 조건에 대해 실행할 명령이 하나 뿐이면 if문 다음에 명령을 바로 기술한다.

- 진위 여부에 따라 여러개의 명령을 실행한다면 조건에 걸리는 모든 명령을 { } 블록으로 묶는다.

- 같은 블록에 속한 명령의 집합을 복문이라고 한다.

 

*Java는 FreeFormat이라 들여쓰기를 어떻게 하더라도 블록 구조에는 영향을 끼치지 않으며, 두 명령을 나란히 들여써도 하나의 단위로 취급하지 않는다.

**명령을 한 단위로 만들려면 { } 괄호로 명령을 묶어야 한다.

 

else

- 조건이 참이면 명령 1을 실행하고, 거짓이면 명령 2를 실행한다.

if (조건) {
	명령1
} else {
	명령2
}

*if문은 조건이 거짓일 때 다음 명령으로 이동하지만, if else 문은 거짓일 때 실행할 명령이 따로 있다.

*if문은 전체를 다 무시할 수 있지만, if else 문은 둘 중에 하나는 꼭 실행한다.

  if else문도 블록으로 감싸서 여러 개의 명령을 실행할 수 있다.

 

if else if

- if else 문을 조금 더 확장하면 if else if 문이 된다. 

class JavaTest {
	public static void main(String[] args) {
		int age = 16;
		
		if (age >= 19) {
			System.out.println("성인입니다.");
		} else if (age > 12) {
			System.out.println("청소년입니다.");
		} else {
			System.out.println("어린이입니다.");
		}
	}
}

여기서 두 번째 if문을 블록으로 묶으면 다음과 같다.

if (age >= 19) {
	System.out.println("성인입니다."0
} else {
	if (age>12) {
    	System.out.println("청소년입니다.")
    } else {
    	System.out.println("어린이입니다.")
    }
}

- 앞쪽의 if와 else가 짝이며, 블록 안의 if와 else가 짝이다.

- 블록 안쪽의 else 절은 앞쪽의 두 if문이 모두 거짓일 때 선택된다.

**앞쪽 else에 걸리는 명령이 if 하나뿐일 때는 블록을 생략하여 간락하게 쓴다. 이런 식으로 else if를 계속 연결하면 다수의 조건 중 하나를 선택한다.

 

중첩

- 같은 문장이 반복되는 것. 중첩의 횟수에는 제약이 없다.

- if문을 세 번 연거푸 사용하여 세 개의 조건이 동시에 만족하는지 살펴볼 수 있고, else 절에 또 다른 if문을 넣어 더 세분화된 처리를 해줄 수 있다.

 

 

선택문

switch문

- if else문으로 다중 선택을 구현할 수 있지만, 구문이 복잡해보이고 형식성이 매우 떨어진다.

 따라서 특정 변수의 값에 따라 분기할 때 if else if를 쓰는 것보다 정형화 된 switch 구문을 사용하는 것이 좋다.

 

<Switch문의 구조>

switch(변수) {
	case 값1:
       명령1:
       break;
       
    case 값2:
       명령2:
       break;
       
    default:
       명령:
       break;

 

[구조 설명]

- switch문의 괄호 안에 선택 대상이 되는 제어 변수를 쓰고,

- case문에 변수의 값에 따라 실행할 명령을 작성한다.

 (case문은 변수가 가질 수 있는 값의 개수만큼 얼마든지 나열할 수 있다.)

- 앞쪽의 모든 case가 일치하지 않을 때는 default의 명령을 실행하는데, 그 외의 경우가 없다면 default는 생략할 수 있다.

- 일치하는 case가 없고, default도 지정되어 있지 않으면 switch문 전체를 무시한다.

 

- switch문은 변수의 값 하나에 대한 명령을 선택 처리하기 때문에

 case를 처리한 후에 즉시 break하여 빠져 나오는 것이 보편적이다.

하나가 결정되었으면 아래쪽 case는 더 볼 필요 없다.

 

if else if문과 switch문의 차이를 보여주는 직관적 예제

class JavaTest {
	public static void main(String[] args) {
		int ranking = 2;
		
		if (ranking == 1) {
			System.out.println("축하합니다. 금메달이에요.");
		} else if (ranking == 2) {
			System.out.println("은메달을 수여합니다.");
		} else if (ranking == 3) {
			System.out.println("동메달입니다.");
		} else {
			System.out.println("참가상을 드립니다.");
		}
	}
}
class JavaTest {
	public static void main(String[] args) {
		int ranking = 2;
		
		switch (ranking) {
		case 1:
			System.out.println("축하합니다. 금메달이에요.");
			break;
		case 2:
			System.out.println("은메달을 수여합니다.");
			break;
		case 3:
			System.out.println("동메달입니다.");
			break;
		default:
			System.out.println("참가상을 드립니다.");
			break;
		}
	}
}

 

병합 처리

- case 끝에 break가 없으면 다음 case의 명령까지 계속 실행하는데, 이런 특성을 활용하여 두 값에 대한 처리를 병행한다!

class JavaTest {
	public static void main(String[] args) {
		int ranking = 3;
		
		switch (ranking) {
		case 1:
			System.out.println("대상입니다.");
			break;
		case 2:
		case 3:
			System.out.println("우수상입니다.");
			break;
		case 4:
		case 5:
			System.out.println("장려상입니다.");
			break;
		}
	}
}

 

ex. 점수 범위 비교

*case 문의 값은 컴파일 시점에 결정할 수 있는 상수여야 하며, 변수는 사용할 수 없다. 각 class의 값은 고유해야 하며 같은 값이 중복되면 에러 처리된다.

*딱 하나의 값만 올 수 있으며 범위를 지정하는 것도 안 된다.

점수 범위 등급
~ 59점 F
60~69점 D
70~79점 C
80~89점 B
90~100점 A

- 이 때 논리연산자를 사용하면 score >= 90 && score <= 100 과 같이 쓰면 되는데, case문에는 쓰지 못한다.

==> 해결방법

: score값을 10으로 나누면 일의 자리는 떨어져 나가고, 남은 10의자리 값으로 분기한다.

  A학점은  90, 91,...,99점도 포함되지만 100점도 포함되므로, 10의자리가 10인 경우와 9인 경우를 묶어서 같이 묶어서    처리한다. ==> 그래서 case 10: 다음에 break;를 생략.

class JavaTest {
	public static void main(String[] args) {
		int score = 82;
		
		switch (score/10) {
		case 10:
		case 9:
			System.out.println("A");
			break;
		case 8:
			System.out.println("B");
			break;
		case 7:
			System.out.println("C");
			break;
		case 6:
			System.out.println("D");
			break;
		default:
			System.out.println("F");
			break;
		}
	}
}

 

switch문과 if else문의 비교

  • switch : 단일 상속값만 비교할 수 있으나 가독성이 뛰어나고 코드 편집이 쉽다. 
  • if else : 비교식을 직접 작성하므로 임의의 비교가 가능하지만 가독성이 떨어진다.
  • switch 문의 최대 약점은 범위나 실수를 비교할 수 없다는 점.
  • 실수는 상등 비교가 부정확하고 범위를 비교해야 하므로 if else문을 사용하는 것이 바람직하다.

 

 

By. 자바 정복

728x90
반응형

'[개발] - Java > 개념 정리' 카테고리의 다른 글

try-catch 이론  (0) 2023.02.25
참조형  (0) 2023.01.13
배열  (1) 2023.01.13
연산자 우선순위  (0) 2023.01.13
연산자  (0) 2023.01.13
Comments
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
250x250