조건문

이상민·2024년 7월 10일

if문 - if,else

조건문 시작

특정 조건에 따라서 다른 코드를 실행하는 것을 조건문이라고 한다.
조건문은 if문,switch문이 있다.

if문

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

if (condition) {
	// 조건이 참일 때 실행되는 코드
}

if1

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("미성년자 입니다.");
        }
    }
}

실행 결과

성인입니다.

코드 분석
조건이 참이므로 성인입니다.가 화면에 출력된다.
조건이 거짓이므로 if문 블록을 실행하지 않고, 빠져나온다. 따라서 미성년자입니다는 화면에 출력되지 않는다.

else문
else문은 if문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.

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

if2

package cond;

public class If2 {

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

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

실행 결과

미성년자입니다.

if문 - else if

문제

당신은 연령에 따라 다른 메시지를 출력하는 프로그램을 작성해야 한다.
이 프로그램은 int age 라는 변수를 사용해야 하며, 연령에 따라 다음의 출력을 해야 한다.

  • 7세 이하일 경우: "미취학"
  • 8세 이상 13세 이하일 경우: "초등학생"
  • 14세 이상 16세 이하일 경우: "중학생"
  • 17세 이상 19세 이하일 경우: "고등학생"
  • 20세 이상일 경우: "성인"

if 문을 사용해서 코드를 작성해보자.

if3

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

        }
    }
}

실행 결과

중학생

위 코드의 단점

  • 불필요한 조건 검사
    • 나머지 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 {
	// 모든 조건이 거짓일 때 실행되는 코드
}

쉽게 이야기해서 전체 if문을 하나로 묶는다고 보면 된다.
순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 된다.

참고 : else는 생략할 수 있다.

if4

package cond;

public class If4 {

    public static void main(String[] args) {
        int age = 14;

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

실행 결과

중학생

if문 - if문과 else if문

if문에else if를 함께 사용하는 것은 서로 연관된 조건일 때 사용한다. 그런데 서로 관련이 없는 독립 조건이면 else if를 사용하지 않고 if문을 각각 따로 사용해야 한다.

예시

// 예시1. if-else 사용: 서로 연관된 조건이어서, 하나로 묶을 때
if (condition1) {
 // 작업1 수행
} else if (condition2) {
 // 작업2 수행
}
// 예시2. if 각각 사용: 독립 조건일 때
if (condition1) {
 // 작업1 수행
}
if (condition2) {
 // 작업2 수행
}

if문에 여러 조건이 있다고 항상 if-else로 묶어서 사용할 수 있는 것은 아니다.
조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우에는 else if문을 사용하면 안되고, 대신에 여러 if문을 분리해서 사용해야 한다.

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

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

이 할인 시스템의 핵심은 한 사용자가 동시에 여러 할인을 받을 수 있다는 점이다.

예를 들어, 10000원짜리 아이템을 구매할 때 1000원 할인을 받고, 동시에 나이가 10살 이하이면 추가로 1000원 더
할인을 받는다. 그래서 총 2000원 까지 할인을 받을 수 있다.

if5

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 + "원");
    }
}

실행 결과

10000원 이상 구매, 1000원 할인
어린이 1000원 할인
총 할인 금액: 2000원
  • 이 코드에서는 각각 독립된 if문이 있다. 따라서 해당하는 모든 할인을 적용한다.

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

switch문

문제

당신은 회원 등급에 따라 다른 쿠폰을 발급하는 프로그램을 작성해야 한다.
이 프로그램은 int grade 라는 변수를 사용하며, 회원 등급( grade )에 따라 다음의 쿠폰을 발급해야 한다.

  • 1등급: 쿠폰 1000
  • 2등급: 쿠폰 2000
  • 3등급: 쿠폰 3000
  • 위의 등급이 아닐 경우: 쿠폰 500

각 쿠폰이 할당된 후에는 "발급받은 쿠폰 " + 쿠폰값 을 출력해야 한다.

Switch1

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);

    }

}

실행 결과

발급받은 쿠폰 2000

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

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

switch (조건식) {
 case value1:
 // 조건식의 결과 값이 value1일 때 실행되는 코드
 break;
 case value2:
 // 조건식의 결과 값이 value2일 때 실행되는 코드
 break;
 default:
 // 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
 }

switch2

package cond;

public class Switch2 {
   public static void main(String[] args) {
       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;
               break;
       }
       System.out.println("발급받은 쿠폰 " + coupon);
   }
}

실행 결과

발급받은 쿠폰 2000

break 문이 없으면?

