Java/문법

Java 조건문 if-else, switch-case

ssury94 2024. 12. 15. 21:50
 
 
 

if-else문

// 가격이 3000원보다 싸면, "가격이 좋습니다."라고 출력하고
// 그렇지 않으면 "비싸네요"라고 출력하세요.
// ~라면, ~해라 < 조건문 (조건 + 액션)
// if (~라면){~해라} else {아니면 ~ 해라}

{} 코드로 블록 구분

        if(price < 3000) {
            System.out.println("가격이 좋습니다.");
        } else {
            System.out.println("비싸네요.");
        }

 

조건 연산자- 조건식 ? 결과 1 : 결과 2; 로도 가능

가독성과 간결함 중 어느쪽이 우선일지 고려해서 선택하자

public class Test {
    public static void main(String[] args) {
        int price = 2000;
        String massage = (price < 3000) ? "가격이 좋습니다." : "비싸네요.";
        System.out.println(massage);
    }
}

 

if-else if-else여러 조건을 표현할 수도 있다.

public class Test {
    public static void main(String[] args) {

    int age = 9;
    int charge;

    if(age <8){
        charge = 1000;
        System.out.println("취학전 아동입니다.");
    } else if(age < 14){
        charge = 2000;
        System.out.println("초등학생입니다.");
    } else if (age <20){
        charge = 2500;
        System.out.println("중,고등학생입니다.");
    }else{
        charge = 3000;
        System.out.println("성인입니다.");
    }
    System.out.println("요금은 "+charge+"원 입니다.");
    }
}

 

 

switch-case

조건식(ex- num>3)이 아닌 특정한 값으로 변수가 정해져있는경우 그 값에 따라 여러 가지 경우를 처리하는 조건문

 

 

1등은 골드, 2등은 실버, 3등은 브론즈, 4등부턴 메달이 없다. 이걸 if-else문으로 작성해보면 아래와 같다.

public class Test {
    public static void main(String[] args) {
        int rank =1;
        String madalColor;
        if(rank==1) {
        madalColor = "G";
        }else if(rank==2){
        madalColor = "S";
        } else if (rank == 3) {
        madalColor = "B";
        }else {
        madalColor = "none";
        }
        System.out.println(madalColor);
    }
}

 

어째 한눈에 알아보기 힘들다!

if-else문은 조건이 많아질수록 {}블록도 많이 써야하고, 그만큼 코드가 길어진다.

이럴때는 switch - case문으로 작성해주자!

public class Test {
    public static void main(String[] args) {
        int rank =1;
        String madalColor;
        switch (rank){
            case 1: madalColor= "G";
                break;
            case 2: madalColor= "S";
                break;
            case 3: madalColor= "B";
                break;
            default:madalColor="none";
        }
        System.out.println(madalColor);
    }
}

 

여러 조건이 있어도 {}는 한번만 사용하기때문에 코드도 깔끔하고 가독성도 좋아진다.

case: ~break; 까지가 조건에 해당하는 문장

일치하는 case가 없으면 default코드가 수행된다.

같은 조건의 여러 케이스를 동시에 처리하기도 좋다.

package entity;

public class Date {
    private int day;
    private int month;
    private int year;
    private boolean isValid=true;

    public Date() {
    }

    //MyDate(int day, int month, int year) 생성자
    public Date(int day, int month, int year) {
        setDay(day);
        setMonth(month);
        setYear(year);
    }

    //public boolean isValid() 메서드를 만들어 날짜가 유효한지 확인하기
    public String isValid(){
        if(isValid){
            return "유효한 날짜입니다.";
        }else {
            return "유효하지 않은 날짜입니다.";
        }

    }

    //1-30일까지인 달 : 4,6,9,11
    //1-31일까지인 달 : 1,3,5,7,8,10,12
    //2월 윤년 4년 29일, 나머지 28일
    //달은 1-12월까지

    public void setDay(int day) {
        switch(month) {
            case 4:case 6:case 9: case 11:
                if(day < 0 || day > 30){
                    isValid=false;
                }else {
                    this.day=day;
                }
                break;
            case 1:case 3:case 5:case 7:case 8:case 10:case 12:
                if (day < 0 ||day > 31) {
                    isValid = false;
                }else {
                    this.day=day;
                }
            case 2: //윤년설정
                if ( ( year % 4 ==0 &&  year % 100 !=0 ) || year % 400 ==0){
                    if( day <0 || day > 29) {
                        isValid = false;
                    } else {
                        this.day=day;
                    }
                } else {
                    if (day <0 || day >28) {
                        isValid = false;
                    }else {
                        this.day=day;
                    }
                }
        }
    }

 

if문과 switch문의 차이점 체크

조건식: if 문은 boolean 표현식을 평가하지만, switch 문은 equality만 체크합니다.
타입: if 문은 다양한 타입의 변수를 평가할 수 있지만, switch 문은 정수, 문자, 열거형, 문자열만 지원합니다.
가독성과 유지보수: switch 문은 여러 개의 분기를 처리할 때 더 가독성이 좋고, 유지보수가 쉽습니다