JAVA - 조건문
1. if문 - if, else
if문 : 특정 조건이 참인지 확인하고, 그. 조건이 참(true) 일 경우 특정 코드 블록을 실행한다.
int age = 20; // 사용자 나이
if (age >= 18) {
System.out.println("성인입니다.");
}
if (age < 18) {
System.out.println("미성년자입니다.");
}
실행 결과 : 성인입니다.
else문 : if문에서 만족하는 조건이 없을 때 실행하는 코드를 제공
int age = 20;
if (age >= 18){
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}
실행 결과 : 성인입니다.
2. if문2 - else if
예시 문제
-당신은 연령에 따라 다른 메시지를 출력하는 프로그램을 작성해야 한다. 이 프로그램은 `int age` 라는 변수를 사용해야 하며, 연령에 따라 다음의 출력을 해야 한다.
7세 이하일 경우: "미취학"
8세 이상 13세 이하일 경우: "초등학생"
14세 이상 16세 이하일 경우: "중학생"
17세 이상 19세 이하일 경우: "고등학생"
20세 이상일 경우: "성인"
먼저 배웠던 if문만 써서 이렇게 한다면 아래와 같이 표현할 수 있다.
int age = 14;
if (age <= 7){
System.out.println("미취학");
}
if(age >= 8 && age <= 13) { //8~13: 초등학생
System.out.println("초등학생");
}
if(age >= 14 && age <= 16) { //14~16: 중학생
System.out.println("중학생");
}
if(age >= 17 && age <= 19) { //17~19: 고등학생
System.out.println("고등학생");
}
if(age >= 20) { //20~: 성인
System.out.println("성인");
}
하지만 불필요한 단점이 있다.
- 불필요한 조건 검사
- 코드 효율성
else if문을 쓴 코드는 다음과 같다.
int age = 14;
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("성인"); }
}
3. if문 - if문과 else if문
- if문에 else if를 함께 사용하는 것은 서로 연관된 조건일 때 사용한다. 그런데 서로 관련이 없는 독립 조건이면 else if를 사용하지 않고 if문을 각각 따로 사용해야 한다.
예시문제
- 온라인 쇼핑몰의 할인 시스템을 개발해야 한다. 한 사용자가 어떤 상품을 구매할 때, 다양한 할인 조건에 따라 총 할인 금액이 달라질 수 있다. 각각의 할인 조건은 다음과 같다.
- 아이템 가격이 10000원. 이상일 때, 1000원 할인.
- 나이가 10살 이하일 때 1000원. 할인
이 할인 시스템의 핵심은. "한 사용자가 동시에 여러 할인을 받을 수 있다는 점"이다.
예를 들어, 10000원짜리 아이템을 구매할 때 1000원 할인을 받고, 동시에 나이가 10살 이하이면 추가로 1000원 더 할인을 받는다. 그래서 총 20002000원까지 할인을 받을 수 있다.
int price = 10000;
int age = 10;
int discount = 0;
if (price >= 10000) {
discount += 1000;
System.out.println("10000원 이상 구매시 1000원 할인");
}
if (age <= 10) {
discount += 1000;
System.out.println("어린이 1000원 할인");
}
System.out.println("총 할인 금액 : " + discount + "원");
4. switch문
- if문은 비교 연산자를 사용할 수 있지만, switch문은 단순히 값이 같은지만 비교할 수 있다.
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);
}
switch문에선 break가 매우 중요한데 이 것을 활용해서 위 코드에서 2,3등급도 같이 3000원을 준다고 해보자.
int grade = 2;
int coupon;
switch (grade){
case 1:
coupon = 1000;
break;
case 2:
case 3:
coupon = 3000;
break;
default:
coupon = 500;
}
System.out.println("발급받은 쿠폰 : " + coupon + "원");
if문 vs switch문
- switch문의 조건식을 넣는 부분을 잘 보면 x > 10 과 같은 참 거짓의 결과가 나오는 것이 아니라, 단순히 값만 넣을 수 있다.
- switch문은 조건식이 특정 case와 같은지만 체크할 수 있다.(문자도 가능)
- 반면, if문은 참 거젓의 결과가 나오는 조건식을 자유롭게 적을 수 있다.(x > 10, x == 10)
>> switch문 없이 if문만 사용해도 된다. switch문을 사용하면 if문 보다 간결한 코드를 작성할 수 있다고 한다.
라고 했지만, 그렇게 간결해보진 않는다.
그래서 JAVA14부터 새로운 switch문이 나왔다.
int grade = 2;
int coupon = switch (grade) {
case 1 -> 1000;
case 2 -> 2000;
case 3 -> 3000;
default -> 500;
};
System.out.println("발급받은 쿠폰 : " + coupon);
기존 switch 문과 다른 점은??
>> -> 를 사용
>> 선택된 데이터를 반환할 수 있다.
5. 삼항 연산자
int age = 18;
String status = (age >= 18) ? "성인" : "미성년자";
System.out.println("age = " + age + ", status = " + status);
- 삼항 연산자는 항이 3개라는 뜻이다. 조건 / 참 표현식 / 거짓 표현식
- 조건에 만족하면 참 표현식이 실행되고, 조건에 만족하지 않으면 거짓 표현식이 실행된다.