Post

☕ 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문도 마찬가지이다.
  • 하지만 가독성과 유지보수성의 측면에서 중괄호를 사용하는 것이 좋다.

문제

  • 온라인 쇼핑몰의 할인 시스템을 개발해야한다.
  • 한 사용자가 어떤 상품을 구매할 때, 다양한 할인 조건에 따라 총 할인 금액이 달라질 수 있다.
  • 각각의 할인 조건은 다음과 같다.
  1. 아이템 가격이 10,000원 이상일 때, 1,000원 할인
  2. 나이가 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.