만약 break 문이 없으면 어떻게 되는지 확인하기 위해 조건을 변경해보자.
비즈니스 요구사항이 변경되었다. 2등급도 3등급과 같이 3000원 쿠폰을 준다고 해보자.

switch3

package cond;

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

        int coupon;
        switch (grade) {
            case 1:
                coupon = 1000;
                break;
            case 2:
            case 3:
                coupon = 3000;
                break;
            default:
                coupon = 500;
                break;
        }
        System.out.println("발급받은 쿠폰 " + coupon);
    }
}

실행 결과

발급받은 쿠폰 3000
  • case2break문이 없으므로 중단하지 않고 바로case3의 코드를 실행한다. 그리고 break문을 만나서 switch문 밖으로 빠져나간다.

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

switch4

package cond;

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);
    }
}

기존 switc문과 차이점

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

삼항 연산자

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

CondOp1

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 status 성인

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

CondOp2

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);
    }
}

실행 결과

age = 18 status 성인

삼항 연산자
(조건) ? 참_표현식 : 거짓_표현식

  • 삼항 연산자는 항이 3개라는 뜻이다.조건,참_표현식,거짓_표현식 이렇게 항이 3개이다.

  • 조건에 만족하면 참_표현식이 실행되고, 조건에 만족하지 않으면 거짓_표현식이 실행된다.

  • if문 처럼 코드 블럭을 넣을 수 있는 것이 아니라 단순한 표현식만 넣을 수 있다.

삼항 연산자 없이 if문만 사용해도 되지만 단순히 참과 거짓에 따라서 특정 값을 구하는 경우에 삼항 연산자를 사용하면 if문 보다 간결한 코드를 작성 할 수 있다.

문제와 풀이

문제: "학점 계산하기"

학생의 점수를 기반으로 학점을 출력하는 자바 프로그램을 작성하자. 다음과 같은 기준을 따른다.

  • 90점 이상: "A"
  • 80점 이상 90점 미만: "B"
  • 70점 이상 80점 미만: "C"
  • 60점 이상 70점 미만: "D"
  • 60점 미만: "F"

점수는 변수( int score )로 지정하고, 해당 변수를 기반으로 학점을 출력하자

ScoreEx

package cond.ex;

public class ScoreEx {

    public static void main(String[] args) {
        int score = 85;

        if (score >= 90) {
            System.out.println("학점은 A입니다.");
        }
        else if (score >= 80) {
            System.out.println("학점은 B입니다.");
        }
        else if (score >= 70) {
            System.out.println("학점은 C입니다.");
        }
        else if (score >= 60) {
            System.out.println("학점은 D입니다.");
        }
        else {
            System.out.println("학점은 F입니다.");
        }
    }
}

실행 결과

학점은 B입니다.

문제: "거리에 따른 운송 수단 선택하기"

주어진 거리에 따라 가장 적합한 운송 수단을 선택하는 프로그램을 작성하자. 다음과 같은 기준을 따른다.

  • 거리가 1km 이하이면: "도보"
  • 거리가 10km 이하이면: "자전거"
  • 거리가 100km 이하이면: "자동차"
  • 거리가 100km 초과이면: "비행기"

거리는 변수( int distance )로 지정하고, 해당 변수를 기반으로 운송 수단을 출력하자.

문제 풀이

package cond.ex;

public class DistanceEx2 {

    public static void main(String[] args) {
        int distance = 150;

        if (distance <= 1) {
            System.out.println("도보");
        }
        else if (distance <= 10) {
            System.out.println("자전거");
        }
        else if (distance <= 100) {
            System.out.println("자동차");
        }
        else {
            System.out.println("비행기");
        }
    }

}

실행 결과

비행기

문제: "환율 계산하기"

특정 금액을 미국 달러에서 한국 원으로 변환하는 프로그램을 작성하자. 환율은 1달러당 1300원이라고 가정하자. 다음
과 같은 기준을 따른다.

  • 달러가 0미만이면: "잘못된 금액입니다."
  • 달러가 0일 때: "환전할 금액이 없습니다."
  • 달러가 0 초과일 때: "환전 금액은 (계산된 원화 금액)원입니다."

금액은 변수( int dollar )로 지정하고, 해당 변수를 기반으로 한국 원으로의 환전 금액을 출력하자.

문제 풀이

package cond.ex;

public class ExchangeRateEx {

    public static void main(String[] args) {
        int dollar = 10;

        if (dollar < 0) {
            System.out.println("잘못된 금액입니다.");
        }
        else if (dollar == 0) {
            System.out.println("환전할 금액이 없습니다.");
        }
        else {
            int won = dollar * 1300;
            System.out.println("환전 금액은 " + won + "원입니다.");
        }
    }
}

