조건문
- if문
- switch문
🔘 if문
if 문은 특정 조건이 참인지 확인하고, 그 조건이 참( true )일 경우 특정 코드 블록을 실행한다.
형식
if (condition) {
// 조건이 참일 때 실행되는 코드
}
예제 - 나이가 18세 이상일 경우 "성인입니다." 라는 문구를 출력하고, 18세 미만일 경우 "미성년자입니다."라는 문구를 if문을 사용해서 출력하라. 변수는 age라고 하고 초기값은 20으로 한다.
If1
package cond;
public class If1 {
public static void main(String[] args) {
int age = 20;
if(age >= 18){
System.out.println("성인입니다.");
}
if(age <= 18){
System.out.println("미성년자입니다");
}
}
}
실행 결과
성인입니다.
- 첫 번째 if문에서 age의 값이 20이기 때문에 조건이 맞으므로 블록 안에 있는 출력 코드를 실행하게 된다. 그리고 다음 if문으로 넘어간다.
- if(20 >= 18) - 참
- 두 번째 if문에서는 조건이 맞지 않으므로 블록 안에 있는 출력 코드를 실행하지 않는다.
- if(20 <= 18) - 거짓
🔘 else문
else 문은 if 문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.
if (condition) {
// 조건이 참일 때 실행되는 코드
} else {
// 만족하는 조건이 없을 때 실행되는 코드
}
예제 - else문을 사용하여 If1을 고쳐보자.
If2
package cond;
public class If2 {
public static void main(String[] args) {
int age = 20;
if(age >= 18){
System.out.println("성인입니다."); //참일 때 실행
}else{
System.out.println("미성년자입니다."); //만족하는 조건이 없을 때 실행
}
}
}
이렇게 해도 If1과 실행 결과가 같은 걸 볼 수 있다.
else if문
else if 문은 앞선 if 문의 조건이 거짓일 때 다음 조건을 검사한다. 만약 앞선 if 문이 참이라면 else if 를 실행하지 않는다.
형식
if (condition1) {
// 조건1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건2이 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
특정 조건이 만족하면 해당 코드를 실행하고 if 문 전체를 빠져나온다. 특정 조건을 만족하지 않으면 다음 조건을 검사한다. 여기서 핵심은 순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 되는 것이다.
참고로 else 는 생략할 수 있다.
else if문의 필요성
왜 else if 문을 사용하는가? 어떤 상황일 때 사용하는가? 아래의 예제를 보고 if문으로만 작성해보자.
예제 - if문을 사용하여 연령에 따라 나이별로 문구를 다르게 출력하라. 변수는 age라고 하고 초기값은 12이다.
● 7세 이하일 경우 : "미취학"
● 8세 이상 13세 이하일 경우 : "초등학생"
● 14세 이상 16세 이하일 경우: "중학생"
● 17세 이상 19세 이하일 경우: "고등학생"
● 20세 이상일 경우: "성인"
If3
package cond;
public class If3 {
public static void main(String[] args) {
int age = 12;
if (age <= 7){
System.out.println("미취학");
}
if (age >= 8 && age <= 13) {
System.out.println("초등학생");
}
if (age >= 14 && age <= 16) {
System.out.println("중학생");
}
if (age >= 17 && age <= 19) {
System.out.println("고등학생");
}
if (age >= 20) {
System.out.println("성인");
}
}
}
위 코드는 보기에는 깔끔하고 좋아 보이지만 다음과 같은 단점이 있다.
- 불필요한 조건 검사
- 첫 번째 if문(age <= 7)에서 조건을 만족하지 않으므로 if문을 빠져나온다.
- 두 번째 if문(age >= 8 && age <= 13)에서 조건을 만족하므로 if문의 명령을 수행한 후 빠져나온다.
- 앞에서 이미 조건을 만족하고 출력 코드를 실행했어도 나머지 아래의 if문도 모두 실행해야 한다.
- 코드 효율성
- 예를 들어서 나이가 8살인 초등학생이라면 미취학을 체크하는 조건인 age <= 7 을 통해 나이가 이미 8살이 넘는 다는 사실을 알 수 있다.
- 그런데 바로 다음에 있는 초등학생을 체크하는 조건에서 age >= 8 && age <= 13 라는 2가지 조건을 모두 수행한다.
- 여기서 age >= 8 이라는 조건은 이미 앞의 age <= 7이라는 조건과 관련이 있다.
- 결과적으로 조건을 중복 체크한 것이다.
이러한 문제 때문에 else if문을 사용하는 것이다. 그럼 If3을 else if문으로 변경해보자.
If4
package cond;
public class If4 {
public static void main(String[] args) {
int age = 12;
if(age <= 7) { //~7: 미취학
System.out.println("미취학");
} else if(age <= 13) { //8~13: 초등학생
System.out.println("초등학생");
} else if(age <= 16) { //14~16: 중학생
System.out.println("중학생");
} else if(age <= 19) { //17~19: 고등학생
System.out.println("고등학생");
} else { //20~: 성인
System.out.println("성인");
}
}
}
- age = 7인 경우
- if(age <= 7) 의 조건이 참이다. "미취학"을 출력하고 전체 if 문 밖으로 나간다.
- age = 13인 경우
- if(age <= 7) 의 조건이 거짓이다. 다음 조건으로 넘어간다.
- else if(age <= 13) 의 조건이 참이다. "초등학생"을 출력하고 전체 if 문 밖으로 나간다.
- age = 50인 경우
- if(age <= 7) 의 조건이 거짓이다. 다음 조건으로 넘어간다.
- else if(age <= 13) 의 조건이 거짓이다. 다음 조건으로 넘어간다.
- else if(age <= 16) 의 조건이 거짓이다. 다음 조건으로 넘어간다.
- else if(age <= 19) 의 조건이 거짓이다. 다음 조건으로 넘어간다.
- else 만족하는 조건 없이 else 까지 왔다. else 에 있는 "성인"을 출력하고 전체 if 문 밖으로 나간다.
if 문에 여러 조건이 있다고 항상 if-else 로 묶어서 사용할 수 있는 것은 아니다. 조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우에는 else if 문을 사용하면 안되고, 대신에 여러 if 문을 분리해서 사용해야 한다.
🌟 if 문을 각각 사용할지, if 와 else if 를 함께 묶어서 사용할지는 요구사항에 따라 다르다. 둘의 차이를 이해하고 적절하게 사용하면 된다.
if문 { } 중괄호 생략
if 문 다음에 실행할 명령이 하나만 있을 경우에는 {} 중괄호를 생략할 수 있다. else if , else 도 마찬가지이다.
if (true)
System.out.println("if문에서 실행됨");
그러나 문장이 두 개 이상있을 경우, 중괄호를 생략하면 첫 번째 문장은 실행되나 두 번째 문장은 if문에서 실행이 되지 않는다. 즉, if문 바깥에서 실행되는 코드가 된다.
🌟 그래도 if문의 명령이 한 개만 있어도 가독성과 유지보수성을 위하여 중괄호를 붙이도록 한다.
Switch문
switch 문은 앞서 배운 if 문을 조금 더 편리하게 사용할 수 있는 기능이다. if문은 비교 연산자를 사용할 수 있지만, switch문은 단순히 값이 같은지만 비교할 수 있다.
형식
switch (조건식) {
case value1:
// 조건식의 결과 값이 value1일 때 실행되는 코드
break;
case value2:
// 조건식의 결과 값이 value2일 때 실행되는 코드
break;
default:
// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
- 조건식의 결과 값이 어떤 case의 값과 일치하면 해당 case의 코드를 실행한다.
- break 문은 현재 실행 중인 코드를 끝내고 switch 문을 빠져나가게 하는 역할을 한다.
- 만약 break 문이 없으면, 일치하는 case 이후의 모든 case 코드들이 순서대로 실행된다.
- default 는 조건식의 결과값이 모든 case 의 값과 일치하지 않을 때 실행된다. if 문의 else 와 같다.
- default 구문은 선택이다.
- if , else-if , else 구조와 동일하다.
예제 - switch문을 사용하여 회원 등급에 따라 다른 쿠폰을 발급하는 프로그램을 작성한다.
변수는 int grade라고 하고 초기값은 2이다.
● 1등급 : 쿠폰 1000
● 2등급 : 쿠폰 2000
● 3등급 : 쿠폰 3000
● 위의 등급에 해당하지 않는 경우 : 쿠폰 500
각 쿠폰이 할당된 후에는 "발급받은 쿠폰 " + 쿠폰값 을 출력해야 한다.
Switch1
package cond;
public class Switch2 {
public static void main(String[] args) {
int grade = 2;
int coupon;
switch (grade){
case 1:
coupon = 1000;
break;
case 2:
coupon = 2000;
break;
case 3:
coupon = 3000;
break;
default:
coupon = 500;
}
System.out.println("발급받은 쿠폰 : " + coupon);
}
}
실행 결과
발급받은 쿠폰 2000
삼항 연산자
삼항 연산자는 항이 3개라는 뜻이다. 조건 , 참_표현식 , 거짓_표현식 이렇게 항이 3개이다. 자바에서 유일하게 항이 3개인 연산자여서 삼항 연산자라 한다. 또는 특정 조건에 따라 결과가 나오기 때문에 조건 연산자라고도 한다. .
형식
(조건) ? 참_표현식 : 거짓_표현식
조건에 만족하면 참_표현식이 실행되고, 조건에 만족하지 않으면 거짓_표현식이 실행된다. 앞의 if , else 문과 유사하다. 참과 거짓에 따라서 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 ? : 연산자를 사용할 수 있다. 이 연산자를 사용하면 if 문과 비교해서 코드를 단순화 할 수 있다.
예제 - 삼항 연산자를 사용하여 나이가 18세 이상이면 "성인", 18세 미만이면 "미성년자"를 출력하도록 한다.
CondOp2
package cond;
public class CondOp2 {
public static void main(String[] args) {
int age = 18;
String status = (age >= 18) ? "성인" : "미성년자";
System.out.println("age = " + age + " status = " + status);
}
}
실행 결과
age = 18 status = 성인
💡Tip
파일 전체를 그대로 복사하고 싶을 때, 복사하고 싶은 파일을 마우스로 선택한 후 <Ctrl-C → Ctrl-V>를 해주고 이름만 변경해주면 된다.
💡Tip
<Shift 키>를 누른 상태에서 방향키를 움직이면 원하는 만큼의 범위를 선택할 수 있다.
좌우 방향키는 한 글자씩 선택, 상하 방향키는 한 줄씩 선택할 수 있다.
범위를 선택하고 복사 붙여넣기 가능!
'자바 > 자바 입문' 카테고리의 다른 글
[자바 기초] 05. 스코프(Scope), 형변환(Casting) (0) | 2024.03.26 |
---|---|
[자바 기초] 04. 반복문(while/do-while/break/continue/for) (0) | 2024.03.24 |
[자바 기초] 02. 연산자(Operator) (0) | 2024.03.19 |
[자바 기초] 01. 변수(Variable) (3) | 2024.03.18 |