1. if문1 - if , else

if문

if문은 특정 조건이 참인지 확인하고, 그 조건이 참(true)일 경우 특정 코드 블록을 실행한다.

if (condition) {
    / / 조건이 참일 때 실행되는 코드
}
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("미성년자입니다.");
        }
    }
}

실행 결과

 

else 문

else문은 if문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.
"그렇지 않으면"

if (condition) {
    / / 조건이 참일 때 실행되는 코드
} else {
    / / 만족하는 조건이 없을 때 실행되는 코드
}
package cond;

public class If2 {
    public static void main(String[] args) {
        int age = 17;

        if (age >= 18) {
            System.out.println("성인입니다.");
        } else {
            System.out.println("미성년자입니다.");
        }
    }
}

실행 결과

 

 

2. if문2 - else if

연령에 따라 다른 메시지를 출력하는 프로그램 작성
- 7세 이하일 경우: "미취학"
- 8세 이상 13세 이하일 경우: "초등학생"
- 14세 이상 16세 이하일 경우: "중학생"
- 17세 이상 19세 이하일 경우: "고등학생"
- 20세 이상일 경우: "성인"
package cond;

public class If3 {
    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("성인");
        }
    }
}

이 코드는 다음과 같은 두 가지 단점이 있다.

불필요한 조건 검사

이미 조건을 만족해도 불필요한 다음 조건을 계속 검사한다.

코드 효율성

age >=8이라는 조건은 이미 앞의 age <=7이라는 조건과 관련이 있다.

결과적으로 조건을 중복 체크한 것이다.

 

이런 코드에 else if를 사용하면 불필요한 조건 검사를 피하고 코드의 효율성을 향상시킬 수 있다.

 

else if

else if 문은 앞선 if 문의 조건이 거짓일 때 다음 조건을 검사한다.

만약 앞선 if 문이 참이라면 else if를 실행하지 않는다.

 

if-else 코드

if (condition1) {
    / / 조건1이 참일 때 실행되는 코드
} else if (condition2) {
    / / 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
    / / 조건2가 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
    / / 모든 조건이 거짓일 때 실행되는 코드
}

순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행한다.

 

else는 생략될 수 있다.

 

else 생략 코드

if (condition1) {
    / / 조건1이 참일 때 실행되는 코드
} else if (condition2) {
    / / 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
}

 

else if 코드

package cond;

public class If4 {
    public static void main(String[] args) {
        int age = 7;

        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("성인");
        }
    }
}

 

 

3. if문3 - if문과 else if문

if문에 else if를 함께 사용하는 것은 서로 연관된 조건일 때 사용한다.

그런데 서로 관련이 없는 독립 조건이면 else if를 사용하지 않고 if문을 각각 따로 사용해야 한다.

if-else 사용: 서로 연관된 조건이어서, 하나로 묶을 때
if (condition1) {
    / / 작업1 수행
} else if (condition2) {
    / / 작업2 수행
}
--> 작업1, 작업2 둘 중 하나만 수행된다.

 

if 각각 사용: 독립 조건일 때
if (condition1) {
    / / 작업1 수행
}
if (condition2) {
    / / 작업2 수행
}
--> 조건만 맞다면 둘 다 수행될 수 있다.

 

예제)

온라인 쇼핑몰의 할인 시스템을 개발해야 한다. 한 사용자가 어떤 상품을 구매할 때, 다양한 할인 조건에 따라 총 할인 금액이 달라질 수 있다. 각각의 할인 조건은 다음과 같다.

  • 아이템 가격이 10000원 이상일 때, 1000원 할인
  • 나이가 10살 이하일 때 1000원 할인

--> 한 사용자가 동시에 여러 할인을 받을 수 있다.

package cond;

public class If5 {
    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 + "원");
    }
}

실행 결과

만약 else if를 쓰면, 첫 번째로 충족하는 조건만 할인이 적용되고 나머지는 무시된다. 따라서 사용자는 나머지 할인을 놓칠 수 있다.

 

 

4. switch문

당신은 회원 등급에 따라 다른 쿠폰을 발급하는 프로그램을 작성해야 한다.
이 프로그램은 int grade 라는 변수를 사용하며, 회원 등급(grade)에 따라 다음의 쿠폰을 발급해야 한다.
● 1등급: 쿠폰 1000
● 2등급: 쿠폰 2000
● 3등급: 쿠폰 3000
● 위의 등급이 아닐 경우: 쿠폰 500
각 쿠폰이 할당된 후에는 "발급받은 쿠폰 " + 쿠폰값 을 출력해야 한다.

 