환전 금액을 나타내기 위해 새로운 won이라는 변수를 선언해주자. 달러가 0초과일때만 출력되면 되므로 else 괄호 안에 삽입해 주자.

실행 결과

환전 금액은 13000원입니다.

문제: "평점에 따른 영화 추천하기"

요청한 평점 이상의 영화를 찾아서 추천하는 프로그램을 작성하자.

  • 어바웃타임 - 평점9
  • 토이 스토리 - 평점8
  • 고질라 - 평점7

평점 변수는 double rating 을 사용하세요. if 문을 활용해서 문제를 풀자.

문제 풀이

package cond.ex;

public class MovieRateEx {

    public static void main(String[] args) {
        double rating = 7.1;

        if (rating <= 9) {
            System.out.println("'어바웃타임'을 추천합니다.");
        }
        if (rating <= 8) {
            System.out.println("'토이 스토리'를 추천합니다.");
        }
        if (rating <= 7) {
            System.out.println("'고질라'를 추천합니다.");
        }
    }
}

실행 결과

어바웃 타임
토이 스토리

만약 평점이 8점이상이면 평점 9점이상인 영화도 출력 값으로 나와야 하므로 if문을 사용하자

문제: "학점에 따른 성취도 출력하기"

String grade 라는 문자열을 만들고, 학점에 따라 성취도를 출력하는 프로그램을 작성하자. 각 학점은 다음과 같은
성취도를 나타낸다.

  • "A": "탁월한 성과입니다!"
  • "B": "좋은 성과입니다!"
  • "C": "준수한 성과입니다!"
  • "D": "향상이 필요합니다."
  • "F": "불합격입니다."
  • 나머지: "잘못된 학점입니다."

switch 문을 사용해서 문제를 해결하자.

문제 풀이

package cond.ex;

public class GradeSwitchEx {

    public static void main(String[] args) {

        String grade = "B";
        switch (grade) {
            case "A":
                System.out.println("탁월한 성과입니다.");
                break;
            case "B":
                System.out.println("좋은 성과입니다.");
                break;
            case "C":
                System.out.println("준수한 성과입니다.");
                break;
            case"D":
                System.out.println("향상이 필요합니다.");
                break;
            case "F":
                System.out.println("불합격입니다.");
                break;
            default:
                System.out.println("잘못된 학점입니다.");
                break;

        }

    }
}

실행 결과

좋은 성과입니다.

문제: 더 큰 숫자 찾기

여러분은 두 개의 정수 변수 a 와 b 를 가지고 있다. a 의 값은 10 이고, b 의 값은 20 이다. 삼항 연산자를 사용하여
두 숫자 중 더 큰 숫자를 출력하는 코드를 작성하자.

문제 풀이

package cond.ex;

public class CondOpEx {

    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        int max = (a > b) ? a : b;
        System.out.println("더 큰 숫자는 " + max + "입니다.");
    }
}

실행 결과

더 큰 숫자는 20입니다.

max 라는 새로운 변수를 선언하고 삼항 연산자를 사용하자

문제: 홀수 짝수 찾기

정수 x 가 주어지면 x 가 짝수이면 "짝수"를, x 가 홀수이면 "홀수"를 출력하는 프로그램을 작성하자
삼항 연산자를 사용해야 한다.

참고로 x % 2 를 사용하면 홀수, 짝수를 쉽게 계산할 수 있다.

문제 풀이

package cond.ex;

public class EvenOddEx {

    public static void main(String[] args) {
        int x = 2;

        String result = (x % 2 == 0) ? "짝수" : "홀수";
        System.out.println("x = " + x + ", " + result);
    }
}

실행 결과

x = 2, 짝수

"짝수","홀수"라는 글자도 출력해야 하므로 String을 입력하여 result라는 문자열을 변수 선언 해주어야 한다.

마무리

오늘은 조건문을 공부하고 정리해보았는데 그 전까지는 그냥 문법만 넣으면 되는 느낌이였는데, 조건문은 새로운 변수를 선언해주는 과정이 있는 문제들이 꽤 있어서 이 부분이 가장 햇갈렸다. 조건문을 공부하면서 느낀점은 내가 단순히 코드를 넣는 것은 나쁘지 않은 것 같은데 그 속에서 새로운 변수를 선언해서 넣는 과정이 약하다는 것을 많이 깨달았다.


출처
https://www.youtube.com/watch?v=JEzBDk0E9Rw

profile
안녕하세요

0개의 댓글