====== 조건문과 반복문 ======
- 조건문은 조건식과 문장을 포함하는 블럭{}으로 구성되어 있으며, 조건식의 연산결과에 따라 실행될 문장을 달리 할 수 있다.
- 처리해야할 경우의 수가 많을 때는 switch문을 사용해서 표현할 수 있는지 살펴봐야 한다.
- **모든 switch문은 if문으로 변경이 가능하지만, 모든 if문이 switch문으로 변경 가능한 것은 아니다. **
- 반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용되며, 반복문의 종류로는 for문과 while문, do-while문이 있다.
- for문이나 while문에 속한 문장은 조건에 따라 한 번도 수행되지 않을 수 있지만 do-while문에 속한 문장은 최소한 한 번 이상 수행될 것을 보장한다.
- 반복문은 주어진 조건을 만족하는 동안 주어진 문장들을 반복적으로 수행하므로 조건식을 포함하며 \\ switch문을 제외한 if, for, while문에 사용되는 조건식은 연산결과가 반드시 boolean형, 즉 true 또는 false이어야 한다.
- ** C언어에서는 true와 false이외의 값도 허용한다. **
- for문과 while문은 구조와 기능이 유사하여 어느 경우에나 서로 변환이 가능하기 때문에 \\ 반복문을 작성해야할 때 for문과 while문 중 어느 쪽을 선택해도 좋으나 \\ for문은 주로 반복횟수를 알고 있을 때, 그리고 카운터가 반복문 내에 필요한 경우에 사용되고, 단순히 조건에 따른 반복만이 필요한 경우 while문을 사용하도록 한다.
- **조건식을 잘못 작성하면, 한번도 수행되지 않거나 무한히 반복하게 되므로 주의해야한다.**
===== IF 조건문 =====
- if 다음에 오는 조건식에는 연산의 최종결과 값이 true 또는 false인 수식만을 사용할 수 있다. \\ 조건식의 결과가 false이면, 블럭{} 내의 문장이 실행되지 않는다.
- ** C언어에서는 조건식의 최종결과 값으로 true 또는 false 이외의 값을 허용하지만, 자바에서는 이를 허용하지 않는다. **
- 기본구조
if (조건식1) {
// 조건식1의 연산결과가 true일 때 수행될 문장들을 적는다.
} else if (조건식2) {
// 조건식2의 연산결과가 true일 때 수행될 문장들을 적는다.
} else if (조건식3) { // 여러 개의 else if를 사용할 수 있다.
// 조건식3의 연산결과가 true일 때 수행될 문장들을 적는다.
//...
} else { // 보통 else블럭으로 끝나며, else블럭은 생략이 가능하다.
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
- 블럭{}은 여러 개의 문장을 하나로 묶기 위해 사용되는 것이며, 함수, 조건문, 반복문 등에 사용된다.
- 조건문과 반복문에서는 수행될 문장이 하나인 경우 블럭을 생략할 수 있으나, 가능하면 생략 않고 사용하는 것이 바람직하다. \\ 수행될 문장이 한 문장이라서 블럭을 생략하고 적었을 때, 나중에 새로운 문장들이 추가되면 블럭으로 문장들을 감싸 주어야 하는데 \\ 이 때 블럭을 추가하는 것을 잊기 쉽기 때문이다. \\ 그리고, 여러 개의 if문이 중첩되어 사용되었을 때 if문과 else블럭의 관계가 의도한 바와 다르게 형성될 수도 있다.
===== SWITCH 조건문 =====
- 기본구조
switch (조건식) {
case 값1 :
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
//...
break;
case 값2 :
// 조건식의 결과가 값2와 같을 경우 수행될 문장들
break;
//...
//...
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
//...
}
- switch문의 조건식은 연산결과가 int형 범위의 정수값이어야한다. \\ byte, short, char, int 타입의 변수나 리터럴을 사용할 수 있다. \\ 그리고, case문에는 반드시 상수값만을 허용한다. \\ 변수는 허용되지 않으므로 유의해야한다.
- switch문의 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동하다. \\ 이동한 case문 이하에 있는 문장들을 수행하며, break문을 만나면 전체 switch문을 빠져나가게 된다. \\ 만일 case문 아래에 break문을 생략하면, 다른 break문을 만나거나 switch문 블럭의 끝을 만날 때까지 나오는 모든 문장들을 수행한다.
===== FOR 반복문 =====
- 반복하려는 문장이 단 하나일 때는 중괄호{}를 생략할 수 있다.
- 초기화, 조건식, 증감식, 실행문과 같이 모두 4부분으로 이루어져 있다.
- 1.초기화 -> 2.조건식 -> 3.증감식 -> 4.실행문
- 실행문이 다 끝나지 않았다면 조건식으로 다시 뒤돌아간다.
- 초기화는 처음에만 한번 수행되고, 그 이후부터는 조건식을 만족하는 한 2.조건식-3.증감식-4.실행문의 순서로 계속 반복된다.
- 조건식의 결과가 false가 되면, for문 전체를 빠져나가게 된다.
- 초기화, 조건식, 증감식은 모두 생략이 가능하며, 조건식이 생략되면 true로 간주된다
- for(;;) { /* 반복 수행할 문장 */ }
\\ 조건식이 없기 때문에 결과가 true로 간주되어 무한반복을 하게 된다.
- for(int i=0;;) { /* 반복 수행할 문장 */ }
\\ for문에 int형 변수가 i를 선언하고 0으로 초기화 되었다. 변수 i는 for문내에 선언되었기 때문에 for문 내에서만 유효하다.
- for(int i=1,j=1;i<10 && i*j<50;i++,j+=2) { /* 반복 수행할 문장 */ }
\\ 쉼표(,)를 이용해서 하나 이상의 변수를 선언하고 초기화 할 수 있다. \\ 단 같은 타입이어야 한다. \\ 증감식 역시 쉼표(,)를 이용해서 여러문장이 수행되도록 할 수 있다. \\ 매 반복마다 i는 1씩, j는 2씩 증가한다.
- for문의 카운터로 사용되는 변수는 주로 for문의 블럭{} 내에서만 사용되기 때문에, \\ for문 내에 선언해서 for문의 실행이 끝나고 나면 없어지도록 하는 것이 \\ 다음에 또 다른 반복문에서 다시 재사용할 수도 있어서 코드를 보다 단순화 하는데 도움이 된다.
===== WHILE 반복문 =====
- for문과는 달리, 조건식과 수행해야할 문장블럭{}만으로 구성되어 있지만 \\ 카운터로 사용할 변수와 증감식을 함께 사용함으로써 for문과 같이 구성할 수 있다. \\ **그래서 for문과 while문은 항상 서로 대신 사용할 수 있다.**
while (조건식) {
// 조건식의 연산결과가 true일 때 수행될 문장들을 적는다.
}
===== DO-WHILE 반복문 =====
- while문의 변형으로 기본적인 구조는 while문과 같으나 블럭{}이 먼저 수행한 후에 조건식을 판단한다는 것이 while과의 유일한 차이점이다.
- **while문은 조건식의 결과에 따라 블럭{}이 한번도 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행될 것을 보장한다. **
do {
// 조건식의 연산결과가 true일 때 수행될 문장들을 적는다.
} while (조건식);
===== BREAK 반복문 =====
- break문은 현재 위치에서 가장 가까운 switch문 또는 반복문을 벗어나는데 사용된다. \\ 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 한다.
===== CONTINUE 반복문 =====
- continue문은 반복문 내만 사용될 수 있으며, \\ 반복이 진행 중에 continue문을 만나게 되면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다. \\ for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.
- continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과 다르다. \\
- 주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고 \\ 다음 반복으로 넘어가서 계속 진행하도록 한다.
- **전체 반복 중에 특정조건을 만족하는 경우를 제외하고자 할 때 유용하다.**
===== 이름 붙은 반복문 =====
- 여러 반복문이 중첩되어 있을 때 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써 \\ 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다.