제어문

이기영·2024년 5월 27일

Java 기초학습

목록 보기
4/14
post-thumbnail

목표

자바가 제공하는 제어문을 학습

목차

1. 선택문
2. 반복문


1. 선택문

  크게 if문과 switch 문이 존재합니다. 먼저 if 문을 살펴보겠습니다.

1) if문

int number = 0;
if (number > 0) {
    System.out.println("The number is positive.");
} else if (number < 0) {
    System.out.println("The number is negative.");
} else {
    System.out.println("The number is zero.");
}

  가장먼저 if문 내부의 조건을 확인합니다. 순차적으로 조건을 검사하며, 첫 번째 참인 조건의 코드 블록을 실행합니다. 만약 마지막까지 조건이 일치하지 않는다면, else문의 코드블럭을 실행합니다.

2) switch문

  switch 문은 하나의 변수 값에 따라 여러 코드 블록 중 하나를 실행할 때 사용합니다. switch 문은 정수, 문자열, 열거형(enum) 값에 대해 사용할 수 있습니다.

int day = 3;
switch (day) {
    case 1:
        System.out.println("1");
        break;
    case 2:
        System.out.println("2");
        break;
    case 3:
        System.out.println("3");
        break;
    default:
        System.out.println("Invalid num");
        break;
}

break: 각 case블록의 끝에 사용되며, 해당 블록이 실행된 후 switch문을 빠져나갑니다. break를 사용하지 않으면, 다음 case블럭이 실행됩니다.

3) Java13의 switch 표현식

  이전 포스팅에서도 소개하였지만, Java13부터 switch문은 표현식으로 사용될 수 있으며, yield 키워드를 사용하여 값을 반환할 수 있습니다.

예시 1

int day = 3;
String dayName = switch (day) {
    case 1 -> "Monday";
    case 2 -> "Tuesday";
    case 3 -> "Wednesday";
    case 4 -> "Thursday";
    case 5 -> "Friday";
    case 6 -> "Saturday";
    case 7 -> "Sunday";
    default -> "Invalid day";
};
System.out.println(dayName);

  여기서는 day 변수의 값에 따라 dayName 변수가 설정됩니다. case 블록은 화살표(->)를 사용하여 값을 반환합니다.

예시 2

  각 case에서 여러 레이블을 쉼표로 구분할 수 있으며, 복잡한 로직을 처리하기 위해 중괄호 {}를 사용하여 코드 블록을 작성할 수 있습니다.

int score = 85;
String grade = switch (score) {
    case 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 -> "A";
    case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89 -> "B";
    case 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 -> "C";
    case 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 -> "D";
    default -> {
        if (score < 60) {
            yield "F";
        } else {
            yield "Invalid score";
        }
    }
};
System.out.println("Grade: " + grade);

yield 키워드를 사용하여 값 반환

yield 키워드는 중괄호를 사용한 복잡한 코드 블록 내에서 값을 반환할 때 사용됩니다.

int num = 10;
String parity = switch (num % 2) {
    case 0 -> {
        String result = "even";
        yield result;
    }
    case 1 -> {
        String result = "odd";
        yield result;
    }
    default -> throw new IllegalStateException("Unexpected value: " + num % 2);
};
System.out.println("The number is " + parity);

요약

  • 더 간결한 문법으로 가독성이 향상되는 장점이 있습니다.
  • case 블록에서 명시적으로break를 사용하지 않아도 됩니다.
  • 값을 반환하여 함수형 프로그래밍 스타일을 지원
  • 다중 레이블과 yield 키워드를 사용하여 보다 복잡한 로직을 처리할 수 있음


2. 반복문

1-1) for문

for 문은 반복 횟수가 명확할 때 주로 사용됩니다. 초기화, 조건 검사, 증감식을 한 줄에 작성하여 반복문을 제어합니다.

for (initialization; condition; update) {
    // 반복할 코드
}

for (int i = 0; i < 5; i++) {
    System.out.println("i: " + i);
}

1-2) for-each

  향상된 for문이라고도 불립니다. 반복자를 사용하지 않고도 각 요소에 접근할 수 있습니다.

for (type element : array/collection) {
    // 반복할 코드
}

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
    System.out.println("number: " + number);
}

2) while 문

while 문은 반복 횟수가 명확하지 않고, 조건이 참인 동안 반복을 계속할 때 사용됩니다. 조건이 처음에 검사됩니다.

while (condition) {
    // 반복할 코드
}

int i = 0;
while (i < 5) {
    System.out.println("i: " + i);
    i++;
}

3) do-while 문

do-while 문은 조건이 참인지 여부에 상관없이 코드를 최소한 한 번 실행하고, 이후 조건이 참인 동안 반복을 계속합니다. 조건이 나중에 검사됩니다.

do {
    // 반복할 코드
} while (condition);


int i = 0;
do {
    System.out.println("i: " + i);
    i++;
} while (i < 5);

4) 반복문 제어 키워드

  • break : 반복문을 즉시 종료합니다.
  • continue : 현재 반복을 건너뛰고, 다음 반복을 시작합니다.
// break
for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;
    }
    System.out.println("i: " + i);
}


// continue
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;
    }
    System.out.println("i: " + i);
}


profile
안녕나를소개하지이름은HaBu직업은Programer취미는tai chi meditation

0개의 댓글