공부 기록/JAVA

20240423 - Java 조건문

bumm 2024. 4. 23. 15:43

if - else 문

// hello_java 패키지 내의 Grade 클래스
package hello_java;

// Grade 클래스 정의
public class Grade {
    // 메인 메서드 - 프로그램 실행 시작점
    public static void main(String[] args) {
        // printGrade 메서드 호출하여 각 점수에 대한 학점 출력
        printGrade(96);  // 'A' 학점 출력
        printGrade(86);  // 'B' 학점 출력
        printGrade(70);  // 'C' 학점 출력
        printGrade(55);  // 'F' 학점 출력
    }

    // printGrade 메서드 - 점수를 입력받아 학점을 결정하고 출력하는 메서드
    public static void printGrade(int score) {
        String grade = "";  // 학점을 저장할 변수

        // 조건문을 사용하여 점수에 따라 학점을 결정
        if (score >= 90) {
            grade = "A";  // 90점 이상일 때 'A'
        } else if (score >= 80) {
            grade = "B";  // 80점 이상 90점 미만일 때 'B'
        } else if (score >= 70) {
            grade = "C";  // 70점 이상 80점 미만일 때 'C'
        } else {
            grade = "F";  // 70점 미만일 때 'F'
        }
        // 점수와 학점을 형식에 맞게 출력
        System.out.printf("%d점의 학점: %s\n", score, grade);
    }
}

 

void : 반환할 값이 없을 때 쓰는 TYPE

컴퓨터는 메인 메서드부터 찾음

컴퓨터가 코드를 읽는 순서

  1. 프로그램 실행 시작
    • Java 프로그램은 main 메서드에서 실행을 시작합니다. 이는 모든 Java 애플리케이션의 진입점(entry point)입니다.
  2. 메서드 호출
    • main 메서드 내부에서 printGrade 메서드를 차례대로 네 번 호출합니다. 각 호출은 다음과 같은 순서로 진행됩니다:
      • printGrade(96) 호출
      • printGrade(86) 호출
      • printGrade(70) 호출
      • printGrade(55) 호출
  3. printGrade 메서드 실행
    • printGrade 메서드가 호출되면, 해당 메서드 내부의 코드가 실행됩니다. 이 메서드는 입력받은 점수(score)를 기반으로 학점을 결정합니다.
    • score 변수의 값에 따라 다음과 같이 조건을 평가합니다:
      • if (score >= 90) 조건을 먼저 검사합니다. 참이면 grade를 "A"로 설정하고 조건문을 벗어납니다.
      • 첫 번째 조건이 거짓이면, else if (score >= 80) 조건을 검사합니다. 참이면 grade를 "B"로 설정하고 조건문을 벗어납니다.
      • 두 번째 조건도 거짓이면, else if (score >= 70) 조건을 검사합니다. 참이면 grade를 "C"로 설정하고 조건문을 벗어납니다.
      • 모든 조건이 거짓이면, else 블록이 실행되어 grade를 "F"로 설정합니다.
  4. 결과 출력
    • 조건문을 통해 결정된 grade 값과 입력된 score를 System.out.printf 메서드를 사용하여 출력합니다. 이 메서드는 지정된 형식("%d점의 학점: %s\n")에 맞게 점수와 학점을 화면에 표시합니다.
  5. 메서드 완료
    • printGrade 메서드의 실행이 끝나면, 다음 printGrade 호출로 넘어갑니다. 모든 호출이 완료되면 main 메서드가 종료되며 프로그램의 실행이 끝납니다.

switch 문

// hello_java 패키지 내의 TrafficLight 클래스
package hello_java;

// TrafficLight 클래스 정의
public class TrafficLight {
    // 메인 메서드 - 프로그램 실행 시작점
    public static void main(String[] args) {
        // light 메서드 호출하여 각 신호등 색에 대한 동작 수행
        light("RED");    // 빨간 불이 켜짐
        light("YELLOW"); // 노란 불이 켜짐
        light("GREEN");  // 초록 불이 켜짐
        light("BLUE");   // 잘못된 색 입력에 대한 에러 처리
    }
    
    // light 메서드 - 입력받은 색에 따라 신호등의 상태를 출력하는 메서드
    public static void light(String color) {
        // switch 문을 사용하여 color 변수의 값에 따라 다른 동작 수행
        switch (color) {
            case "RED":
                System.out.println("빨간 불이 켜집니다."); // 빨간 불 상태 출력
                break;
            case "YELLOW":
                System.out.println("노란 불이 켜집니다."); // 노란 불 상태 출력
                break;
            case "GREEN":
                System.out.println("초록 불이 켜집니다."); // 초록 불 상태 출력
                break;
            default:
                // 기본 경우, 즉 정의되지 않은 다른 색을 입력받았을 때의 에러 메시지 출력
                System.out.printf("에러, 잘못된 색 입력: %s\n", color);
        }
    }
}

추가 설명

  • 클래스와 메서드: TrafficLight 클래스는 메인 메서드와 light 메서드로 구성되어 있습니다. 메인 메서드에서는 light 메서드를 여러 번 호출하여 신호등의 색상에 따른 동작을 시뮬레이션합니다.
  • Switch 문: light 메서드 내부에서는 switch 문을 사용하여 입력된 color 값에 따라 다른 동작을 수행합니다. 각 case는 특정 색을 처리하고, default는 입력된 색이 정의된 색상이 아닐 때 실행됩니다.
  • 출력: 각 색상에 대한 메시지는 System.out.println 또는 System.out.printf를 사용하여 출력됩니다. 이를 통해 사용자에게 현재 신호등의 상태가 어떤지 알려줍니다.

