Back-End (Web)/JAVA

[JAVA] 조건문

JABHACK 2024. 11. 11. 15:50

간단히 프로그램은 인간이 하는 말을 단조로운 언어로 번역해 기기에게 설명해 주는 것이라 말할 수 있다. 즉 프로그램이란 현실이나 이상을 구현하는 작업임으로, 그 체계는 인간의 언어를 기반으로 한다.

 

흔히 일상 생활에서 '~하면 ~하지' 와 같은 만약의 의미를 담는 조건문을 사용하는 경우가 많다. 어찌 보면 하나의 템플릿 처럼 사용될 정도로 자주 사용하는 문장인 만큼 프로그램에도 이 조건문을 정의해 두었다.

  • if(조건)
    • 특정 조건에 따라 다른 연산을 수행하고 싶을 때 사용하는 문맥입니다.
    • 기본적인 조건에 따른 연산을 수행하기 위해 if(조건) { 연산 } 형태로 사용합니다.
    • if의 소괄호() 안의 조건이 boolean 값 true를 만족하면 중괄호 {} 안의 연산을 수행합니다.
  • if(조건)-else if(조건)
    • if문 조건이 거짓일 경우에 다시 한번 다른 조건으로 체크해서 참일 경우에 연산을 수행하기 위해 else if(조건) { 연산 } 형태로 사용합니다.
    • else if의 소괄호() 안의 조건이 boolean 값 true를 만족하면 else if의 중괄호 {} 안의 연산을 수행합니다.
  • if(조건)-else
    • if문 조건이 거짓일 경우에 따른 연산을 수행하기 위해 else { 연산 } 형태로 사용합니다.
    • if의 소괄호() 안의 조건이 boolean 값 false를 만족하면 else의 중괄호 {} 안의 연산을 수행합니다
// 조건문으로 가위바위보 만들기

import java.util.Objects;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		System.out.print("A 입력 : ");
		String aHand = sc.nextLine(); // A 입력

		System.out.print("B 입력 : ");
		String bHand = sc.nextLine(); // B 입력

		if (Objects.equals(aHand, "가위")) { // 값을 비교하는 Obects.equals() 메서드 사용
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 와 B 는 비겼습니다."); // A 와 B 의 입력값을 비교해서 결과 출력
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 가 이겼습니다.");
			} else {
				System.out.println(" B 유저 값을 잘못 입력하셨습니다.");
			}
		} else if (Objects.equals(aHand, "바위")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 와 B 는 비겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("B 가 이겼습니다.");
			}
		} else if (Objects.equals(aHand, "보")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 와 B 는 비겼습니다.");
			}
		}

	}
}

// 입/출력 예시
// A 입력 : 가위
// B 입력 : 보
// A 가 이겼습니다.
  • if = ~하면 ~하지 = 조건문
  • else = 만약에 그게 아니면 ~하자 = 조건외
  • else = 만약에 ~가 아니면 ~이지 않을까? = 꼬리 물기 조건

그런데 이거 너무 긴거 아닐까? 라는 생각이 든다. 현실에서도 조건에 부차적인 조건이 붙는 경우는 많다. "꽃 10송이 사와, 10송이 없으면 5송이만 사와" 이런 것처럼 말이다. 이를 좀 더 간결하게 사용하기 위해 만들어진 메소드가 switch이다.

 

switch

  • 여러 경우의 수 중 하나를 선택해야 할 때 사용하는 제어문입니다.
    • switch(피연산자) { case(조건): (연산) } 이러한 형태로 많이 쓰입니다.
    • switch 피연산자가 case 조건을 만족하면 case: 뒤에 명시되어 있는 연산을 수행합니다.
    • case(조건): (연산) 은 여러 개를 설정할 수 있습니다.
      • 🔎 각 case의 연산문 마지막에는 break;를 꼭 넣어줘야 합니다!!
      • break; 문은 해당 case의 연산문이 끝났다는 것을 알려주어 switch 문을 종료시켜줍니다.
      • 즉 break가 없으면, switch의 모든 조건을 다 한번씩 실행해본다.
    • switch문 중괄호 안의 제일 마지막에 default: (연산) 을 명시해 주어 case 조건들이 모두 만족하지 않을 때 수행할 연산을 정해주어야 합니다.
      • default: (연산) 은 아무것도 만족하지 않을 때 수행하는 것이라, 없다면 생략해도 됩니다.
// if vs switch
// switch 문 실습코드를 if 문으로 바꿔보겠습니다.

// switch 
int month = 8;
String monthString = "";
switch (month) {
    case 1:  monthString = "1월";
             break;
    case 2:  monthString = "2월";
             break;
    case 3:  monthString = "3월";
             break;
    case 4:  monthString = "4월";
             break;
    case 5:  monthString = "5월";
             break;
    case 6:  monthString = "6월";
             break;
    case 7:  monthString = "7월";
             break;
    case 8:  monthString = "8월"; 
             break;
    case 9:  monthString = "9월";
             break;
    case 10: monthString = "10월";
             break;
    case 11: monthString = "11월";
             break;
    case 12: monthString = "12월";
             break;
    default: monthString = "알수 없음";
}
System.out.println(monthString); // 8월 출력

// if 로 변환
if (month == 1) {
	monthString = "1월";
} else if (month == 2) {
	monthString = "2월";
} else if (month == 3) {
	monthString = "3월";
} else if (month == 4) {
	monthString = "4월";
} else if (month == 5) {
	monthString = "5월";
} else if (month == 6) {
	monthString = "6월";
} else if (month == 7) {
	monthString = "7월";
} else if (month == 8) {
	monthString = "8월";
} else if (month == 9) {
	monthString = "9월";
} else if (month == 10) {
	monthString = "10월";
} else if (month == 11) {
	monthString = "11월";
} else if (month == 12) {
	monthString = "12월";
} else {
	monthString = "알수 없음";
}
System.out.println(monthString); // 8월 출력

 

 

그렇다고 모든 상황에서 if보다 switch가 좋은 것은 아니다.

 

switch는 각 조건에 추가 꼬리 조건이 달릴 수 없지만 if는 가능하다.

if (Objects.equals(aHand, "가위")) { // 값을 비교하는 Obects.equals() 메서드 사용
	if (Objects.equals(bHand, "가위")) {
		System.out.println("A 와 B 는 비겼습니다."); // A 와 B 의 입력값을 비교해서 결과 출력
	}
            
            
            switch (month) {
    case 1:  monthString = "1월";
             break;
    case 2:  monthString = "2월";
             break;
    case 3:  monthString = "3월";

    default: monthString = "알수 없음";
}

 

보면 if는 조건에 조건을 추가할 수 있지만, switch는 조건마다 1개의 조건만 추가할 수 있다.

 

즉, 각 조건문은 각자의 장점이 있고 때에따라 다른 조건문을 사용하는 것이 좋다.

 

'Back-End (Web) > JAVA' 카테고리의 다른 글

[JAVA] 배열  (0) 2024.11.11
[JAVA] 반복문  (0) 2024.11.11
[JAVA] 연산자  (0) 2024.11.11
[JAVA] 변수와 변수 종류  (0) 2024.11.11
[JAVA] 자바 개발을 위한 준비물 IntelliJ  (0) 2024.11.11