☕ Java Syntax 004 - 조건문
☕ Java Syntax 004 - 조건문
if-else문
1
2
3
4
5
6
7
8
9
10
11
public class IfElsePractice {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}
}
}
if문은 특정 조건이 참인지 확인하고, 그 조건이true일 경우 특정 코드 블록을 실행한다.else문은if문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class IfPractice {
public static void main(String[] args) {
int age = 14;
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("성인");
}
}
public class IfElseIfElsePractice {
public static void main(String[] args) {
int age = 15;
if (age <= 7) {
System.out.println("미취학");
} else if (age <= 13) {
System.out.println("초등학생");
} else if (age <= 16) {
System.out.println("중학생");
} else if (age <= 19) {
System.out.println("고등학생");
} else {
System.out.println("성인");
}
}
}
else if문: 앞선if문의 조건이 거짓일 때 다음 조건을 검사한다.- 만약 앞선
if문이 참이라면else if문을 실행하지 않는다. else문은 상황에 따라 생략할 수 있다.If2.java는 다음과 같은 문제가 있다.- 이미 조건을 만족해도 불필요한 다음 조건을 계속 검사한다.
- 첫 번째 조건
age <= 7에서 이미8 <= age라는 사실을 알 수 있다. - 하지만 다음 조건
8 <= age && age <= 13에서 2가지 조건을 모두 확인한다. - 결과적으로 같은 조건을 중복 체크한 것이다.
if문에 실행할 명령이 하나만 있을 경우에는{}중괄호를 생략할 수 있다.else문과else if문도 마찬가지이다.- 하지만 가독성과 유지보수성의 측면에서 중괄호를 사용하는 것이 좋다.
문제
- 온라인 쇼핑몰의 할인 시스템을 개발해야한다.
- 한 사용자가 어떤 상품을 구매할 때, 다양한 할인 조건에 따라 총 할인 금액이 달라질 수 있다.
- 각각의 할인 조건은 다음과 같다.
- 아이템 가격이
10,000원 이상일 때,1,000원 할인 - 나이가
10살 이하일 때1,000원 할인
- 이 할인 시스템의 핵심은 한 사용자가 동시에 여러 할인을 받을 수 있다는 점이다.
- 예를 들어,
10,000원자리 아이템을 구매할 때1,000원 할인을 받고, 동시에 나이가 10살 이하이면 추가로1,000원 더 할인을 받는다. - 그래서 총
2,000원까지 할인을 받을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class DiscountSystemPractice {
public static void main(String[] args) {
int price = 10000;
int age = 10;
int discount = 0;
if (price >= 10000) {
discount = discount + 1000;
System.out.println("10000원 이상 구매, 1000원 할인");
}
if (age <= 10) {
discount = discount + 1000;
System.out.println("어린이 1000원 할인");
}
System.out.println("총 할인 금액: " + discount + "원");
}
}
- 이 코드에서는 각각 독립된
if문이 있다. - 따라서 해당하는 모든 할인을 적용한다.
- 만약
else if를 쓰면, 첫 번째로 충족하는 조건만 할인이 적용되고 나머지는 무시된다. - 따라서 사용자는 나머지 할인을 놓칠 수 있다.
- 반대로
else if를 써야하는데if를 쓴다면 중복 할인이 적용 안 되는 경우에도 중복으로 할인을 허용해버리는 상황이 발생한다.
switch문
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Switch4 {
public static void main(String[] args) {
int grade = 2;
int coupon = switch (grade) {
case 1 -> 1000;
case 2 -> 2000;
case 3 -> 3000;
default -> 500;
};
System.out.println("발급받은 쿠폰 " + coupon);
}
}
switch문은 앞서 배운if문을 더 편리하게 사용할 수 있는 기능이다.if문은 비교 연산자를 사용할 수 있지만,switch문은 단순히 값이 같은지만 비교할 수 있다.- 조건 변수의 데이터 타입은 정수형,
String,enum타입만 가능하다. Java 14부터는 새로운switch문이 정식 도입되었는데,->를 사용하여 선택된 데이터를 반환한다.- 기존에는
case마다break;를 작성해야 했지만,Java 14부터는break;를case마다 작성할 필요가 없다. switch문은if문보다 조금 덜 복잡한 것 같지만 코드가 기대보다 깔끔하게 나오지는 않는다.
switch문을 사용하지 않고if문만 사용해도 된다.
삼항연산자
1
2
3
4
5
6
7
8
9
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);
}
}
- 삼항연산자는 항이 3개라는 뜻이다.
- 조건, 참 표현식, 거짓 표현식 이렇게 항이 3개이다.
- 특정 조건에 따라 결과가 나오기 때문에 조건 연산자라고도 한다.
if문처럼 코드 블럭을 넣을 수 있는 것이 아니라 단순한 표현식만 넣을 수 있다.- 삼항연산자 없이
if문만 사용해도 된다. - 하지만 단순히 참과 거짓에 따라서 특정 값을 구하는 삼항연산자를 사용하면
if문보다 간결한 코드를 작성할 수 있다.
This post is licensed under CC BY 4.0 by the author.