이 코드는 조건 분기를 처리하는 데 있어 if-else 구조 대신 switch 문을 사용하는 좋은 예입니다. switch 문은 특정 변수의 값에 따라 다수의 경우를 쉽게 처리할 수 있게 해줍니다.

 

switch 문의 특징

  1. 실행 흐름의 이해: 한 case에 해당하는 코드를 실행한 후, break 문을 만나지 않는다면, 실행은 "넘어가(fall through)" 다음 case로 계속됩니다.
  2. 값의 제한: case에 사용할 수 있는 값은 상수이어야 하며, 변수나 런타임에 결정되는 값은 사용할 수 없습니다.
  3. 타입의 제한: 초기에는 switch 문에서 정수 타입만 사용할 수 있었지만, Java 7 이상부터는 문자열(String)도 사용할 수 있습니다.
  4. 효율성: switch 문은 if-else 조건문에 비해 종종 더 효율적으로 코드를 조직할 수 있게 해줍니다. 특히 많은 조건을 검사해야 할 때 코드의 가독성을 높여줍니다.

 

switch문에서 break를 사용하는 이유

switch 문에서 break 키워드를 사용하는 이유는 각 case 블록의 실행을 완료한 후 switch 문에서 빠져나오도록 하기 위해서입니다. break가 없으면, 프로그램은 해당 case를 실행한 후에 다음 case로 "넘어가서(fall through)" 계속 실행하게 됩니다. 이를 방지하기 위해 각 case 끝에 break를 사용합니다.

 

삼항 연산자

// hello_java 패키지 내의 OddOrEven 클래스
package hello_java;

public class OddOrEven {
    public static void main(String[] args) {
        printResult(13);  // 13은 홀수
        printResult(6);   // 6은 짝수
    }

    // 정수를 입력받아, 홀수나 짝수 여부를 출력하는 메서드
    public static void printResult(int n) {
        // 삼항 연산자를 사용하여 n이 짝수인지 홀수인지 판별
        String result = (n % 2 == 0) ? "짝수" : "홀수";
        // 판별 결과를 출력
        System.out.printf("정수 %d는 %s입니다. \n", n, result);
    }
}

 

코드 설명

  • 메인 메서드 (main): 프로그램의 실행이 시작되는 지점입니다. printResult 메서드를 두 번 호출하여 각각의 정수 13과 6에 대해 홀수 또는 짝수 여부를 출력합니다.
  • 메서드 (printResult): 이 메서드는 정수 n을 매개변수로 받아 홀수인지 짝수인지를 판별하고 결과를 출력합니다.
    • 삼항 연산자: (n % 2 == 0) ? "짝수" : "홀수"는 n을 2로 나눈 나머지가 0이면 "짝수", 그렇지 않으면 "홀수"를 result 변수에 저장합니다.
    • 출력: System.out.printf를 사용하여 결과를 형식에 맞게 출력합니다. %d는 정수를, %s는 문자열을 나타냅니다.

삼항 연산자에 대한 추가 설명

삼항 연산자는 조건 ? 참일 때 값 : 거짓일 때 값의 형식으로 작성됩니다. 이 연산자는 간단한 조건 판단에 매우 유용하며, 코드를 간결하게 만드는 데 도움을 줍니다. 여기서는 짝수와 홀수를 판별하는 데 사용되었습니다.

 

논리 연산자

AND(&&), OR(||), XOR( ^) NOT(!)

 

// hello_java 패키지 내의 Scholarship2 클래스
package hello_java;

public class Scholarship2 {
    public static void main(String[] args) {
        // printScholarship 메서드 호출하여 학생들의 장학금 결과를 출력
        printScholarship("Park", 100, 92); // Park 학생은 전액 장학금
        printScholarship("Kim", 82, 96);   // Kim 학생은 반액 장학금
        printScholarship("Choi", 82, 88);  // Choi 학생은 다음 기회에
    }

    // printScholarship 메서드 - 이름과 두 과목의 점수를 받아 장학금 결과를 결정하고 출력하는 메서드
    public static void printScholarship(String name, int math, int eng) {
        String result = ""; // 결과를 저장할 변수

        // 조건문을 통해 장학금 수여 조건을 판별
        if (math >= 90 && eng >= 90) {
            result = "전액 장학금!"; // 수학과 영어 점수가 모두 90점 이상일 때
        } else if (math >= 90 || eng >= 90) {
            result = "반액 장학금!"; // 수학 또는 영어 점수 중 하나라도 90점 이상일 때
        } else {
            result = "다음 기회에~"; // 그 외의 경우
        }
        // 결과를 출력
        System.out.printf("%s => %s\n", name, result);
    }
}

 

코드 설명

  • 메인 메서드 (main): 프로그램의 시작점입니다. printScholarship 메서드를 세 번 호출하여 각 학생의 이름과 수학, 영어 점수를 인자로 전달합니다.
  • 메서드 (printScholarship): 이 메서드는 학생의 이름(name)과 두 과목의 점수(math, eng)를 매개변수로 받습니다. 장학금의 수혜 여부를 결정하기 위해 조건문(if-else)을 사용합니다.
    • 조건문:
      • 첫 번째 if문은 두 과목 점수 모두 90점 이상일 때 "전액 장학금!"을 부여합니다.
      • else if문은 두 과목 중 하나라도 90점 이상이면 "반액 장학금!"을 부여합니다.
      • else문은 위의 조건에 모두 해당하지 않을 때 "다음 기회에~"라는 결과를 부여합니다.
  • 출력: 각 학생의 이름과 해당 결과를 System.out.printf를 사용해 출력합니다. %s는 문자열을 나타내는 서식 지정자입니다.