[인프런] 김영한의 자바 입문 - 4

김다은·2024년 3월 26일

JAVA

목록 보기
4/14
post-thumbnail

이 게시글은 인프런 "김영한의 자바 입문" 강의를 바탕으로 작성했습니다:)

조건문

if문1 - if, else

if문

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

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

실행결과

성인입니다.

else문

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

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

If2

package cond;

public class If2 {
    public static void main(String[] args) {
        int age = 20; //사용자의 나이

        if (age >= 18) {
            System.out.println("성인입니다.");//참일 때 실행
        }else{
            System.out.println("미성년자입니다.");//만족하는 조건이 없을 때 실행
        }
    }
}

실행결과

성인입니다.

if문2 - 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 {
 // 모든 조건이 거짓일 때 실행되는 코드
}

쉽게 이야기해서 이렇게 전체 if 문을 하나로 묶는다고 보면 된다. 이렇게 하면 특정 조건이 만족하면 해당 코드를 실행
하고 if 문 전체를 빠져나온다. 특정 조건을 만족하지 않으면 다음 조건을 검사한다. 여기서 핵심은 순서대로 맞는 조건
을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 되는 것이다.
참고로 else 는 생략할 수 있다.

else 생략 코드

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

If4

package cond;

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

        if(age <= 7) { //~7: 미취학
            System.out.println("미취학");
        } else if(age <= 13) { //8~13: 초등학생
            System.out.println("초등학생");
        } else if(age <= 16) { //14~16: 중학생
            System.out.println("중학생");
        } else if(age <= 19) { //17~19: 고등학생
            System.out.println("고등학생");
        } else { //20~: 성인
            System.out.println("성인");
        }
    }
}

if문3 - 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 수행
}

예시 1은 작업1, 작업2 둘 중 하나만 수행된다. 그런데 예시 2는 조건만 맞다면 둘다 수행될 수 있다.

if 문에 여러 조건이 있다고 항상 if-else 로 묶어서 사용할 수 있는 것은 아니다. 조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우에는 else if 문을 사용하면 안되고, 대신에 여러 if 문을 분리해서 사용해야 한다.
여러 독립적인 조건을 검사해야 하는 경우가 그런 상황의 대표적인 예시이다.
즉, 각 조건이 다른 조건과 연관되지 않고, 각각의 조건에 대해 별도의 작업을 수행해야 할 때 이런 상황이 발생한다

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

코드해석

  • 이 코드에서는 각각 독립된 if 문이 있다. 따라서 해당하는 모든 할인을 적용한다.
  • 만약 else if 를 쓰면, 첫 번째로 충족하는 조건만 할인이 적용되고 나머지는 무시된다. 따라서 사용자는 나머지 할인을 놓칠 수 있다.

❇️ 참고 - if문 {} 중괄호 생략
if 문 다음에 실행할 명령이 하나만 있을 경우에는 {} 중괄호를 생략할 수 있다. else if , else 도 마찬가지이다.

if (true)
 System.out.println("if문에서 실행됨");

다음과 같은 경우에는 두번째 문장은 if 문과 무관하다. 만약 둘다 if 문 안에 포함하려면 {} 를 사용해야 한다.

if (true)
System.out.println("if문에서 실행됨");
System.out.println("if문에서 실행 안됨");

만약 둘다 if 문 안에 포함하려면 다음과 같이 {} 를 사용해야 한다.

if (true) {
System.out.println("if문에서 실행됨");
System.out.println("if문에서 실행 안됨")

일반적으로는 if 문의 명령이 한개만 있을 경우에도 다음과 같은 이유로 중괄호를 사용하는 것이 좋다.

  • 가독성: 중괄호를 사용하면 코드를 더 읽기 쉽게 만들어 준다. 조건문의 범위가 명확하게 표시되므로 코드의 흐름을 더 쉽게 이해할 수 있다.
  • 유지보수성: 중괄호를 사용하면 나중에 코드를 수정할 때 오류를 덜 발생시킬 수 있다. 예를 들어, if 문에 또 다른 코드를 추가하려고 할 때, 중괄호가 없으면 이 코드가 if 문의 일부라는 것이 명확하지 않을 수 있다.

switch문

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

switch 문은 조건식에 해당하는 특정 값으로 실행할 코드를 선택한다.

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

Switch2

package cond;

public class Switch2 {
    public static void main(String[] args) {
        //grade 1:1000, 2:2000, 3:3000, 나머지: 500
        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;
        }
        System.out.println("발급받은 쿠폰 " + coupon);
    }
}

실행결과
발급받은 쿠폰 2000

if문 vs switch문

switch 문의 조건식을 넣는 부분을 잘 보면 x > 10 과 같은 참 거짓의 결과가 나오는 조건이 아니라, 단순히 값만 넣을 수 있다.
switch 문은 조건식이 특정 case 와 같은지만 체크할 수 있다. 쉽게 이야기해서 값이 같은지 확인하는 연산만 가능하다. (문자도 가능)
반면에 if 문은 참 거짓의 결과가 나오는 조건식을 자유롭게 적을 수 있다. 예) x > 10 , x == 10

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

자바 14 새로운 switch

package cond;

public class Switch3 {
    public static void main(String[] args) {
        //grade 1:1000, 2:2000, 3:3000, 나머지: 500
        int grade = 2;

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

기존 switch문과의 차이는 다음과 같다.

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

삼항 연산자

단순히 참과 거짓에 따라서 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 ?: 연산자를 사용할 수 있다.
이 연산자를 사용하면 if 문과 비교해서 코드를 단순화 할 수 있다.

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 = 성인
코드 분석

String status = (age >= 18) ? "성인" : "미성년자"; //age=18
String status = (true) ? "성인" : "미성년자"; //조건이 참이므로 참 표현식 부분이 선택된다.
String status = "성인"; //결과

삼항 연산자

(조건) ? 참_표현식 : 거짓_표현식

  • 삼항 연산자는 항이 3개라는 뜻이다. 조건 , 참_표현식 , 거짓_표현식 이렇게 항이 3개이다. 자바에서 유일하게 항이 3개인 연산자여서 삼항 연산자라 한다. 또는 특정 조건에 따라 결과가 나오기 때문에 조건 연산자라고도 한다.
  • 조건에 만족하면 참_표현식 이 실행되고, 조건에 만족하지 않으면 거짓_표현식 이 실행된다. 앞의 if , else 문과 유사하다.
  • if 문 처럼 코드 블럭을 넣을 수 있는 것이 아니라 단순한 표현식만 넣을 수 있다.

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

profile
꾸준함으로 성취하는 개발자

0개의 댓글