Week 04
2022. 7. 2. 22:00
728x90
목표
자바가 제공하는 제어문을 학습하세요.
학습할 것
- 조건문
- 반복문
1.조건문 if, switch
주어진 조건이 참이냐 거짓이냐에 따라 다른 명령을 처리하도록 만든 수행문이다.
# 조건문
**1.1 if문**
if (조건식) {
//조건식이 참일 때 수행될 문장들을 적는다.
}
->if문은 가장 기본적인 조건문이며, 다음과 같이 '조건식'과 '괄호{}'로 이루어져 있다.
if의 뜻이 '만일 ~라면'이므로 '만일 조건식이 참이면 괄호{} 안의 문장들을 수행하라.'라는 의미로 이해하면 된다.'
->조건식은 일반적으로 비교연산자와 논리연산자로 구성된다. 조건식을 작성할 때 '='가 아닌 '=='를
사용한다는 점 유의할 것.그리고 조건식의 결과는 반드시 true 또는 false이어야 한다.
->괄호{}를 이용해서 여러 문장을 하나의 단위로 묶을 수 있는데, 이것을 '블럭'이라고 한다.
블럭은 '{'로 시작해서, '}'로 끝나는데, '}'다음에 문장의 끝을 의미하는 ';'을 붙이지 않는다는 것에 주의하자.
**1.2 if-else문**
if (조건식) {
//조건식이 참일 때 수행될 문장들을 적는다.
} else {
//조건식이 거짓일 때 수행될 문장들을 적는다.
}
->if문의 변형인 if-else문의 구조는 다음과 같다. if문에 'else블럭'이 더 추가되었다. 'else'의 뜻이
'그 밖의 다른'이므로 조건식의 결과가 참이 아닐 때, 즉 거짓일 때 else블럭의 문장을 수행하라는 뜻이다.
**1.3 if-else if문**
if (조건식1) {
//조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
//조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
//조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { //마지막에는 보통 else블럭으로 끝나며, else블럭은 생략 가능하다.
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
->if-else문은 두 가지 경우 중 하나가 수행되는 구조인데, 처리해야할 경우의 수가 셋 이상인 경우에는
어떻게 해야 할까? 그럴 때는 한 문장에 여러 개의 조건식을 쓸 수 있는 'if-else if'문을 사용하면 된다.
**1.4 중첩 if문**
if (조건식1) {
//조건식1의 연산결과가 true일 때 수행될 문장들을 적는다.
if (조건식2) {
//조건식1과 조건식2가 모두 true일 때 수행될 문장들
} else {
//조건식1이 true이고, 조건식2가 false일 때 수행되는 문장들
}
} else {
//조건식1이 false일 때 수행되는 문장들
}
->if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능한데 이것을 중첩if문이라고 부르며 중첩의 횟수에는
거의 제한이 없다.
->위와 같이 내부의 if문은 외부의 if문보다 안쪽으로 들여쓰기를 해서 두 if문의 범위가 명확히 구분될 수 있도록 작성해야 한다.
**2.1 switch문**
switch (조건식) {
case 값1 :
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
//...
break;
case 값2 :
// 조건식의 결과가 값2와 같을 경우 수행될 문장들
//...
break;
//...
default :
//조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
//...
}
->if문과 달리 switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고 표현도 간결하므로 알아보기 쉽다.
그래서 처리할 경우의 수가 많은 경우에는 if문 보다 switch문으로 작성하는 것이 좋다. 다만 swtich문은 제약조건이 있기 때문에,
경우의 수가 많아도 어쩔 수 없이 if문으로 작성해야 하는 경우가 있다.
->switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동한다. 이동한 case문 아래에
있는 문장들을 수행하며, break문을 만나면 전체 switch문을 빠져나가게 된다.
->만일 조건식의 결과와 일치하는 case문이 하나도 없는 경우 default문으로 이동한다.
default문은 if문의 else블럭과 같은 역할을 한다고 보면 이해가 쉬울 것이다. default문의 위치는
어디라도 상관없으나 보통 마지막에 놓기 때문에 break문을 쓰지 않아도 된다.
->switch문에서 break문은 각 case문의 영역을 구분하는 역할을 하는데, 만일 break문을 생략하면 case문 사이의
구분이 없어지므로 다른 break문을 만나거나 swtich문 블럭{}의 끝을 만날 때까지 나오는 모든 문장들을 수행한다.
이러한 이유로 각 case문의 마지막 break문을 빼먹는 실수를 하지 않도록 주의해야 한다.
***swtich문의 제약조건:**
switch문의 조건식은 결과값이 반드시 정수이어야 하며, 이 값과 일치하는 case문으로 이동하기 때문에
case문의 값 역시 정수이어야 한다. 그리고 중복되지 않아야 한다. 같은 값의 case문이 여러 개이면, 어디로 이동해야 할지 알 수 없기 때문이다.
게다가 case문의 값은 반드시 상수이어야 한다. 변수나 실수, 문자열은 case문의 값으로 사용할 수 없다.
**2.2 switch문 중첩**
->swtich문도 if문 처럼 중첩이 가능하다. 한 가지 주의할 점은 중첩 swtich문에서 break문을 빼먹기 쉽다는 것이다.
2.반복문
지정한 문장들을 여러 번 반복할 수 있도록 하는 프로그램 명령문이다.
# 반복문
**1.1 for문**
for(int i=1;i<=5;i++) {
System.out.println("I can do it");
}
->for문은 반복 횟수를 알고 있을 때 적합하다. 구조가 족므 복잡하지만 직관적이라 오히려 이해하기 쉽다.
*for문의 구조와 수행순서
1)초기화: 반복문에 사용될 변수를 초기화하는 부분이며 처음에 한 번만 수행된다.
2)조건식: 조건식의 값이 참이면 반복을 계속하고, 거짓이면 반복을 중단하고 for문을 벗어난다.
3)증감식: 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다. 매 반복마다 변수의 값이 증감식에 의해서
점진적으로 변하다가 결국 조건식이 거짓이 되어 for문을 벗어나게 된다.
*중첩for문:
if문 안에 또 다른 if문을 넣을 수 있는 것처럼, for문 안에 또 다른 for문을 포함시키는 것도 가능하다.
그리고 중첩의 횟수는 거의 제한이 없다. 바깥쪽 for문이 한 번 반복될 때마다 안쪽 for문의 모든 반복이
끝나고서야 바깥쪽 for문의 다음 반복으로 넘어간다.
**1.2 while문**
while (조건식) {
// 조건식의 연산결과가 참인 동안, 반복될 문장들을 적는다.
}
**** ->for문에 비해 while문은 구조가 간단하다. if문처럼 조건식과 블럭{}만으로 이루어져 있다.
다만 if문과 달리 while문은 조건식이 참인 동안, 즉 조건식이 거짓이 될 때까지 블럭{}내의 문장을 반복한다.
->for문과 while문은 항상 서로 변환이 가능하다.만일 초기화나 증감식이 필요하지 않은 경우라면, while문이 더 적합할 것이다.
->while문은 for문과 다르게 조건식을 생략할 수 없다는 점에 주의해야 한다. 그래서 while문의 조건식이 항상
참이 되도록 하려면 반드시 true를 넣어야 한다.
**1.3 do-while문**
do {
//조건식의 연산결과 참일 때 수행될 문장들을 적는다.
} while(조건식); //끝에 ;를 잊지 않도록 주의
->do-while문은 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{}의 순서를 바꿔 놓은 것이다.
그래서 while문과 반대로 블럭{}을 먼저 수행한 후에 조건식을 평가한다. while문은 조건식의 결과에 따라
블럭{}이 한 번도 수행되지 않을 수 있지만, do-while문은 최소한 한 번은 수행될 것을 보장한다.
**1.4 break문**
->조건문이 아닌 반복문에서도 break문을 사용할 수 있는데, switch문에서 그랬던 것처럼, break문은
자신이 포함된 가장 가까운 반복문을 벗어난다. 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 한다.
****->무한 반복문에는 조건문과 break문이 항상 같이 사용된다. 그렇지 않으면 무한히 반복되기 때문에 프로그램이 종료되지 않을 것이다.
**1.5 continue문**
->continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면
반복문의 끝으로 이동하여 다음 반복으로 넘어간다. for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.
continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과 다르다.
주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고, 다음 반복으로 넘어가서 계속 진행하도록 한다.
전체 반복 중에 특정조건을 만족하는 경우를 제외하고자 할 때 유용하다.
**1.6 이름 붙은 반복문**
->break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우에는
break문으로 중첩 반복문을 완전히 벗어날 수 없다. 이때는 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써
하나 이상의 반복문을 벗어나거나 건너뛸 수 있다.
'Java & Spring > WhiteShip Study' 카테고리의 다른 글
Week 06 (0) | 2022.07.16 |
---|---|
Week 05 (0) | 2022.07.09 |
Week 03 (0) | 2022.06.25 |
Week 02 (0) | 2022.06.18 |
Week 01 (0) | 2022.06.11 |