if문을 사용하여 작성한 경우

package cond;

public class Switch1 {
    public static void main(String[] args) {
        int grade = 2;

        int coupon;

        if(grade == 1) {
            coupon = 1000;
        } else if(grade == 2) {
            coupon = 2000;
        } else if(grade == 3) {
            coupon = 3000;
        } else {
            coupon = 500;
        }
        System.out.println("발급받은 쿠폰 " + coupon);
    }
}

실행 결과

 

switch문을 사용하여 작성한 경우

switch문은 if문을 조금 더 편리하게 사용할 수 있는 기능이다.

if문은 비교 연산자를 사용할 수 있지만, switch문은 단순히 값이 같은지만 비교할 수 있다.

switch (조건식) {
    case value1:
        / / 조건식의 결과 값이  value1일 때 실행되는 코드
            break;
    case value2:
        / / 조건식의 결과 값이 value2일 때 실행되는 코드
            break;
    default:
        / / 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
  • 조건식의 결과 값어떤 case의 값과 일치하면 해당 case의 코드를 실행한다.
  • break문현재 실행 중인 코드를 끝내고 switch문을 빠져나가게 하는 역할을 한다.
  • 만약 break문이 없다면 중단하지 않고 다음에 있는 case의 코드를 실행한다.
  • default는 조건식의 결과값이 모든 case 의 값과 일치하지 않을 때 실행된다. if 문의 else 와 같다. default 구문은 선택이다.
package cond;

public class Switch2 {
    public static void main(String[] args) {
        int grade = 3;
        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);
    }
}

실행 결과

 

if문 vs switch문

switch문의 조건식을 넣는 부분에는 x > 10과 같은 참 거짓의 결과가 나오는 조건이 아니라,

단순히 값만 넣을 수 있다.

switch 문은 조건식이 특정 case 와 같은지만 체크할 수 있다. 쉽게 이야기해서 값이 같은지 확인하는 연산만 가능하다.

(문자도 가능)

반면에 if 문은 참 거짓의 결과가 나오는 조건식을 자유롭게 적을 수 있다. 예) x > 10 , x == 10

 

정리하자면 swtich 문 없이 if 문만 사용해도 된다. 하지만 특정 값에 따라 코드를 실행할 때는 switch 문을 사용하 면 if 문 보다 간결한 코드를 작성할 수 있다.

 

자바 14 새로운 switch문

switch 문은 if 문 보다 조금 덜 복잡한 것 같지만, 그래도 코드가 기대보다 깔끔하게 나오지는 않는다.

이런 문제를 해결하고자 자바14부터는 새로운 switch 문이 정식 도입되었다.

기존 코드를 새로운 switch 문으로 개발하면 다음과 같다.

package cond;

public class Swtich4 {
    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문과의 차이

  • ->를 사용
  • 선택된 데이터를 반환할 수 있음

 

5. 삼항 연산자

if문을 사용할 때 단순히 참과 거짓에 따라 특정 값을 구하는 경우가 있다.

package cond;

public class CondOp1 {
    public static void main(String[] args) {
        int age = 18;
        String status;
        if (age >= 18) {
            status = "성인";
        } else {
            status = "미성년자";
        }
        System.out.println("age = " + age + " status = " + status);
    }
}

age = 18일 때의 실행 결과                                                                                 age = 16일 때의 실행 결과

참(age >= 18)과 거짓(age < 18)에 따라 status 변수의 값이 달라진다.

 

삼항 연산자(= 조건 연산자)

참과 거짓에 따라 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 ? : 연산자를 사용할 수 있다.

if문보다 코드를 단순화할 수 있다.

(조건) ? 참_표현식 : 거짓_표현식
  • 삼항 연산자: 조건, 참_표현식, 거짓_표현식으로 항이 3개
  • 조건 연산자: 특정 조건에 따라 결과가 나옴
  • if, else문과 유사: 조건에 만족하면 참_표현식 실행 / 조건에 만족하지 않으면 거짓_표현식 실행
  • if문처럼 코드 블럭을 넣을 수 있는 것이 아니라 단순한 표현식만 넣을 수 있음
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);
    }
}

실행 결과

 

+ Recent posts