조건문
조건문이란?
- 조건에 따라 코드의 실행 흐름을 다르게 동작하도록 제어하는 역할
if 조건문
- if 조건문 형태
- if (boolean 값) 처리문장;
- 소괄호() 안에는 boolean 형태의 결과가 있어야한다.
- 처리 문장은 소괄호 안의 결과가 true일 때 수행하는 문장
- false일 때는 처리 문장을 수행하지 않는다.
- if else 조건문 형태
- if (boolean 값) 처리문장1;
else 처리문장2; - else는 if ()소괄호 안의 결과가 false일 때 처리하는 용도로 사용된다.
- if (boolean 값) 처리문장1;
// if문 Example
boolean flag = false;
// flag는 false 이므로 else에 해당하는 처리문장 수행
if (flag) System.out.println("true"); // boolean 값이 true일 때 수행되는 라인
else System.out.println("false"); // false일 때 수행되는 라인이므로 false 출력
- if() 다음 처리 문장은 여러 문장이 올 수 있다
- 처리문장을 중괄호로 묶어서 사용
- 처리 문장이 한 문장인 경우 중괄호를 생략할 수 있지만 권장하지 않는다!!
- 중괄호를 사용하지 않으면 가독성 측면과 유지보수 측면에서 좋지 않다.
if(boolean 값) {
처리문장1;
처리문장2;
}
- if () 소괄호 안에 들어가는 조건을 여러 가지 조건을 한 번에 따질 수 있다.
- &&와 || 활용
if (age > 25 && isMarried){
처리 문장1;
처리 문장2;
} else {
처리 문장3;
}
- else if()
- if() else if() else if() .... else 형태로 값의 범위에 따라 결과를 다르게 할 수 있다.
- 조건끼리 서로 연관이 있어서 하나로 묶을 때 사용한다.
- 서로 독립적인 조건인 경우에는 else if가 아닌 별개의 if로 나열해야한다.
if (score > 90) 처리문장1;
else if(score > 80) 처리문장2;
else if(score > 70) 처리문장3;
//생략
else 처리문장n;
- else if()는 위에서부터 조건을 확인 후 충족시킨다면 해당 처리문장을 수행 후 밑의 조건은 확인하지 않는다.
- else if와 동일하게 if 문을 여러 개 나열하는 경우보다 훨씬 효율적이고 불필요한 조건 검사를 하지 않는다.
- else if()도 삼항 연산자 ?:로 표현 가능하다
- ex) score > 90 ? 처리문장1 : score > 80 ? 처리문장2 : score > 70 ...... : 처리문장n;
- 한 줄로 표현할 수는 있지만 마찬가지로 가독성이 좋지 않다.
Switch 조건문
- 여러 범위에 걸쳐서 비교되어야 할 때 하나의 값으로 분기하여 비교하는 방식
- if 조건문은 비교 연산자를 사용할 수 있지만 switch문은 단순히 값이 같은지만 비교할 수 있다.
- switch문 없이 if문 만 사용할 수 있지만 switch 문이 특정 상황에서 더 간결하게 작성할 수 있다.
- switch 조건문 형태
switch(비교대상변수) {
case 점검값1:
처리문장1;
...
break;
case 점검값2:
처리문장2;
....
break;
....
default:
기본처리문장;
...
break;
}
- 비교대상변수에는 long을 제외한 정수형과 몇 개의 특별한 타입만 가능하다.
- long을 제외한 정수형 (byte, short, int, char)
- Enum
- String
- 참조 자료형(Character, Byte, Short, Integer)
- 중괄호 안에는 case 문장이나 default가 와야한다.
- case 문장이 없으면 switch문 사용불가
- case 문장을 마무리 하고 싶다면 반드시 break;이 필요하다.
- break; 문장이 실행되면 switch 문장을 빠져나간다.
- case 문장에 break;이 없다면?
- switch 문장에서는 그 한 번 조건을 만족시켰다면 그 다음에 break; 가 올 때까지 어떤 case 조건이든 통과 후 처리문장을 실행하게 된다.
- 특정 조건을 처리해야하는 경우 case 문에 break;을 제외시키는 방법도 있다.
- ex) 월별 일수 계산 => 1,3,5,7,8,10,12월은 31일 / 4,6,9,11월은 30일 / 2월은 28일이므로 각 case의 마지막에만 break;를 넣는 것이 효율적.
// switch문에 break 없이 활용하기 좋은 예시 (해당 월의 일 수 계산)
int month = 1;
int day;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
default:
day = 28;
}
- 비교대상변수가 해당하는 case 점검값을 찾고 그 case 문장의 처리문장을 수행한다.
- default 문장은 앞에 조건에 맞지 않는 경우 수행된다.
- 모든 case 조건에 맞지 않을 경우 실행
- 그렇기에 default 문장은 맨 뒤에 와야 한다.
- switch 문은 숫자 비교시 되도록 적은 숫자부터 증가시켜 가는 것이 좋다.
break는 현재 수행중인 중괄호에서 빠져 나가는 역할을 한다.
반복문
반복문이란?
- 지정한 횟수만큼 반복하거나 조건에 맞을 때까지 반복하는 문장
while 반복문
while (boolean 조건) {
처리 문장;
}
- while() 소괄호 안에 boolean 조건이 있어야한다.
- 조건 값이 true 인 경우에만 중괄호 안 처리문장이 수행된다.
- false 인 경우 while 문장이 수행되지 않는다.
- if() 조건문과 while() 반복문의 차이는?
- if() 조건문은 중괄호가 끝나면 다음 줄로 넘어간다.
- while() 반복문은 중괄호가 끝나면 다시 위로 올라가 boolean 조건을 확인 후 true 라면 다시 중괄호 내용 실행.
- while() 반복문에서도 break; 를 사용해 반복을 중지시킬 수 있다.
- while() 반복문에서 문장을 건너뛰는 방법은?
- continue; 를 사용하면 된다.
- 반복문에서 continue; 를 만나면 그 뒤 문장은 실행되지 않고 건너 뛴 후 boolean 조건 점검 부분으로 가게 된다.
- continue; 를 잘못 사용할 경우 반복문을 빠져 나오지 못하는 무한 루프 현상이 발생한다.
- while(true)로 반복문을 수행하는 경우
- 조건이 항상 true이기 때문에 break을 호출하거나 예외를 발생시키지 않는 이상 반복문은 멈추지 않는다. (무한 루프 발생)
do-while() 문
do {
처리문장;
...
} while (boolean 조건);
- do-while()문은 while() 문과 유사하지만 조건과 상관 없이 적어도 한 번은 반복문 안의 문장이 실행된다는 점이다.
- while() 소괄호 뒤에 ; (세미콜론)을 반드시 입력해야한다.
for() 루프
for (초기식(초기화); 조건식(종료조건); 증감식(조건 값 증가)) {
반복문장;
}
- for 루프 각각 문장 사이에는 ;을 적어줘야한다.
- 기본적인 for 루프 사용 시 소괄호 안에 두 개의 ;이 있어야한다.
- 초기식에서 초기화된 변수는 for문 밖에서 사용할 수 없다.
- for 루프 수행 순서
- 1. "초기화" 구문을 통해 변수 초기화
- 주로 반복 횟수와 관련된 변수를 선언하고 초기화 할 때 사용한다.
- 초기식은 딱 한 번 사용된다.
- 2. "종료조건" 구문 실행, 종료조건 구문은 boolean 타입으로 작성
=> true 인 경우 "반복문장" 실행 / false 인 경우 for 루프 종료 - 3. "종료조건" 결과가 true라면 "반복문장" 수행
- 4. 중괄호 내 작업 종료 후 "조건 값 증가" 수행, 보통 "초기화"에서 선언한 변수를 이 때 증가시킨다.
- 5. "반복문장" 수행 전 "종료조건" 확인
- 6. 2~4번 순서가 반복되며 조건 결과가 false인 경우 for 루프 종료 후 다음 문장 수행
- 1. "초기화" 구문을 통해 변수 초기화
// for문 무한 루프
for(;;) {
// 내용 생략
}
- for문을 while(true){} 처럼 무한 루프로 작성하고 싶으면 for(;;){}로 작성할 수 있다.
- 혹은 for(초기식;조건식;증감식;) 중 조건식만 생략해도 된다.
- for문 vs while 문 비교
- for 루프는 원하는 횟수만큼 반복시켜 수행할 수 있다.
- while() 반복문은 조건이 false가 될 때까지, for() 루프는 원하는 횟수만큼 반복을 수행할 수 있다.
- for문이 비교적으로 더 깔끔한 느낌을 준다.
- 초기화, 조건검사, 반복 후 작업 등이 규칙적으로 한 줄에 모두 들어 있기 때문에
- 반복을 위해 값이 증가하는 카운터 변수를 다른 부분과 명확히 구분할 수 있다.
- 조건이 복잡한 경우에는 for문보다 while문을 사용하는 것이 더 좋다.
label
ex) label Example
startLabel:
while(조건식) {
while(조건식){
//생략
if() continue startLabel; // 10행이 아닌 2행으로 이동
}
System.out.println();
}
- for 루프를 두 개 이상 쓰거나 while() 반복문을 두개 이상 사용하는 경우 바깥쪽 반복문의 시작점으로 이동하려고 할 때 사용
- 반복문 바로 앞에 원하는 이름을 입력하고 :(콜론)을 써주면 된다.
- 원래 label이 없는 continue; 구문이라면 반복문 한 개만 빠져나와 System.out.println() 이 실행될 것이다.
- 위 label 예시를 보자.
- if() 조건문에 의해 continue 문장이 수행되면 System.out.println()은 실행되지 않고 startLabel: 로 이동한다.
간단 내용 정리
1. if 문장의 소괄호 안에는 어떤 타입의 결과가 제공되어야 하나요?
ㅡ> boolean 타입만 가능하다.
2. if 조건에 맞지 않는 모든 경우를 처리할 때 사용하는 예약어는 뭔가요?
ㅡ> else
3. switch를 사용할 수 있는 기본 자료형의 타입에는 어떤 것들이 있나요?
ㅡ> 기본 자료형은 long을 제외한 정수형, 그 외 Enum, 참조 자료형, String이 있다.
4. switch블록 안에서 비교 대상값 앞에 사용하는 예약어는 무엇인가요?
ㅡ> case
5. switch 조건을 빠져나가도록 하는 예약어는 무엇인가요?
ㅡ> break
6. switch 조건들에 맞지 않을 때 기본 처리를 하기 위한 예약어는 무엇인가요?
ㅡ> default
7. while 문의 소괄호 안에는 어떤 형태의 결과가 제공되어야 하나요?
ㅡ> boolean 타입
8. while 문을 무조건 한번은 실행하게 하려면 어떻게 해야 하나요?
ㅡ> do-while문을 사용한다, 적어도 한 번은 실행되기 때문에
9. while문을 마음대로 빠져나가게 하려면 어떤 예약어를 사용하면 되나요?
ㅡ> break
10. while문의 중간에 while문의 소괄호 점검 구문으로 건너뛰도록 할 때 사용하는 예약어는 무엇인가요?
ㅡ> continue
11. for루프의 소괄호안의 가장 첫 구문(첫 세미 콜론 앞의 문장)은 for루프가 수행되는 동안 몇 번 수행되나요?
ㅡ> 가장 첫 구문은 초기화 구문으로 1번만 수행된다.
12. for루프의 소괄호 안의 중간에 있는 구문은 어떤 타입의 결과가 제공되어야 하나요?
ㅡ> boolean 타입
13. for루프의 소괄호 안의 마지막에 있는 구문에서는 어떤 작업을 수행하나요?
ㅡ> 조건 값을 증가시키거나 감소시키는 값 증감을 수행한다.
출처: 이상민, <자바의 신 VOL.1> 로드북
'Java > 자바의 신 VOL.1' 카테고리의 다른 글
08. 참조 자료형에 대해서 더 자세히 알아봅시다 (0) | 2024.06.20 |
---|---|
07. 여러 데이터를 하나에 넣을 수는 없을까요? (0) | 2024.06.20 |
05. 계산을 하고 싶어요 (1) | 2024.06.19 |
04. 정보를 어디에 넣고 싶은데 (0) | 2024.06.18 |
03. 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (1) | 2024.06.18 |